Explorar el Código

feat(lazer): create js solana sdk package (#2899)

* feat(lazer): create js solana sdk package

* refactor(lazer): improve js package configs
Pavel Strakhov hace 3 meses
padre
commit
cd2b055298

+ 1 - 0
.github/CODEOWNERS

@@ -23,6 +23,7 @@ turbo.json @pyth-network/web-team
 /lazer/contracts/solana @Riateche @ali-behjati
 /lazer/publisher_sdk @darunrs @Riateche
 /lazer/sdk/js @ali-behjati @keyvankhademi
+/lazer/sdk/js-solana @ali-behjati @keyvankhademi
 /lazer/sdk/rust @darunrs @Riateche
 
 flake.lock @cprussin

+ 2 - 0
.prettierignore

@@ -1,5 +1,6 @@
 pnpm-lock.yaml
 patches/
+.mypy_cache/
 .turbo/
 target_chains/sui/vendor/
 lazer/contracts/evm/lib/
@@ -38,3 +39,4 @@ target_chains/ton/sdk/js
 contract_manager
 lazer/contracts/solana
 lazer/sdk/js
+lazer/sdk/js-solana

+ 3 - 1
lazer/contracts/solana/Cargo.lock

@@ -3204,12 +3204,14 @@ dependencies = [
 
 [[package]]
 name = "pyth-lazer-protocol"
-version = "0.8.1"
+version = "0.9.1"
 dependencies = [
  "anyhow",
  "byteorder",
  "chrono",
  "derive_more",
+ "hex",
+ "humantime",
  "humantime-serde",
  "itertools 0.13.0",
  "protobuf",

+ 22 - 0
lazer/sdk/js-solana/.gitignore

@@ -0,0 +1,22 @@
+# Coverage directory used by tools like istanbul
+coverage
+
+# Dependency directories
+node_modules/
+
+# Optional npm cache directory
+.npm
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# dotenv environment variables file
+.env
+
+# Build directory
+dist/
+
+tsconfig.tsbuildinfo

+ 7 - 0
lazer/sdk/js-solana/.prettierignore

@@ -0,0 +1,7 @@
+.vscode/
+coverage/
+dist/
+doc/
+doc*/
+node_modules/
+src/idl/

+ 1 - 0
lazer/sdk/js-solana/eslint.config.js

@@ -0,0 +1 @@
+export { base as default } from "@cprussin/eslint-config";

+ 64 - 0
lazer/sdk/js-solana/package.json

@@ -0,0 +1,64 @@
+{
+  "name": "@pythnetwork/pyth-lazer-solana-sdk",
+  "version": "0.1.0",
+  "description": "Pyth Lazer Solana SDK",
+  "publishConfig": {
+    "access": "public"
+  },
+  "files": [
+    "dist/**/*"
+  ],
+  "main": "./dist/cjs/index.js",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    "import": {
+      "types": "./dist/esm/index.d.ts",
+      "default": "./dist/esm/index.js"
+    },
+    "require": {
+      "types": "./dist/cjs/index.d.ts",
+      "default": "./dist/cjs/index.js"
+    }
+  },
+  "scripts": {
+    "update-idl": "cd ../../contracts/solana && RUSTUP_TOOLCHAIN=nightly-2025-04-15 anchor build && cp target/types/pyth_lazer_solana_contract.ts ../../sdk/js-solana/src/idl/pyth-lazer-solana-contract.ts && cp target/idl/pyth_lazer_solana_contract.json ../../sdk/js-solana/src/idl/pyth-lazer-solana-contract.json",
+    "build:cjs": "swc src -d dist/cjs --strip-leading-paths --copy-files -C module.type=commonjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
+    "build:esm": "swc src -d dist/esm --strip-leading-paths --copy-files -C jsc.experimental.keepImportAttributes=true && echo '{\"type\":\"module\"}' > dist/esm/package.json",
+    "fix:lint": "eslint --fix . --max-warnings 0",
+    "test:lint": "eslint . --max-warnings 0",
+    "test:types": "tsc",
+    "test:format": "prettier --check .",
+    "fix:format": "prettier --write .",
+    "build:docs": "typedoc --out docs/typedoc src"
+  },
+  "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
+    "@cprussin/tsconfig": "catalog:",
+    "@swc/cli": "catalog:",
+    "@swc/core": "catalog:",
+    "@types/node": "catalog:",
+    "eslint": "catalog:",
+    "prettier": "catalog:",
+    "typedoc": "catalog:",
+    "typescript": "catalog:"
+  },
+  "bugs": {
+    "url": "https://github.com/pyth-network/pyth-crosschain/issues"
+  },
+  "type": "module",
+  "homepage": "https://github.com/pyth-network/pyth-crosschain/tree/main/lazer/sdk/js-solana",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/pyth-network/pyth-crosschain",
+    "directory": "lazer/sdk/js-solana"
+  },
+  "keywords": [
+    "pyth",
+    "oracle"
+  ],
+  "license": "Apache-2.0",
+  "dependencies": {
+    "@solana/buffer-layout": "catalog:",
+    "@solana/web3.js": "catalog:"
+  }
+}

+ 0 - 0
lazer/contracts/solana/src/ed25519.ts → lazer/sdk/js-solana/src/ed25519.ts


+ 464 - 0
lazer/sdk/js-solana/src/idl/pyth-lazer-solana-contract.json

@@ -0,0 +1,464 @@
+{
+  "address": "pytd2yyk641x7ak7mkaasSJVXh6YYZnC7wTmtgAyxPt",
+  "metadata": {
+    "name": "pyth_lazer_solana_contract",
+    "version": "0.4.2",
+    "spec": "0.1.0",
+    "description": "Pyth Lazer Solana contract and SDK.",
+    "repository": "https://github.com/pyth-network/pyth-crosschain"
+  },
+  "instructions": [
+    {
+      "name": "initialize",
+      "discriminator": [
+        175,
+        175,
+        109,
+        31,
+        13,
+        152,
+        155,
+        237
+      ],
+      "accounts": [
+        {
+          "name": "payer",
+          "writable": true,
+          "signer": true
+        },
+        {
+          "name": "storage",
+          "writable": true,
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        },
+        {
+          "name": "system_program",
+          "address": "11111111111111111111111111111111"
+        }
+      ],
+      "args": [
+        {
+          "name": "top_authority",
+          "type": "pubkey"
+        },
+        {
+          "name": "treasury",
+          "type": "pubkey"
+        }
+      ]
+    },
+    {
+      "name": "update",
+      "discriminator": [
+        219,
+        200,
+        88,
+        176,
+        158,
+        63,
+        253,
+        127
+      ],
+      "accounts": [
+        {
+          "name": "top_authority",
+          "signer": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "storage",
+          "writable": true,
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        }
+      ],
+      "args": [
+        {
+          "name": "trusted_signer",
+          "type": "pubkey"
+        },
+        {
+          "name": "expires_at",
+          "type": "i64"
+        }
+      ]
+    },
+    {
+      "name": "update_ecdsa_signer",
+      "discriminator": [
+        22,
+        110,
+        222,
+        141,
+        112,
+        219,
+        27,
+        200
+      ],
+      "accounts": [
+        {
+          "name": "top_authority",
+          "signer": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "storage",
+          "writable": true,
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        }
+      ],
+      "args": [
+        {
+          "name": "trusted_signer",
+          "type": {
+            "array": [
+              "u8",
+              20
+            ]
+          }
+        },
+        {
+          "name": "expires_at",
+          "type": "i64"
+        }
+      ]
+    },
+    {
+      "name": "verify_ecdsa_message",
+      "discriminator": [
+        207,
+        170,
+        89,
+        179,
+        216,
+        67,
+        129,
+        146
+      ],
+      "accounts": [
+        {
+          "name": "payer",
+          "writable": true,
+          "signer": true
+        },
+        {
+          "name": "storage",
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        },
+        {
+          "name": "treasury",
+          "writable": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "system_program",
+          "address": "11111111111111111111111111111111"
+        }
+      ],
+      "args": [
+        {
+          "name": "message_data",
+          "type": "bytes"
+        }
+      ]
+    },
+    {
+      "name": "verify_message",
+      "docs": [
+        "Verifies a ed25519 signature on Solana by checking that the transaction contains",
+        "a correct call to the built-in `ed25519_program`.",
+        "",
+        "- `message_data` is the signed message that is being verified.",
+        "- `ed25519_instruction_index` is the index of the `ed25519_program` instruction",
+        "within the transaction. This instruction must precede the current instruction.",
+        "- `signature_index` is the index of the signature within the inputs to the `ed25519_program`.",
+        "- `message_offset` is the offset of the signed message within the",
+        "input data for the current instruction."
+      ],
+      "discriminator": [
+        180,
+        193,
+        120,
+        55,
+        189,
+        135,
+        203,
+        83
+      ],
+      "accounts": [
+        {
+          "name": "payer",
+          "writable": true,
+          "signer": true
+        },
+        {
+          "name": "storage",
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        },
+        {
+          "name": "treasury",
+          "writable": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "system_program",
+          "address": "11111111111111111111111111111111"
+        },
+        {
+          "name": "instructions_sysvar",
+          "docs": [
+            "(e.g. in `sysvar::instructions::load_instruction_at_checked`).",
+            "This account is not usable with anchor's `Program` account type because it's not executable."
+          ]
+        }
+      ],
+      "args": [
+        {
+          "name": "message_data",
+          "type": "bytes"
+        },
+        {
+          "name": "ed25519_instruction_index",
+          "type": "u16"
+        },
+        {
+          "name": "signature_index",
+          "type": "u8"
+        }
+      ],
+      "returns": {
+        "defined": {
+          "name": "VerifiedMessage"
+        }
+      }
+    }
+  ],
+  "accounts": [
+    {
+      "name": "Storage",
+      "discriminator": [
+        209,
+        117,
+        255,
+        185,
+        196,
+        175,
+        68,
+        9
+      ]
+    }
+  ],
+  "types": [
+    {
+      "name": "Storage",
+      "type": {
+        "kind": "struct",
+        "fields": [
+          {
+            "name": "top_authority",
+            "type": "pubkey"
+          },
+          {
+            "name": "treasury",
+            "type": "pubkey"
+          },
+          {
+            "name": "single_update_fee_in_lamports",
+            "type": "u64"
+          },
+          {
+            "name": "num_trusted_signers",
+            "type": "u8"
+          },
+          {
+            "name": "trusted_signers",
+            "type": {
+              "array": [
+                {
+                  "defined": {
+                    "name": "TrustedSignerInfo",
+                    "generics": [
+                      {
+                        "kind": "type",
+                        "type": "pubkey"
+                      }
+                    ]
+                  }
+                },
+                5
+              ]
+            }
+          },
+          {
+            "name": "num_trusted_ecdsa_signers",
+            "type": "u8"
+          },
+          {
+            "name": "trusted_ecdsa_signers",
+            "type": {
+              "array": [
+                {
+                  "defined": {
+                    "name": "TrustedSignerInfo",
+                    "generics": [
+                      {
+                        "kind": "type",
+                        "type": {
+                          "array": [
+                            "u8",
+                            20
+                          ]
+                        }
+                      }
+                    ]
+                  }
+                },
+                2
+              ]
+            }
+          },
+          {
+            "name": "_extra_space",
+            "type": {
+              "array": [
+                "u8",
+                43
+              ]
+            }
+          }
+        ]
+      }
+    },
+    {
+      "name": "TrustedSignerInfo",
+      "generics": [
+        {
+          "kind": "type",
+          "name": "T"
+        }
+      ],
+      "type": {
+        "kind": "struct",
+        "fields": [
+          {
+            "name": "pubkey",
+            "type": {
+              "generic": "T"
+            }
+          },
+          {
+            "name": "expires_at",
+            "type": "i64"
+          }
+        ]
+      }
+    },
+    {
+      "name": "VerifiedMessage",
+      "docs": [
+        "A message with a verified ed25519 signature."
+      ],
+      "type": {
+        "kind": "struct",
+        "fields": [
+          {
+            "name": "public_key",
+            "docs": [
+              "Public key that signed the message."
+            ],
+            "type": "pubkey"
+          },
+          {
+            "name": "payload",
+            "docs": [
+              "Signed message payload."
+            ],
+            "type": "bytes"
+          }
+        ]
+      }
+    }
+  ]
+}

+ 470 - 0
lazer/sdk/js-solana/src/idl/pyth-lazer-solana-contract.ts

@@ -0,0 +1,470 @@
+/**
+ * Program IDL in camelCase format in order to be used in JS/TS.
+ *
+ * Note that this is only a type helper and is not the actual IDL. The original
+ * IDL can be found at `target/idl/pyth_lazer_solana_contract.json`.
+ */
+export type PythLazerSolanaContract = {
+  "address": "pytd2yyk641x7ak7mkaasSJVXh6YYZnC7wTmtgAyxPt",
+  "metadata": {
+    "name": "pythLazerSolanaContract",
+    "version": "0.4.2",
+    "spec": "0.1.0",
+    "description": "Pyth Lazer Solana contract and SDK.",
+    "repository": "https://github.com/pyth-network/pyth-crosschain"
+  },
+  "instructions": [
+    {
+      "name": "initialize",
+      "discriminator": [
+        175,
+        175,
+        109,
+        31,
+        13,
+        152,
+        155,
+        237
+      ],
+      "accounts": [
+        {
+          "name": "payer",
+          "writable": true,
+          "signer": true
+        },
+        {
+          "name": "storage",
+          "writable": true,
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        },
+        {
+          "name": "systemProgram",
+          "address": "11111111111111111111111111111111"
+        }
+      ],
+      "args": [
+        {
+          "name": "topAuthority",
+          "type": "pubkey"
+        },
+        {
+          "name": "treasury",
+          "type": "pubkey"
+        }
+      ]
+    },
+    {
+      "name": "update",
+      "discriminator": [
+        219,
+        200,
+        88,
+        176,
+        158,
+        63,
+        253,
+        127
+      ],
+      "accounts": [
+        {
+          "name": "topAuthority",
+          "signer": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "storage",
+          "writable": true,
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        }
+      ],
+      "args": [
+        {
+          "name": "trustedSigner",
+          "type": "pubkey"
+        },
+        {
+          "name": "expiresAt",
+          "type": "i64"
+        }
+      ]
+    },
+    {
+      "name": "updateEcdsaSigner",
+      "discriminator": [
+        22,
+        110,
+        222,
+        141,
+        112,
+        219,
+        27,
+        200
+      ],
+      "accounts": [
+        {
+          "name": "topAuthority",
+          "signer": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "storage",
+          "writable": true,
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        }
+      ],
+      "args": [
+        {
+          "name": "trustedSigner",
+          "type": {
+            "array": [
+              "u8",
+              20
+            ]
+          }
+        },
+        {
+          "name": "expiresAt",
+          "type": "i64"
+        }
+      ]
+    },
+    {
+      "name": "verifyEcdsaMessage",
+      "discriminator": [
+        207,
+        170,
+        89,
+        179,
+        216,
+        67,
+        129,
+        146
+      ],
+      "accounts": [
+        {
+          "name": "payer",
+          "writable": true,
+          "signer": true
+        },
+        {
+          "name": "storage",
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        },
+        {
+          "name": "treasury",
+          "writable": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "systemProgram",
+          "address": "11111111111111111111111111111111"
+        }
+      ],
+      "args": [
+        {
+          "name": "messageData",
+          "type": "bytes"
+        }
+      ]
+    },
+    {
+      "name": "verifyMessage",
+      "docs": [
+        "Verifies a ed25519 signature on Solana by checking that the transaction contains",
+        "a correct call to the built-in `ed25519_program`.",
+        "",
+        "- `message_data` is the signed message that is being verified.",
+        "- `ed25519_instruction_index` is the index of the `ed25519_program` instruction",
+        "within the transaction. This instruction must precede the current instruction.",
+        "- `signature_index` is the index of the signature within the inputs to the `ed25519_program`.",
+        "- `message_offset` is the offset of the signed message within the",
+        "input data for the current instruction."
+      ],
+      "discriminator": [
+        180,
+        193,
+        120,
+        55,
+        189,
+        135,
+        203,
+        83
+      ],
+      "accounts": [
+        {
+          "name": "payer",
+          "writable": true,
+          "signer": true
+        },
+        {
+          "name": "storage",
+          "pda": {
+            "seeds": [
+              {
+                "kind": "const",
+                "value": [
+                  115,
+                  116,
+                  111,
+                  114,
+                  97,
+                  103,
+                  101
+                ]
+              }
+            ]
+          }
+        },
+        {
+          "name": "treasury",
+          "writable": true,
+          "relations": [
+            "storage"
+          ]
+        },
+        {
+          "name": "systemProgram",
+          "address": "11111111111111111111111111111111"
+        },
+        {
+          "name": "instructionsSysvar",
+          "docs": [
+            "(e.g. in `sysvar::instructions::load_instruction_at_checked`).",
+            "This account is not usable with anchor's `Program` account type because it's not executable."
+          ]
+        }
+      ],
+      "args": [
+        {
+          "name": "messageData",
+          "type": "bytes"
+        },
+        {
+          "name": "ed25519InstructionIndex",
+          "type": "u16"
+        },
+        {
+          "name": "signatureIndex",
+          "type": "u8"
+        }
+      ],
+      "returns": {
+        "defined": {
+          "name": "verifiedMessage"
+        }
+      }
+    }
+  ],
+  "accounts": [
+    {
+      "name": "storage",
+      "discriminator": [
+        209,
+        117,
+        255,
+        185,
+        196,
+        175,
+        68,
+        9
+      ]
+    }
+  ],
+  "types": [
+    {
+      "name": "storage",
+      "type": {
+        "kind": "struct",
+        "fields": [
+          {
+            "name": "topAuthority",
+            "type": "pubkey"
+          },
+          {
+            "name": "treasury",
+            "type": "pubkey"
+          },
+          {
+            "name": "singleUpdateFeeInLamports",
+            "type": "u64"
+          },
+          {
+            "name": "numTrustedSigners",
+            "type": "u8"
+          },
+          {
+            "name": "trustedSigners",
+            "type": {
+              "array": [
+                {
+                  "defined": {
+                    "name": "trustedSignerInfo",
+                    "generics": [
+                      {
+                        "kind": "type",
+                        "type": "pubkey"
+                      }
+                    ]
+                  }
+                },
+                5
+              ]
+            }
+          },
+          {
+            "name": "numTrustedEcdsaSigners",
+            "type": "u8"
+          },
+          {
+            "name": "trustedEcdsaSigners",
+            "type": {
+              "array": [
+                {
+                  "defined": {
+                    "name": "trustedSignerInfo",
+                    "generics": [
+                      {
+                        "kind": "type",
+                        "type": {
+                          "array": [
+                            "u8",
+                            20
+                          ]
+                        }
+                      }
+                    ]
+                  }
+                },
+                2
+              ]
+            }
+          },
+          {
+            "name": "extraSpace",
+            "type": {
+              "array": [
+                "u8",
+                43
+              ]
+            }
+          }
+        ]
+      }
+    },
+    {
+      "name": "trustedSignerInfo",
+      "generics": [
+        {
+          "kind": "type",
+          "name": "t"
+        }
+      ],
+      "type": {
+        "kind": "struct",
+        "fields": [
+          {
+            "name": "pubkey",
+            "type": {
+              "generic": "t"
+            }
+          },
+          {
+            "name": "expiresAt",
+            "type": "i64"
+          }
+        ]
+      }
+    },
+    {
+      "name": "verifiedMessage",
+      "docs": [
+        "A message with a verified ed25519 signature."
+      ],
+      "type": {
+        "kind": "struct",
+        "fields": [
+          {
+            "name": "publicKey",
+            "docs": [
+              "Public key that signed the message."
+            ],
+            "type": "pubkey"
+          },
+          {
+            "name": "payload",
+            "docs": [
+              "Signed message payload."
+            ],
+            "type": "bytes"
+          }
+        ]
+      }
+    }
+  ]
+};

+ 6 - 0
lazer/sdk/js-solana/src/index.ts

@@ -0,0 +1,6 @@
+import type { PythLazerSolanaContract } from "./idl/pyth-lazer-solana-contract.js";
+import IDL from "./idl/pyth-lazer-solana-contract.json" with { type: "json" };
+
+export type { PythLazerSolanaContract } from "./idl/pyth-lazer-solana-contract.js";
+export const PYTH_LAZER_SOLANA_CONTRACT_IDL = IDL as PythLazerSolanaContract;
+export { createEd25519Instruction } from "./ed25519.js";

+ 4 - 0
lazer/sdk/js-solana/tsconfig.json

@@ -0,0 +1,4 @@
+{
+  "extends": "@cprussin/tsconfig/base.json",
+  "exclude": ["node_modules", "dist"]
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 264 - 115
pnpm-lock.yaml


+ 11 - 5
pnpm-workspace.yaml

@@ -44,6 +44,7 @@ packages:
   - contract_manager
   - lazer/contracts/solana
   - lazer/sdk/js
+  - lazer/sdk/js-solana
 
 catalog:
   "@amplitude/analytics-browser": ^2.13.0
@@ -70,6 +71,7 @@ catalog:
   "@radix-ui/react-slot": ^1.1.2
   "@radix-ui/react-switch": ^1.1.3
   "@react-hookz/web": ^25.1.0
+  "@solana/buffer-layout": ^4.0.1
   "@solana/wallet-adapter-base": ^0.9.24
   "@solana/wallet-adapter-react": ^0.15.36
   "@solana/wallet-adapter-react-ui": ^0.9.36
@@ -82,11 +84,13 @@ catalog:
   "@storybook/nextjs": ^8.6.12
   "@storybook/react": ^8.6.12
   "@svgr/webpack": ^8.1.0
+  "@swc/cli": ^0.7.8
+  "@swc/core": ^1.13.2
   "@tailwindcss/forms": ^0.5.10
-  "@tailwindcss/postcss": "^4.1.6"
+  "@tailwindcss/postcss": ^4.1.6
   "@tanstack/react-query": ^5.71.5
   "@types/jest": ^29.5.14
-  "@types/mdx": "^2.0.13"
+  "@types/mdx": ^2.0.13
   "@types/node": ^22.14.0
   "@types/react": ^19.1.0
   "@types/react-dom": ^19.1.1
@@ -104,9 +108,9 @@ catalog:
   dnum: ^2.14.0
   eslint: ^9.23.0
   framer-motion: ^12.6.3
-  fumadocs-core: "^15.3.0"
-  fumadocs-mdx: "^11.6.3"
-  fumadocs-ui: "^15.3.0"
+  fumadocs-core: ^15.3.0
+  fumadocs-mdx: ^11.6.3
+  fumadocs-ui: ^15.3.0
   highlight.js: ^11.11.1
   ip-range-check: ^0.2.0
   jest: ^29.7.0
@@ -144,6 +148,7 @@ catalog:
   tailwindcss-animate: ^1.0.7
   tailwindcss-react-aria-components: ^2.0.0
   ts-node: ^10.9.2
+  typedoc: ^0.26.8
   typescript: ^5.8.2
   vercel: ^41.4.1
   viem: ^2.24.3
@@ -159,6 +164,7 @@ onlyBuiltDependencies:
   - "@injectivelabs/utils"
   - "@parcel/watcher"
   - "@scarf/scarf"
+  - "@swc/core"
   - "@tailwindcss/oxide"
   - "@trufflesuite/bigint-buffer"
   - bigint-buffer

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio