diff --git a/.env.example b/.env.example index 44aa5a14b7..a0f744dd5e 100644 --- a/.env.example +++ b/.env.example @@ -647,3 +647,40 @@ INSTAGRAM_POST_INTERVAL_MAX=120 # Default: 120 minutes INSTAGRAM_ENABLE_ACTION_PROCESSING=false # Enable/disable action processing INSTAGRAM_ACTION_INTERVAL=5 # Interval between actions in minutes INSTAGRAM_MAX_ACTIONS=1 # Maximum number of actions to process at once + +#################################### +#### Pyth Plugin Configuration #### +#################################### +# Network Environment (mainnet or testnet)git +PYTH_NETWORK_ENV=mainnet + +# Mainnet Network Configuration +PYTH_MAINNET_HERMES_URL=https://hermes.pyth.network +PYTH_MAINNET_WSS_URL=wss://hermes.pyth.network/ws +PYTH_MAINNET_PYTHNET_URL=https://pythnet.rpcpool.com +PYTH_MAINNET_CONTRACT_REGISTRY=https://pyth.network/developers/price-feed-ids +PYTH_MAINNET_PROGRAM_KEY= + +# Testnet Network Configuration +PYTH_TESTNET_HERMES_URL=https://hermes.pyth.network +PYTH_TESTNET_WSS_URL=wss://hermes.pyth.network/ws +PYTH_TESTNET_PYTHNET_URL=https://pythnet.rpcpool.com +PYTH_TESTNET_CONTRACT_REGISTRY=https://pyth.network/developers/price-feed-ids#testnet +PYTH_TESTNET_PROGRAM_KEY= + +# Connection Settings +PYTH_MAX_RETRIES=3 +PYTH_RETRY_DELAY=1000 +PYTH_TIMEOUT=5000 +PYTH_GRANULAR_LOG=true +PYTH_LOG_LEVEL=debug +PYTH_LOG_LEVEL=info + +# Runtime Settings +RUNTIME_CHECK_MODE=false + +# Pyth Price Streaming and test ID +PYTH_ENABLE_PRICE_STREAMING=true +PYTH_MAX_PRICE_STREAMS=2 +PYTH_TEST_ID01=0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 +PYTH_TEST_ID02=0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace diff --git a/agent/package.json b/agent/package.json index 7fc05ffdce..e4c8f22253 100644 --- a/agent/package.json +++ b/agent/package.json @@ -1,6 +1,7 @@ { "name": "@elizaos/agent", "version": "0.1.9-alpha.1", + "version": "0.1.9-alpha.1", "main": "src/index.ts", "type": "module", "scripts": { @@ -31,14 +32,18 @@ "@elizaos/client-telegram": "workspace:*", "@elizaos/client-twitter": "workspace:*", "@elizaos/client-instagram": "workspace:*", + "@elizaos/client-instagram": "workspace:*", "@elizaos/client-slack": "workspace:*", "@elizaos/core": "workspace:*", "@elizaos/plugin-0g": "workspace:*", "@elizaos/plugin-abstract": "workspace:*", "@elizaos/plugin-agentkit": "workspace:*", + "@elizaos/plugin-agentkit": "workspace:*", "@elizaos/plugin-aptos": "workspace:*", "@elizaos/plugin-birdeye": "workspace:*", "@elizaos/plugin-coingecko": "workspace:*", + "@elizaos/plugin-birdeye": "workspace:*", + "@elizaos/plugin-coingecko": "workspace:*", "@elizaos/plugin-coinmarketcap": "workspace:*", "@elizaos/plugin-binance": "workspace:*", "@elizaos/plugin-avail": "workspace:*", @@ -53,6 +58,7 @@ "@elizaos/plugin-gitbook": "workspace:*", "@elizaos/plugin-story": "workspace:*", "@elizaos/plugin-gitcoin-passport": "workspace:*", + "@elizaos/plugin-gitcoin-passport": "workspace:*", "@elizaos/plugin-goat": "workspace:*", "@elizaos/plugin-lensNetwork": "workspace:*", "@elizaos/plugin-icp": "workspace:*", @@ -63,8 +69,10 @@ "@elizaos/plugin-node": "workspace:*", "@elizaos/plugin-solana": "workspace:*", "@elizaos/plugin-injective": "workspace:*", + "@elizaos/plugin-injective": "workspace:*", "@elizaos/plugin-solana-agentkit": "workspace:*", "@elizaos/plugin-squid-router": "workspace:*", + "@elizaos/plugin-squid-router": "workspace:*", "@elizaos/plugin-autonome": "workspace:*", "@elizaos/plugin-starknet": "workspace:*", "@elizaos/plugin-stargaze": "workspace:*", @@ -88,10 +96,12 @@ "@elizaos/plugin-video-generation": "workspace:*", "@elizaos/plugin-web-search": "workspace:*", "@elizaos/plugin-dexscreener": "workspace:*", + "@elizaos/plugin-dexscreener": "workspace:*", "@elizaos/plugin-letzai": "workspace:*", "@elizaos/plugin-thirdweb": "workspace:*", "@elizaos/plugin-genlayer": "workspace:*", "@elizaos/plugin-tee-verifiable-log": "workspace:*", + "@elizaos/plugin-tee-verifiable-log": "workspace:*", "@elizaos/plugin-depin": "workspace:*", "@elizaos/plugin-open-weather": "workspace:*", "@elizaos/plugin-obsidian": "workspace:*", @@ -103,6 +113,7 @@ "@elizaos/plugin-quai": "workspace:*", "@elizaos/plugin-b2": "workspace:*", "@elizaos/plugin-nft-collections": "workspace:*", + "@elizaos/plugin-pyth-data": "workspace:*", "readline": "1.3.0", "ws": "8.18.0", "yargs": "17.7.2" @@ -114,4 +125,4 @@ "ts-node": "10.9.2", "tsup": "8.3.5" } -} +} \ No newline at end of file diff --git a/agent/src/index.ts b/agent/src/index.ts index 3c4fd00d8f..0f96426fe0 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -41,7 +41,6 @@ import { zgPlugin } from "@elizaos/plugin-0g"; import { bootstrapPlugin } from "@elizaos/plugin-bootstrap"; import createGoatPlugin from "@elizaos/plugin-goat"; // import { intifacePlugin } from "@elizaos/plugin-intiface"; -import { DirectClient } from "@elizaos/client-direct"; import { ThreeDGenerationPlugin } from "@elizaos/plugin-3d-generation"; import { abstractPlugin } from "@elizaos/plugin-abstract"; import { akashPlugin } from "@elizaos/plugin-akash"; @@ -103,6 +102,7 @@ import { thirdwebPlugin } from "@elizaos/plugin-thirdweb"; import { hyperliquidPlugin } from "@elizaos/plugin-hyperliquid"; import { echoChambersPlugin } from "@elizaos/plugin-echochambers"; import { dexScreenerPlugin } from "@elizaos/plugin-dexscreener"; +import { pythDataPlugin } from "@elizaos/plugin-pyth-data"; import { zksyncEraPlugin } from "@elizaos/plugin-zksync-era"; import Database from "better-sqlite3"; @@ -1018,6 +1018,10 @@ export async function createAgent( getSecret(character, "RESERVOIR_API_KEY") ? createNFTCollectionsPlugin() : null, + getSecret(character, "PYTH_TESTNET_PROGRAM_KEY") || + getSecret(character, "PYTH_MAINNET_PROGRAM_KEY") + ? pythDataPlugin + : null, ].filter(Boolean), providers: [], actions: [], diff --git a/characters/dobby.character.json b/characters/dobby.character.json index 1e025f820b..f23d0f8d6c 100644 --- a/characters/dobby.character.json +++ b/characters/dobby.character.json @@ -1,7 +1,7 @@ { "name": "Dobby", "clients": [], - "modelProvider": "anthropic", + "modelProvider": "openai", "settings": { "voice": { "model": "en_GB-danny-low" diff --git a/packages/plugin-iq6900/package.json b/packages/plugin-iq6900/package.json index e2f4550c3a..68a4c1ce9c 100644 --- a/packages/plugin-iq6900/package.json +++ b/packages/plugin-iq6900/package.json @@ -6,7 +6,7 @@ "types": "dist/index.d.ts", "dependencies": { "@elizaos/core": "workspace:*", - "@solana/web3.js": "1.95.8" + "@solana/web3.js": "^1.95.8" }, "devDependencies": { "tsup": "8.3.5", diff --git a/packages/plugin-iq6900/src/functions/bringIQData.ts b/packages/plugin-iq6900/src/functions/bringIQData.ts index 28000d0e1b..38d3f808bd 100644 --- a/packages/plugin-iq6900/src/functions/bringIQData.ts +++ b/packages/plugin-iq6900/src/functions/bringIQData.ts @@ -1,7 +1,7 @@ import { elizaLogger } from "@elizaos/core"; import { Connection, PublicKey } from "@solana/web3.js"; -const network = process.env.IQSOlRPC||"https://api.mainnet-beta.solana.com"; +const network = process.env.IQSOlRPC || "https://api.mainnet-beta.solana.com"; const stringAddress = process.env.IQ_WALLET_ADDRESS; const connection = new Connection(network, "confirmed"); @@ -10,18 +10,14 @@ const iqHost = "https://solanacontractapi.uc.r.appspot.com"; async function fetchDBPDA(): Promise { try { - if(stringAddress){ + if (stringAddress) { elizaLogger.info("Connecting to Solana...(IQ6900)"); elizaLogger.info("Your Address:" + stringAddress); const response = await fetch(`${iqHost}/getDBPDA/${stringAddress}`); const data = await response.json(); if (response.ok) { return data.DBPDA as string; - } else { - throw new Error(data.error || "Failed to fetch PDA"); } - }else{ - return "null"; } } catch (error) { console.error("Error fetching PDA:", error); @@ -160,8 +156,8 @@ async function fetchSignaturesForAddress( } async function findRecentJsonSignature(): Promise { - const dbAddress = await fetchDBPDA(); + if (!dbAddress) return; const signatures = await fetchSignaturesForAddress( new PublicKey(dbAddress) ); @@ -170,15 +166,14 @@ async function findRecentJsonSignature(): Promise { const commit = await extractCommitMessage(signature); if (commit !== "null") return signature; } - return "null"; + return; } export async function bringAgentWithWalletAddress() { - const recent = await findRecentJsonSignature(); - if (recent === "null") { + if (!recent) { elizaLogger.error("Cannot found onchain data in this wallet."); - return "null"; + return; } const result = await bringCode(recent); const json_string = result.json_data; diff --git a/packages/plugin-nft-generation/package.json b/packages/plugin-nft-generation/package.json index 308f8a500a..293e128ff1 100644 --- a/packages/plugin-nft-generation/package.json +++ b/packages/plugin-nft-generation/package.json @@ -28,7 +28,7 @@ "@metaplex-foundation/umi-bundle-defaults": "^0.9.2", "@openzeppelin/contracts": "^5.1.0", "@solana-developers/helpers": "^2.5.6", - "@solana/web3.js": "1.95.5", + "@solana/web3.js": "1.95.8", "axios": "^1.7.9", "bs58": "6.0.0", "express": "4.21.1", diff --git a/packages/plugin-pyth-data/assets/Pyth.jpg b/packages/plugin-pyth-data/assets/Pyth.jpg new file mode 100644 index 0000000000..046248d449 Binary files /dev/null and b/packages/plugin-pyth-data/assets/Pyth.jpg differ diff --git a/packages/plugin-pyth-data/eslint.config.mjs b/packages/plugin-pyth-data/eslint.config.mjs new file mode 100644 index 0000000000..806d9c7858 --- /dev/null +++ b/packages/plugin-pyth-data/eslint.config.mjs @@ -0,0 +1,17 @@ +import eslintGlobalConfig from "../../eslint.config.mjs"; + +export default [ + ...eslintGlobalConfig, + { + files: ["src/**/*.ts"], + rules: { + // Disable problematic rules + "@typescript-eslint/no-unused-expressions": "off", + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-call": "off", + }, + }, +]; diff --git a/packages/plugin-pyth-data/package.json b/packages/plugin-pyth-data/package.json new file mode 100644 index 0000000000..a4d3f67059 --- /dev/null +++ b/packages/plugin-pyth-data/package.json @@ -0,0 +1,59 @@ +{ + "name": "@elizaos/plugin-pyth-data", + "version": "1.0.0", + "description": "Pyth Network data plugin for Eliza", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsup --format esm --dts", + "test": "vitest", + "lint": "eslint src --ext .ts", + "clean": "rimraf dist", + "build:schemas": "openapi-zod-client ./schema.json --output src/types/zodSchemas.ts", + "pull:schema": "curl -o schema.json -z schema.json https://hermes.pyth.network/docs/openapi.json", + "prebuild": "pnpm run pull:schema && pnpm run build:schemas" + }, + "dependencies": { + "@elizaos/core": "^0.1.7", + "@pythnetwork/client": "^2.22.0", + "@pythnetwork/hermes-client": "^1.3.0", + "@solana/web3.js": "1.95.8", + "@zodios/core": "^10.9.6", + "ajv": "^8.12.0", + "buffer": "6.0.3", + "chalk": "^5.4.1", + "cli-table3": "^0.6.5", + "cross-fetch": "^4.0.0", + "eventsource": "^3.0.2", + "jstat": "^1.9.6", + "ora": "^8.1.1", + "zod": "^3.23.8" + }, + "devDependencies": { + "@types/node": "^20.8.2", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "eslint": "^8.50.0", + "openapi-zod-client": "^1.18.1", + "rimraf": "^5.0.5", + "tsup": "^8.0.0", + "typescript": "^5.2.2", + "vitest": "^1.0.0" + }, + "peerDependencies": { + "@elizaos/core": "^0.1.7" + }, + "engines": { + "node": ">=16.0.0" + }, + "keywords": [ + "eliza", + "plugin", + "pyth", + "oracle", + "price-feed" + ], + "author": "Eliza Team", + "license": "MIT" +} diff --git a/packages/plugin-pyth-data/readme.md b/packages/plugin-pyth-data/readme.md new file mode 100644 index 0000000000..6c8d2c7c9d --- /dev/null +++ b/packages/plugin-pyth-data/readme.md @@ -0,0 +1,138 @@ +![alt text](assets/Pyth.jpg) + +# Pyth Data Plugin for ElizaOS + +A powerful plugin for interacting with Pyth Network price feeds and data streams. This plugin provides real-time access to cryptocurrency, forex, and other asset price data through a natural language interface. + +## Features + +- Real-time price feed streaming +- Latest price updates retrieval +- Publisher caps information +- Comprehensive price feed listings +- Natural language processing for price feed queries + +## Available Actions + +### 1. GET_PRICE_UPDATES_STREAM +Stream real-time price updates for specific assets. + +**Example Prompts:** +``` +Stream price updates for 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 +Stream BTC/USD price updates +``` + +### 2. GET_LATEST_PRICE_UPDATES +Retrieve the most recent price updates for specific assets. + +**Example Prompts:** +``` +Latest price updates for 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 +``` + +### 3. GET_LATEST_PUBLISHER_CAPS +Fetch information about publisher capabilities and limits. + +**Example Prompts:** +``` +Get me all the published caps +Show publisher capabilities +List all publisher caps +``` + +### 4. GET_PRICE_FEEDS +Retrieve available price feeds and their metadata. + +**Example Prompts:** +``` +Get all available price feeds from Pyth Network +List all crypto price feeds +Show me available forex feeds +``` + +## Configuration + +Create a `.env` file in your project root with the following variables: + +### Network Configuration +```env +# Network Environment (mainnet or testnet) +PYTH_NETWORK_ENV=mainnet + +# Mainnet Configuration +PYTH_MAINNET_HERMES_URL=https://hermes.pyth.network +PYTH_MAINNET_WSS_URL=wss://hermes.pyth.network/ws +PYTH_MAINNET_PYTHNET_URL=https://pythnet.rpcpool.com +PYTH_MAINNET_CONTRACT_REGISTRY=https://pyth.network/developers/price-feed-ids +PYTH_MAINNET_PROGRAM_KEY=FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH + +# Testnet Configuration +PYTH_TESTNET_HERMES_URL=https://hermes.pyth.network +PYTH_TESTNET_WSS_URL=wss://hermes.pyth.network/ws +PYTH_TESTNET_PYTHNET_URL=https://pythnet.rpcpool.com +PYTH_TESTNET_CONTRACT_REGISTRY=https://pyth.network/developers/price-feed-ids#testnet +PYTH_TESTNET_PROGRAM_KEY=FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH +``` + +### Connection Settings +```env +PYTH_MAX_RETRIES=3 +PYTH_RETRY_DELAY=1000 +PYTH_TIMEOUT=5000 +PYTH_GRANULAR_LOG=true +PYTH_LOG_LEVEL=info +``` + +### Runtime Settings +```env +# General runtime configuration +RUNTIME_CHECK_MODE=false + +# Streaming Configuration +PYTH_ENABLE_PRICE_STREAMING=true # Enable/disable price streaming functionality +PYTH_MAX_PRICE_STREAMS=2 # Number of price updates to collect before closing stream + # Can be set to higher values (e.g., 10000) for production use +``` + +The streaming configuration controls how the price feed streaming works: +- `PYTH_ENABLE_PRICE_STREAMING`: Toggle to enable/disable the streaming functionality. Set to `true` to allow real-time price updates. +- `PYTH_MAX_PRICE_STREAMS`: Controls how many price updates to collect before automatically closing the stream. While set to 2 for testing, this can be increased to much higher values (e.g., 10000) for production use cases where continuous streaming is needed. + +### Test Price Feed IDs +```env +PYTH_TEST_ID01=0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 +PYTH_TEST_ID02=0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace +``` +## Features + +- **Automatic Price ID Detection**: Supports both hex IDs and common symbols (BTC/USD, ETH/USD, etc.) +- **Flexible Data Formats**: Supports both hex and base64 encoding +- **Granular Logging**: Detailed logging for debugging and monitoring +- **Error Handling**: Comprehensive error handling with detailed feedback +- **Streaming Control**: Configurable stream limits and timeouts + +## Dependencies + +This plugin uses the official `@pythnetwork/hermes-client` for reliable data access and streaming capabilities. + +## Error Handling + +The plugin includes comprehensive error handling for: +- Invalid price feed IDs +- Network connection issues +- Configuration errors +- Validation failures +- Stream management + +## Logging + +Enable granular logging by setting `PYTH_GRANULAR_LOG=true` for detailed operation insights. + +## Contributing + +Contributions are welcome! Please ensure you: +1. Follow the code style +2. Add tests for new features +3. Update documentation as needed +4. Maintain type safety \ No newline at end of file diff --git a/packages/plugin-pyth-data/schema.json b/packages/plugin-pyth-data/schema.json new file mode 100644 index 0000000000..a036280f02 --- /dev/null +++ b/packages/plugin-pyth-data/schema.json @@ -0,0 +1 @@ +{"openapi":"3.0.3","info":{"title":"hermes","description":"Hermes is an agent that provides Verified Prices from the Pythnet Pyth Oracle.","license":{"name":""},"version":"0.8.1"},"paths":{"/api/get_price_feed":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/{publish_time} instead**","description":"**Deprecated: use /v2/updates/price/{publish_time} instead**\n\nGet a price update for a price feed with a specific timestamp\n\nGiven a price feed id and timestamp, retrieve the Pyth price update closest to that timestamp.","operationId":"get_price_feed","parameters":[{"name":"id","in":"query","description":"The id of the price feed to get an update for.","required":true,"schema":{"$ref":"#/components/schemas/PriceIdInput"}},{"name":"publish_time","in":"query","description":"The unix timestamp in seconds. This endpoint will return the first update whose\npublish_time is >= the provided value.","required":true,"schema":{"type":"integer","format":"int64"},"example":1717632000},{"name":"verbose","in":"query","description":"If true, include the `metadata` field in the response with additional metadata about the\nprice update.","required":false,"schema":{"type":"boolean"}},{"name":"binary","in":"query","description":"If true, include the binary price update in the `vaa` field of each returned feed. This\nbinary data can be submitted to Pyth contracts to update the on-chain price.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price update retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcPriceFeed"}}}}},"deprecated":true}},"/api/get_vaa":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/{publish_time} instead**","description":"**Deprecated: use /v2/updates/price/{publish_time} instead**\n\nGet a VAA for a price feed with a specific timestamp\n\nGiven a price feed id and timestamp, retrieve the Pyth price update closest to that timestamp.","operationId":"get_vaa","parameters":[{"name":"id","in":"query","description":"The ID of the price feed to get an update for.","required":true,"schema":{"$ref":"#/components/schemas/PriceIdInput"}},{"name":"publish_time","in":"query","description":"The unix timestamp in seconds. This endpoint will return the first update whose\npublish_time is >= the provided value.","required":true,"schema":{"type":"integer","format":"int64"},"example":1690576641}],"responses":{"200":{"description":"Price update retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVaaResponse"}}}},"404":{"description":"Price update not found","content":{"text/plain":{"schema":{"type":"string"}}}}},"deprecated":true}},"/api/get_vaa_ccip":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/{publish_time} instead**","description":"**Deprecated: use /v2/updates/price/{publish_time} instead**\n\nGet a VAA for a price feed using CCIP\n\nThis endpoint accepts a single argument which is a hex-encoded byte string of the following form:\n` `","operationId":"get_vaa_ccip","parameters":[{"name":"data","in":"query","required":true,"schema":{"$ref":"#/components/schemas/GetVaaCcipInput"}}],"responses":{"200":{"description":"Price update retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVaaCcipResponse"}}}}},"deprecated":true}},"/api/latest_price_feeds":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/latest instead**","description":"**Deprecated: use /v2/updates/price/latest instead**\n\nGet the latest price updates by price feed id.\n\nGiven a collection of price feed ids, retrieve the latest Pyth price for each price feed.","operationId":"latest_price_feeds","parameters":[{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"verbose","in":"query","description":"If true, include the `metadata` field in the response with additional metadata about\nthe price update.","required":false,"schema":{"type":"boolean"}},{"name":"binary","in":"query","description":"If true, include the binary price update in the `vaa` field of each returned feed.\nThis binary data can be submitted to Pyth contracts to update the on-chain price.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RpcPriceFeed"}}}}}},"deprecated":true}},"/api/latest_vaas":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/latest instead**","description":"**Deprecated: use /v2/updates/price/latest instead**\n\nGet VAAs for a set of price feed ids.\n\nGiven a collection of price feed ids, retrieve the latest VAA for each. The returned VAA(s) can\nbe submitted to the Pyth contract to update the on-chain price. If VAAs are not found for every\nprovided price ID the call will fail.","operationId":"latest_vaas","parameters":[{"name":"ids[]","in":"query","description":"Get the VAAs for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"}],"responses":{"200":{"description":"VAAs retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}},"example":["UE5BVQEAAAADuAEAAAADDQC1H7meY5fTed0FsykIb8dt+7nKpbuzfvU2DplDi+dcUl8MC+UIkS65+rkiq+zmNBxE2gaxkBkjdIicZ/fBo+X7AAEqp+WtlWb84np8jJfLpuQ2W+l5KXTigsdAhz5DyVgU3xs+EnaIZxBwcE7EKzjMam+V9rlRy0CGsiQ1kjqqLzfAAQLsoVO0Vu5gVmgc8XGQ7xYhoz36rsBgMjG+e3l/B01esQi/KzPuBf/Ar8Sg5aSEOvEU0muSDb+KIr6d8eEC+FtcAAPZEaBSt4ysXVL84LUcJemQD3SiG30kOfUpF8o7/wI2M2Jf/LyCsbKEQUyLtLbZqnJBSfZJR5AMsrnHDqngMLEGAAY4UDG9GCpRuPvg8hOlsrXuPP3zq7yVPqyG0SG+bNo8rEhP5b1vXlHdG4bZsutX47d5VZ6xnFROKudx3T3/fnWUAQgAU1+kUFc3e0ZZeX1dLRVEryNIVyxMQIcxWwdey+jlIAYowHRM0fJX3Scs80OnT/CERwh5LMlFyU1w578NqxW+AQl2E/9fxjgUTi8crOfDpwsUsmOWw0+Q5OUGhELv/2UZoHAjsaw9OinWUggKACo4SdpPlHYldoWF+J2yGWOW+F4iAQre4c+ocb6a9uSWOnTldFkioqhd9lhmV542+VonCvuy4Tu214NP+2UNd/4Kk3KJCf3iziQJrCBeLi1cLHdLUikgAQtvRFR/nepcF9legl+DywAkUHi5/1MNjlEQvlHyh2XbMiS85yu7/9LgM6Sr+0ukfZY5mSkOcvUkpHn+T+Nw/IrQAQ7lty5luvKUmBpI3ITxSmojJ1aJ0kj/dc0ZcQk+/qo0l0l3/eRLkYjw5j+MZKA8jEubrHzUCke98eSoj8l08+PGAA+DAKNtCwNZe4p6J1Ucod8Lo5RKFfA84CPLVyEzEPQFZ25U9grUK6ilF4GhEia/ndYXLBt3PGW3qa6CBBPM7rH3ABGAyYEtUwzB4CeVedA5o6cKpjRkIebqDNSOqltsr+w7kXdfFVtsK2FMGFZNt5rbpIR+ppztoJ6eOKHmKmi9nQ99ARKkTxRErOs9wJXNHaAuIRV38o1pxRrlQRzGsRuKBqxcQEpC8OPFpyKYcp6iD5l7cO/gRDTamLFyhiUBwKKMP07FAWTEJv8AAAAAABrhAfrtrFhR4yubI7X5QRqMK6xKrj7U3XuBHdGnLqSqcQAAAAAAGp0GAUFVV1YAAAAAAAUYUmIAACcQBsfKUtr4PgZbIXRxRESU79PjE4IBAFUA5i32yLSoX+GmfbRNwS3l2zMPesZrctxliv7fD0pBW0MAAAKqqMJFwAAAAAAqE/NX////+AAAAABkxCb7AAAAAGTEJvoAAAKqIcWxYAAAAAAlR5m4CP/mPsh1IezjYpDlJ4GRb5q4fTs2LjtyO6M0XgVimrIQ4kSh1qg7JKW4gbGkyRntVFR9JO/GNd3FPDit0BK6M+JzXh/h12YNCz9wxlZTvXrNtWNbzqT+91pvl5cphhSPMfAHyEzTPaGR9tKDy9KNu56pmhaY32d2vfEWQmKo22guegeR98oDxs67MmnUraco46a3zEnac2Bm80pasUgMO24="]}}}},"deprecated":true}},"/api/price_feed_ids":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/price_feeds instead**","description":"**Deprecated: use /v2/price_feeds instead**\n\nGet the set of price feed IDs.\n\nThis endpoint fetches all of the price feed IDs for which price updates can be retrieved.","operationId":"price_feed_ids","responses":{"200":{"description":"Price feed ids retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RpcPriceIdentifier"}}}}}},"deprecated":true}},"/v2/price_feeds":{"get":{"tags":["rest"],"summary":"Get the set of price feeds.","description":"Get the set of price feeds.\n\nThis endpoint fetches all price feeds from the Pyth network. It can be filtered by asset type\nand query string.","operationId":"price_feeds_metadata","parameters":[{"name":"query","in":"query","description":"Optional query parameter. If provided, the results will be filtered to all price feeds whose symbol contains the query string. Query string is case insensitive.","required":false,"schema":{"type":"string","nullable":true},"example":"bitcoin"},{"name":"asset_type","in":"query","description":"Optional query parameter. If provided, the results will be filtered by asset type. Possible values are crypto, equity, fx, metal, rates. Filter string is case insensitive.","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/AssetType"}],"nullable":true},"example":"crypto"}],"responses":{"200":{"description":"Price feeds metadata retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceFeedMetadata"}}}}}}}},"/v2/updates/price/latest":{"get":{"tags":["rest"],"summary":"Get the latest price updates by price feed id.","description":"Get the latest price updates by price feed id.\n\nGiven a collection of price feed ids, retrieve the latest Pyth price for each price feed.","operationId":"latest_price_updates","parameters":[{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the price update in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed price update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdate"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v2/updates/price/stream":{"get":{"tags":["rest"],"summary":"SSE route handler for streaming price updates.","description":"SSE route handler for streaming price updates.","operationId":"price_stream_sse_handler","parameters":[{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the price update in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed price update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"allow_unordered","in":"query","description":"If true, allows unordered price updates to be included in the stream.","required":false,"schema":{"type":"boolean"}},{"name":"benchmarks_only","in":"query","description":"If true, only include benchmark prices that are the initial price updates at a given timestamp (i.e., prevPubTime != pubTime).","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdate"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v2/updates/price/{publish_time}":{"get":{"tags":["rest"],"summary":"Get the latest price updates by price feed id.","description":"Get the latest price updates by price feed id.\n\nGiven a collection of price feed ids, retrieve the latest Pyth price for each price feed.","operationId":"timestamp_price_updates","parameters":[{"name":"publish_time","in":"path","description":"The unix timestamp in seconds. This endpoint will return the first update whose\npublish_time is >= the provided value.","required":true,"schema":{"type":"integer","format":"int64"},"example":1717632000},{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the price update in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed price update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdate"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v2/updates/publisher_stake_caps/latest":{"get":{"tags":["rest"],"summary":"Get the most recent publisher stake caps update data.","description":"Get the most recent publisher stake caps update data.","operationId":"latest_publisher_stake_caps","parameters":[{"name":"encoding","in":"query","description":"Get the most recent publisher stake caps update data.\nOptional encoding type. If true, return the message in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Publisher stake caps update data retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestPublisherStakeCapsUpdateDataResponse"}}}}}}},"/v2/updates/twap/{window_seconds}/latest":{"get":{"tags":["rest"],"summary":"Get the latest TWAP by price feed id with a custom time window.","description":"Get the latest TWAP by price feed id with a custom time window.\n\nGiven a collection of price feed ids, retrieve the latest Pyth TWAP price for each price feed.","operationId":"latest_twaps","parameters":[{"name":"window_seconds","in":"path","description":"The time window in seconds over which to calculate the TWAP, ending at the current time.\nFor example, a value of 300 would return the most recent 5 minute TWAP.\nMust be greater than 0 and less than or equal to 600 seconds (10 minutes).","required":true,"schema":{"type":"integer","format":"int64","minimum":0},"example":"300"},{"name":"ids[]","in":"query","description":"Get the most recent TWAP (time weighted average price) for this set of price feed ids.\nThe `binary` data contains the signed start & end cumulative price updates needed to calculate\nthe TWAPs on-chain. The `parsed` data contains the calculated TWAPs.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the cumulative price updates in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the calculated TWAP in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"TWAPs retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwapsResponse"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AssetType":{"type":"string","enum":["crypto","fx","equity","metal","rates","crypto_redemption_rate"]},"BinaryUpdate":{"type":"object","required":["encoding","data"],"properties":{"data":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/EncodingType"}}},"EncodingType":{"type":"string","enum":["hex","base64"]},"GetVaaCcipInput":{"type":"string","format":"binary"},"GetVaaCcipResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"string"}}},"GetVaaResponse":{"type":"object","required":["vaa","publishTime"],"properties":{"publishTime":{"type":"integer","format":"int64","example":1690576641},"vaa":{"type":"string","description":"The VAA binary represented as a base64 string.","example":"UE5BVQEAAAADuAEAAAADDQC1H7meY5fTed0FsykIb8dt+7nKpbuzfvU2DplDi+dcUl8MC+UIkS65+rkiq+zmNBxE2gaxkBkjdIicZ/fBo+X7AAEqp+WtlWb84np8jJfLpuQ2W+l5KXTigsdAhz5DyVgU3xs+EnaIZxBwcE7EKzjMam+V9rlRy0CGsiQ1kjqqLzfAAQLsoVO0Vu5gVmgc8XGQ7xYhoz36rsBgMjG+e3l/B01esQi/KzPuBf/Ar8Sg5aSEOvEU0muSDb+KIr6d8eEC+FtcAAPZEaBSt4ysXVL84LUcJemQD3SiG30kOfUpF8o7/wI2M2Jf/LyCsbKEQUyLtLbZqnJBSfZJR5AMsrnHDqngMLEGAAY4UDG9GCpRuPvg8hOlsrXuPP3zq7yVPqyG0SG+bNo8rEhP5b1vXlHdG4bZsutX47d5VZ6xnFROKudx3T3/fnWUAQgAU1+kUFc3e0ZZeX1dLRVEryNIVyxMQIcxWwdey+jlIAYowHRM0fJX3Scs80OnT/CERwh5LMlFyU1w578NqxW+AQl2E/9fxjgUTi8crOfDpwsUsmOWw0+Q5OUGhELv/2UZoHAjsaw9OinWUggKACo4SdpPlHYldoWF+J2yGWOW+F4iAQre4c+ocb6a9uSWOnTldFkioqhd9lhmV542+VonCvuy4Tu214NP+2UNd/4Kk3KJCf3iziQJrCBeLi1cLHdLUikgAQtvRFR/nepcF9legl+DywAkUHi5/1MNjlEQvlHyh2XbMiS85yu7/9LgM6Sr+0ukfZY5mSkOcvUkpHn+T+Nw/IrQAQ7lty5luvKUmBpI3ITxSmojJ1aJ0kj/dc0ZcQk+/qo0l0l3/eRLkYjw5j+MZKA8jEubrHzUCke98eSoj8l08+PGAA+DAKNtCwNZe4p6J1Ucod8Lo5RKFfA84CPLVyEzEPQFZ25U9grUK6ilF4GhEia/ndYXLBt3PGW3qa6CBBPM7rH3ABGAyYEtUwzB4CeVedA5o6cKpjRkIebqDNSOqltsr+w7kXdfFVtsK2FMGFZNt5rbpIR+ppztoJ6eOKHmKmi9nQ99ARKkTxRErOs9wJXNHaAuIRV38o1pxRrlQRzGsRuKBqxcQEpC8OPFpyKYcp6iD5l7cO/gRDTamLFyhiUBwKKMP07FAWTEJv8AAAAAABrhAfrtrFhR4yubI7X5QRqMK6xKrj7U3XuBHdGnLqSqcQAAAAAAGp0GAUFVV1YAAAAAAAUYUmIAACcQBsfKUtr4PgZbIXRxRESU79PjE4IBAFUA5i32yLSoX+GmfbRNwS3l2zMPesZrctxliv7fD0pBW0MAAAKqqMJFwAAAAAAqE/NX////+AAAAABkxCb7AAAAAGTEJvoAAAKqIcWxYAAAAAAlR5m4CP/mPsh1IezjYpDlJ4GRb5q4fTs2LjtyO6M0XgVimrIQ4kSh1qg7JKW4gbGkyRntVFR9JO/GNd3FPDit0BK6M+JzXh/h12YNCz9wxlZTvXrNtWNbzqT+91pvl5cphhSPMfAHyEzTPaGR9tKDy9KNu56pmhaY32d2vfEWQmKo22guegeR98oDxs67MmnUraco46a3zEnac2Bm80pasUgMO24="}}},"LatestPublisherStakeCapsUpdateDataResponse":{"type":"object","required":["binary"],"properties":{"binary":{"$ref":"#/components/schemas/BinaryUpdate"},"parsed":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPublisherStakeCapsUpdate"},"nullable":true}}},"ParsedPriceFeedTwap":{"type":"object","required":["id","start_timestamp","end_timestamp","twap","down_slots_ratio"],"properties":{"down_slots_ratio":{"type":"string","description":"The % of slots where the network was down over the TWAP window.\nA value of zero indicates no slots were missed over the window, and\na value of one indicates that every slot was missed over the window.\nThis is a float value stored as a string to avoid precision loss."},"end_timestamp":{"type":"integer","format":"int64","description":"The end unix timestamp of the window"},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"},"start_timestamp":{"type":"integer","format":"int64","description":"The start unix timestamp of the window"},"twap":{"$ref":"#/components/schemas/RpcPrice"}}},"ParsedPriceUpdate":{"type":"object","required":["id","price","ema_price","metadata"],"properties":{"ema_price":{"$ref":"#/components/schemas/RpcPrice"},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"},"metadata":{"$ref":"#/components/schemas/RpcPriceFeedMetadataV2"},"price":{"$ref":"#/components/schemas/RpcPrice"}}},"ParsedPublisherStakeCap":{"type":"object","required":["publisher","cap"],"properties":{"cap":{"type":"integer","format":"int64","minimum":0},"publisher":{"type":"string"}}},"ParsedPublisherStakeCapsUpdate":{"type":"object","required":["publisher_stake_caps"],"properties":{"publisher_stake_caps":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPublisherStakeCap"}}}},"PriceFeedMetadata":{"type":"object","required":["id","attributes"],"properties":{"attributes":{"type":"object","additionalProperties":{"type":"string"}},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"}}},"PriceIdInput":{"type":"string","description":"A price id is a 32-byte hex string, optionally prefixed with \"0x\".\nPrice ids are case insensitive.\n\nExamples:\n* 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43\n* e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43\n\nSee https://pyth.network/developers/price-feed-ids for a list of all price feed ids.","example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},"PriceUpdate":{"type":"object","required":["binary"],"properties":{"binary":{"$ref":"#/components/schemas/BinaryUpdate"},"parsed":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPriceUpdate"},"nullable":true}}},"RpcPrice":{"type":"object","description":"A price with a degree of uncertainty at a certain time, represented as a price +- a confidence\ninterval.\n\nThe confidence interval roughly corresponds to the standard error of a normal distribution.\nBoth the price and confidence are stored in a fixed-point numeric representation, `x *\n10^expo`, where `expo` is the exponent. For example:","required":["price","conf","expo","publish_time"],"properties":{"conf":{"type":"string","description":"The confidence interval associated with the price, stored as a string to avoid precision loss","example":"509500001"},"expo":{"type":"integer","format":"int32","description":"The exponent associated with both the price and confidence interval. Multiply those values\nby `10^expo` to get the real value.","example":-8},"price":{"type":"string","description":"The price itself, stored as a string to avoid precision loss","example":"2920679499999"},"publish_time":{"type":"integer","format":"int64","description":"When the price was published. The `publish_time` is a unix timestamp, i.e., the number of\nseconds since the Unix epoch (00:00:00 UTC on 1 Jan 1970).","example":1717632000}}},"RpcPriceFeed":{"type":"object","required":["id","price","ema_price"],"properties":{"ema_price":{"$ref":"#/components/schemas/RpcPrice"},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"},"metadata":{"allOf":[{"$ref":"#/components/schemas/RpcPriceFeedMetadata"}],"nullable":true},"price":{"$ref":"#/components/schemas/RpcPrice"},"vaa":{"type":"string","description":"The VAA binary represented as a base64 string.","example":"UE5BVQEAAAADuAEAAAADDQC1H7meY5fTed0FsykIb8dt+7nKpbuzfvU2DplDi+dcUl8MC+UIkS65+rkiq+zmNBxE2gaxkBkjdIicZ/fBo+X7AAEqp+WtlWb84np8jJfLpuQ2W+l5KXTigsdAhz5DyVgU3xs+EnaIZxBwcE7EKzjMam+V9rlRy0CGsiQ1kjqqLzfAAQLsoVO0Vu5gVmgc8XGQ7xYhoz36rsBgMjG+e3l/B01esQi/KzPuBf/Ar8Sg5aSEOvEU0muSDb+KIr6d8eEC+FtcAAPZEaBSt4ysXVL84LUcJemQD3SiG30kOfUpF8o7/wI2M2Jf/LyCsbKEQUyLtLbZqnJBSfZJR5AMsrnHDqngMLEGAAY4UDG9GCpRuPvg8hOlsrXuPP3zq7yVPqyG0SG+bNo8rEhP5b1vXlHdG4bZsutX47d5VZ6xnFROKudx3T3/fnWUAQgAU1+kUFc3e0ZZeX1dLRVEryNIVyxMQIcxWwdey+jlIAYowHRM0fJX3Scs80OnT/CERwh5LMlFyU1w578NqxW+AQl2E/9fxjgUTi8crOfDpwsUsmOWw0+Q5OUGhELv/2UZoHAjsaw9OinWUggKACo4SdpPlHYldoWF+J2yGWOW+F4iAQre4c+ocb6a9uSWOnTldFkioqhd9lhmV542+VonCvuy4Tu214NP+2UNd/4Kk3KJCf3iziQJrCBeLi1cLHdLUikgAQtvRFR/nepcF9legl+DywAkUHi5/1MNjlEQvlHyh2XbMiS85yu7/9LgM6Sr+0ukfZY5mSkOcvUkpHn+T+Nw/IrQAQ7lty5luvKUmBpI3ITxSmojJ1aJ0kj/dc0ZcQk+/qo0l0l3/eRLkYjw5j+MZKA8jEubrHzUCke98eSoj8l08+PGAA+DAKNtCwNZe4p6J1Ucod8Lo5RKFfA84CPLVyEzEPQFZ25U9grUK6ilF4GhEia/ndYXLBt3PGW3qa6CBBPM7rH3ABGAyYEtUwzB4CeVedA5o6cKpjRkIebqDNSOqltsr+w7kXdfFVtsK2FMGFZNt5rbpIR+ppztoJ6eOKHmKmi9nQ99ARKkTxRErOs9wJXNHaAuIRV38o1pxRrlQRzGsRuKBqxcQEpC8OPFpyKYcp6iD5l7cO/gRDTamLFyhiUBwKKMP07FAWTEJv8AAAAAABrhAfrtrFhR4yubI7X5QRqMK6xKrj7U3XuBHdGnLqSqcQAAAAAAGp0GAUFVV1YAAAAAAAUYUmIAACcQBsfKUtr4PgZbIXRxRESU79PjE4IBAFUA5i32yLSoX+GmfbRNwS3l2zMPesZrctxliv7fD0pBW0MAAAKqqMJFwAAAAAAqE/NX////+AAAAABkxCb7AAAAAGTEJvoAAAKqIcWxYAAAAAAlR5m4CP/mPsh1IezjYpDlJ4GRb5q4fTs2LjtyO6M0XgVimrIQ4kSh1qg7JKW4gbGkyRntVFR9JO/GNd3FPDit0BK6M+JzXh/h12YNCz9wxlZTvXrNtWNbzqT+91pvl5cphhSPMfAHyEzTPaGR9tKDy9KNu56pmhaY32d2vfEWQmKo22guegeR98oDxs67MmnUraco46a3zEnac2Bm80pasUgMO24=","nullable":true}}},"RpcPriceFeedMetadata":{"type":"object","required":["emitter_chain"],"properties":{"emitter_chain":{"type":"integer","format":"int32","example":26,"minimum":0},"prev_publish_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"price_service_receive_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"slot":{"type":"integer","format":"int64","example":85480034,"nullable":true,"minimum":0}}},"RpcPriceFeedMetadataV2":{"type":"object","properties":{"prev_publish_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"proof_available_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"slot":{"type":"integer","format":"int64","example":85480034,"nullable":true,"minimum":0}}},"RpcPriceIdentifier":{"type":"string","example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},"TwapsResponse":{"type":"object","required":["binary"],"properties":{"binary":{"$ref":"#/components/schemas/BinaryUpdate"},"parsed":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPriceFeedTwap"},"description":"The calculated TWAPs for each price ID","nullable":true}}}}},"tags":[{"name":"hermes","description":"Pyth Real-Time Pricing API"}]} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/actions/actionGetLatestPriceUpdates.ts b/packages/plugin-pyth-data/src/actions/actionGetLatestPriceUpdates.ts new file mode 100644 index 0000000000..2b5842cb1b --- /dev/null +++ b/packages/plugin-pyth-data/src/actions/actionGetLatestPriceUpdates.ts @@ -0,0 +1,343 @@ +import { Action, elizaLogger } from "@elizaos/core"; +import { IAgentRuntime, Memory, State, HandlerCallback, Content, ActionExample } from "@elizaos/core"; +// import { HermesClient } from "../hermes/HermesClient"; +import { HermesClient } from "@pythnetwork/hermes-client"; +import { DataError, ErrorSeverity, DataErrorCode } from "../error"; +import { validatePythConfig, getNetworkConfig, getConfig } from "../environment"; +import { validatePriceUpdatesData } from "../utils/priceUpdatesValidation"; + +// Get configuration for granular logging +const config = getConfig(); +const GRANULAR_LOG = config.PYTH_GRANULAR_LOG; + +// Enhanced logging helper +const logGranular = (message: string, data?: unknown) => { + if (GRANULAR_LOG) { + elizaLogger.info(`[PriceUpdates] ${message}`, data); + console.log(`[PriceUpdates] ${message}`, data ? JSON.stringify(data, null, 2) : ''); + } +}; + +// Helper function to normalize price feed IDs +const normalizePriceFeedId = (id: string): string => { + // Ensure 0x prefix and lowercase + return id.toLowerCase().startsWith('0x') ? id.toLowerCase() : `0x${id.toLowerCase()}`; +}; + +// Helper function to format price feed ID for display +const formatPriceFeedId = (id: string): string => { + // Add '0x' prefix if not present + return id.toLowerCase().startsWith('0x') ? id.toLowerCase() : `0x${id.toLowerCase()}`; +}; + +interface GetLatestPriceUpdatesContent extends Content { + text: string; + priceIds: string[]; + options?: { + encoding?: "hex" | "base64"; + parsed?: boolean; + }; + success?: boolean; + data?: { + updates?: Array<{ + price_feed_id: string; + price: number; + conf: number; + expo: number; + publish_time: number; + ema_price?: { + price: number; + conf: number; + expo: number; + }; + }>; + error?: string; + }; +} + +export const getLatestPriceUpdatesAction: Action = { + name: "GET_LATEST_PRICE_UPDATES", + similes: ["FETCH_LATEST_PRICES", "GET_CURRENT_PRICES", "CHECK_PRICE_FEED"], + description: "Retrieve latest price updates from Pyth Network", + examples: [[ + { + user: "user", + content: { + text: "Get latest price updates for 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", + priceIds: ["0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"], + options: { + encoding: "base64", + parsed: true + } + } as GetLatestPriceUpdatesContent + } as ActionExample, + { + user: "assistant", + content: { + text: "Here is the latest BTC/USD price", + success: true, + priceIds: ["0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"], + data: { + updates: [{ + price_feed_id: "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", + price: 42000000000, + conf: 100000000, + expo: -8, + publish_time: 1641034800, + ema_price: { + price: 41950000000, + conf: 95000000, + expo: -8 + } + }] + } + } as GetLatestPriceUpdatesContent + } as ActionExample + ]], + + validate: async (_runtime: IAgentRuntime, message: Memory): Promise => { + // Check if this message is intended for this action + if (message.content?.type !== "GET_LATEST_PRICE_UPDATES") { + return true; // Skip validation for other actions + } + + logGranular("Validating GET_LATEST_PRICE_UPDATES action", { + content: message.content + }); + + try { + const content = message.content as GetLatestPriceUpdatesContent; + + // Extract priceIds from text if not provided directly + if (!content.priceIds && content.text) { + const match = content.text.match(/([a-fA-F0-9]{64})/); + if (match) { + content.priceIds = [formatPriceFeedId(match[1])]; + } + } + + // Normalize all price feed IDs + if (content.priceIds) { + content.priceIds = content.priceIds.map(normalizePriceFeedId); + } + + // Use the new validation function + try { + await validatePriceUpdatesData(content); + logGranular("Schema validation passed"); + } catch (error) { + logGranular("Schema validation failed", { error }); + if (error instanceof DataError) { + elizaLogger.error("Schema validation failed", { + errors: error.details?.errors + }); + throw error; + } + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Schema validation failed", + ErrorSeverity.HIGH, + { error } + ); + } + + // Keep existing validation as additional checks + if (!content.priceIds || !Array.isArray(content.priceIds)) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "priceIds must be an array of strings", + ErrorSeverity.HIGH + ); + } + + if (content.priceIds.length === 0) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "priceIds array cannot be empty", + ErrorSeverity.HIGH + ); + } + + // Validate each price ID is a valid hex string + content.priceIds.forEach((id, index) => { + const cleanId = id.startsWith('0x') ? id.slice(2) : id; + if (!/^[0-9a-fA-F]{64}$/.test(cleanId)) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + `Invalid price ID at index ${index}: ${id}. Must be a 64-character hex string`, + ErrorSeverity.HIGH + ); + } + }); + + // Validate options if provided + if (content.options) { + if (content.options.encoding && !["hex", "base64"].includes(content.options.encoding)) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Invalid encoding option. Must be 'hex' or 'base64'", + ErrorSeverity.HIGH + ); + } + } + + return true; + } catch (error) { + logGranular("Validation failed", { error }); + elizaLogger.error("Validation failed for GET_LATEST_PRICE_UPDATES", { + error: error instanceof Error ? error.message : String(error) + }); + return false; + } + }, + + handler: async ( + runtime: IAgentRuntime, + message: Memory, + _state?: State, + _options: { [key: string]: unknown } = {}, + callback?: HandlerCallback + ): Promise => { + logGranular("Executing GET_LATEST_PRICE_UPDATES action"); + + try { + const messageContent = message.content as GetLatestPriceUpdatesContent; + + // Log the full message content + logGranular("Message content received", messageContent); + + // Extract priceIds from text if not provided directly + if (!messageContent.priceIds && messageContent.text) { + const match = messageContent.text.match(/([a-fA-F0-9]{64})/); + if (match) { + messageContent.priceIds = [formatPriceFeedId(match[1])]; + } + } + + // Normalize all price feed IDs + if (messageContent.priceIds) { + messageContent.priceIds = messageContent.priceIds.map(normalizePriceFeedId); + } + + const { priceIds, options = {} } = messageContent; + + // Log extracted values + logGranular("Extracted values", { + priceIds, + options + }); + + // Get Pyth configuration + const config = await validatePythConfig(runtime); + if (!config) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Invalid Pyth configuration", + ErrorSeverity.HIGH + ); + } + + // Get network configuration + const networkConfig = getNetworkConfig(config.PYTH_NETWORK_ENV); + const hermesClient = new HermesClient(networkConfig.hermes); + + logGranular("Initialized HermesClient", { + endpoint: networkConfig.hermes + }); + + try { + // Log the request details + logGranular("Requesting price updates with params", { + priceIds, + options + }); + + // Get latest price updates + const updates = await hermesClient.getLatestPriceUpdates(priceIds, { + parsed: true, + encoding: options?.encoding as "hex" | "base64" | undefined + }); + + // Log the raw response + logGranular("Raw response from Hermes", { + updates + }); + + if (!updates || !updates.parsed) { + throw new Error("No updates received from Hermes"); + } + + logGranular("Successfully retrieved price updates", { + updates, + parsedCount: updates.parsed?.length + }); + + if (callback) { + const formattedText = updates.parsed?.map(update => { + const metadata = update.metadata; + const proofTime = metadata?.proof_available_time; + return `Price Feed: ${normalizePriceFeedId(update.id)} +Current Price: ${(Number(update.price.price) * Math.pow(10, update.price.expo)).toFixed(2)} USD +Confidence: ±${(Number(update.price.conf) * Math.pow(10, update.price.expo)).toFixed(2)} USD +EMA Price: ${(Number(update.ema_price.price) * Math.pow(10, update.ema_price.expo)).toFixed(2)} USD +EMA Confidence: ±${(Number(update.ema_price.conf) * Math.pow(10, update.ema_price.expo)).toFixed(2)} USD +Last Update: ${new Date(update.price.publish_time * 1000).toLocaleString()}${metadata ? ` +Slot: ${metadata.slot} +Proof Available: ${proofTime ? new Date(proofTime * 1000).toLocaleString() : 'Not available'}` : ''}`; + }).join('\n\n'); + + callback({ + text: formattedText, + success: true, + priceIds, + data: { + updates: updates.parsed?.map(update => ({ + price_feed_id: normalizePriceFeedId(update.id), + price: Number(update.price.price), + conf: Number(update.price.conf), + expo: update.price.expo, + publish_time: update.price.publish_time, + ema_price: update.ema_price ? { + price: Number(update.ema_price.price), + conf: Number(update.ema_price.conf), + expo: update.ema_price.expo + } : undefined, + metadata: update.metadata + })) + } + } as GetLatestPriceUpdatesContent); + } + + return true; + } catch (error) { + logGranular("Failed to process price updates request", { error }); + if (callback) { + callback({ + text: `Error retrieving price updates: ${error instanceof Error ? error.message : String(error)}`, + success: false, + priceIds, + data: { + error: error instanceof Error ? error.message : String(error) + } + } as GetLatestPriceUpdatesContent); + } + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Failed to process price updates request", + ErrorSeverity.HIGH, + { originalError: error } + ); + } + } catch (error) { + logGranular("Failed to get latest price updates", { error }); + throw new DataError( + DataErrorCode.NETWORK_ERROR, + "Failed to get latest price updates", + ErrorSeverity.HIGH, + { originalError: error } + ); + } + } +}; + +export default getLatestPriceUpdatesAction; diff --git a/packages/plugin-pyth-data/src/actions/actionGetLatestPublisherCaps.ts b/packages/plugin-pyth-data/src/actions/actionGetLatestPublisherCaps.ts new file mode 100644 index 0000000000..0f41150079 --- /dev/null +++ b/packages/plugin-pyth-data/src/actions/actionGetLatestPublisherCaps.ts @@ -0,0 +1,222 @@ +import { Action, elizaLogger } from "@elizaos/core"; +import { IAgentRuntime, Memory, State, HandlerCallback, Content, ActionExample } from "@elizaos/core"; +// import { HermesClient } from "../hermes/HermesClient"; +import { HermesClient } from "@pythnetwork/hermes-client"; +import { DataError, ErrorSeverity, DataErrorCode } from "../error"; +import { validatePythConfig, getNetworkConfig, getConfig } from "../environment"; +import { validatePublisherCapsData } from "../utils/publisherCapsValidation"; + +// Get configuration for granular logging +const config = getConfig(); +const GRANULAR_LOG = config.PYTH_GRANULAR_LOG; + +// Enhanced logging helper +const logGranular = (message: string, data?: unknown) => { + if (GRANULAR_LOG) { + elizaLogger.info(`[PublisherCaps] ${message}`, data); + console.log(`[PublisherCaps] ${message}`, data ? JSON.stringify(data, null, 2) : ''); + } +}; + +interface GetLatestPublisherCapsContent extends Content { + text: string; + success?: boolean; + data?: { + caps?: Array<{ + publisher: string; + cap: number; + timestamp: number; + }>; + error?: string; + }; +} + +export const getLatestPublisherCapsAction: Action = { + name: "GET_LATEST_PUBLISHER_CAPS", + similes: ["FETCH_PUBLISHER_CAPS", "GET_PUBLISHER_LIMITS", "CHECK_PUBLISHER_CAPS"], + description: "Retrieve latest publisher caps from Pyth Network", + examples: [[ + { + user: "user", + content: { + text: "Get me all the latest publisher caps" + } as GetLatestPublisherCapsContent + } as ActionExample, + { + user: "assistant", + content: { + text: "Latest publisher caps", + success: true, + data: { + caps: [{ + publisher: "0x1234567890abcdef1234567890abcdef12345678", + cap: 1000000, + timestamp: 1641034800 + }] + } + } as GetLatestPublisherCapsContent + } as ActionExample + ]], + + validate: async (_runtime: IAgentRuntime, message: Memory): Promise => { + // Check if this message is intended for this action + if (message.content?.type !== "GET_LATEST_PUBLISHER_CAPS") { + return true; // Skip validation for other actions + } + + logGranular("Validating GET_LATEST_PUBLISHER_CAPS action", { + content: message.content + }); + + try { + const content = message.content as GetLatestPublisherCapsContent; + + // Use the new validation function + try { + await validatePublisherCapsData(content); + logGranular("Publisher caps validation passed"); + } catch (error) { + logGranular("Publisher caps validation failed", { error }); + if (error instanceof DataError) { + elizaLogger.error("Publisher caps validation failed", { + errors: error.details?.errors + }); + throw error; + } + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Publisher caps validation failed", + ErrorSeverity.HIGH, + { error } + ); + } + + return true; + } catch (error) { + logGranular("Validation failed", { error }); + elizaLogger.error("Validation failed for GET_LATEST_PUBLISHER_CAPS", { + error: error instanceof Error ? error.message : String(error) + }); + return false; + } + }, + + handler: async ( + runtime: IAgentRuntime, + message: Memory, + _state?: State, + _options: { [key: string]: unknown } = {}, + callback?: HandlerCallback + ): Promise => { + logGranular("Executing GET_LATEST_PUBLISHER_CAPS action"); + + try { + // Get Pyth configuration + const config = await validatePythConfig(runtime); + if (!config) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Invalid Pyth configuration", + ErrorSeverity.HIGH + ); + } + + // Get network configuration + const networkConfig = getNetworkConfig(config.PYTH_NETWORK_ENV); + + // Initialize Hermes client + const hermesClient = new HermesClient(networkConfig.hermes); + + logGranular("Initialized HermesClient", { + endpoint: networkConfig.hermes + }); + + try { + // Get publisher caps with options + const response = await hermesClient.getLatestPublisherCaps({ + parsed: true + }); + + if (!response.parsed?.[0]?.publisher_stake_caps) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "No publisher caps data found in response", + ErrorSeverity.HIGH + ); + } + + const publisherCaps = response.parsed[0].publisher_stake_caps; + const currentTimestamp = Date.now(); + + // Enhanced logging for each publisher cap + publisherCaps.forEach((cap, index) => { + logGranular(`Publisher Cap ${index + 1}`, { + publisher: cap.publisher, + cap: cap.cap.toLocaleString(), + timestamp: new Date(currentTimestamp).toLocaleString() + }); + }); + + logGranular("Successfully retrieved publisher caps", { + totalCaps: publisherCaps.length, + allCaps: publisherCaps.map(cap => ({ + publisher: cap.publisher, + cap: cap.cap.toLocaleString(), + timestamp: new Date(currentTimestamp).toLocaleString() + })) + }); + + // Format the publisher caps into text + const formattedText = publisherCaps + .map((cap, index) => + `Publisher ${index + 1}: +ID: ${cap.publisher} +Cap: ${cap.cap.toLocaleString()} tokens +Timestamp: ${new Date(currentTimestamp).toLocaleString()}` + ) + .join('\n\n'); + + // Create callback content with formatted text + if (callback) { + await callback({ + text: `Retrieved ${publisherCaps.length} publisher caps:\n\n${formattedText}`, + success: true, + data: { + caps: publisherCaps.map(cap => ({ + publisher: cap.publisher, + cap: cap.cap, + timestamp: currentTimestamp + })) + } + } as GetLatestPublisherCapsContent); + } + + return true; + } catch (error) { + logGranular("Failed to process publisher caps request", { error }); + if (error instanceof DataError) { + throw error; + } + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Failed to process publisher caps request", + ErrorSeverity.HIGH, + { originalError: error } + ); + } + } catch (error) { + logGranular("Failed to get publisher caps", { error }); + if (error instanceof DataError) { + throw error; + } + throw new DataError( + DataErrorCode.NETWORK_ERROR, + "Failed to get publisher caps", + ErrorSeverity.HIGH, + { originalError: error } + ); + } + } +}; + +export default getLatestPublisherCapsAction; diff --git a/packages/plugin-pyth-data/src/actions/actionGetPriceFeeds.ts b/packages/plugin-pyth-data/src/actions/actionGetPriceFeeds.ts new file mode 100644 index 0000000000..a7db38410b --- /dev/null +++ b/packages/plugin-pyth-data/src/actions/actionGetPriceFeeds.ts @@ -0,0 +1,331 @@ +import { Action, elizaLogger } from "@elizaos/core"; +import { IAgentRuntime, Memory, State, HandlerCallback, Content, ActionExample } from "@elizaos/core"; +// import { HermesClient } from "../hermes/HermesClient"; +import { HermesClient } from "@pythnetwork/hermes-client"; +import { DataError, ErrorSeverity, DataErrorCode } from "../error"; +import { validatePythConfig, getNetworkConfig, getConfig } from "../environment"; +import { validatePriceFeedsData } from "../utils/priceFeedsValidation"; + +// Get configuration for granular logging +const config = getConfig(); +const GRANULAR_LOG = config.PYTH_GRANULAR_LOG; + +// Enhanced logging helper +const logGranular = (message: string, data?: unknown) => { + if (GRANULAR_LOG) { + elizaLogger.info(`[PriceFeeds] ${message}`, data); + console.log(`[PriceFeeds] ${message}`, data ? JSON.stringify(data, null, 2) : ''); + } +}; + +interface PriceFeedAttributes { + asset_type: string; + base: string; + description: string; + display_symbol: string; + quote_currency: string; + schedule: string; + symbol: string; + generic_symbol?: string; + cms_symbol?: string; + country?: string; + cqs_symbol?: string; + nasdaq_symbol?: string; + contract_id?: string; +} + +interface GetPriceFeedsContent extends Content { + text: string; + query?: string; + filter?: string; + success?: boolean; + data?: { + feeds: Array<{ + id: string; + attributes: PriceFeedAttributes; + }>; + count: number; + responseType: string; + isArray: boolean; + error?: string; + }; +} + +export const getPriceFeedsAction: Action = { + name: "GET_PRICE_FEEDS", + similes: ["FETCH_PRICE_FEEDS", "LIST_PRICE_FEEDS", "QUERY_PRICE_FEEDS"], + description: "Retrieve price feeds from Pyth Network matching specific criteria", + examples: [[ + { + user: "user", + content: { + text: "Get all available price feeds from Pyth Network", + query: "BTC", + filter: "USD" + } as GetPriceFeedsContent + } as ActionExample, + { + user: "assistant", + content: { + text: "Price feeds matching query BTC and filter USD", + success: true, + query: "BTC", + filter: "USD", + data: { + feeds: [{ + id: "f9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b", + attributes: { + asset_type: "Crypto", + base: "BTC", + description: "BITCOIN / US DOLLAR", + display_symbol: "BTC/USD", + generic_symbol: "BTCUSD", + quote_currency: "USD", + schedule: "America/New_York;O,O,O,O,O,O,O;", + symbol: "Crypto.BTC/USD" + } + }] + } + } as GetPriceFeedsContent + } as ActionExample + ]], + + async validate(runtime: IAgentRuntime, message: Memory): Promise { + // Check if this message is intended for this action + if (message.content?.type !== "GET_PRICE_FEEDS") { + return true; // Skip validation for other actions + } + + logGranular("Starting validation", { + messageId: message.id, + content: message.content + }); + + try { + const content = message.content as GetPriceFeedsContent; + logGranular("Validating content structure", { content }); + + // Validate against schema + try { + await validatePriceFeedsData(content); + logGranular("Schema validation passed"); + } catch (error) { + logGranular("Schema validation error", { error }); + if (error instanceof DataError) { + elizaLogger.error("Schema validation failed", { + errors: error.details?.errors + }); + throw error; + } + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Schema validation failed", + ErrorSeverity.HIGH, + { error } + ); + } + + // Validate Pyth configuration + const config = await validatePythConfig(runtime); + logGranular("Pyth config validation", { config }); + + if (!config) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Invalid Pyth configuration", + ErrorSeverity.HIGH + ); + } + + // Content validation is optional for this action + if (content.query && typeof content.query !== 'string') { + logGranular("Invalid query type", { query: content.query }); + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Query must be a string", + ErrorSeverity.HIGH + ); + } + + if (content.filter && typeof content.filter !== 'string') { + logGranular("Invalid filter type", { filter: content.filter }); + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Filter must be a string", + ErrorSeverity.HIGH + ); + } + + logGranular("Validation successful", { + query: content.query, + filter: content.filter + }); + + return true; + } catch (error) { + logGranular("Validation failed", { + error: error instanceof Error ? { + message: error.message, + stack: error.stack, + name: error.name + } : String(error) + }); + + if (error instanceof DataError) { + throw error; + } + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Invalid content format", + ErrorSeverity.HIGH, + { content: message.content } + ); + } + }, + + async handler( + runtime: IAgentRuntime, + message: Memory, + state: State | undefined, + _options: { [key: string]: unknown } = {}, + callback?: HandlerCallback + ): Promise { + logGranular("Starting handler execution", { + messageId: message.id, + hasCallback: !!callback + }); + + try { + const messageContent = message.content as GetPriceFeedsContent; + const { query, filter } = messageContent; + + logGranular("Processing request", { query, filter }); + + // Get Pyth configuration + const config = await validatePythConfig(runtime); + logGranular("Got Pyth config", { networkEnv: config.PYTH_NETWORK_ENV }); + + // Initialize HermesClient with configuration + const networkConfig = getNetworkConfig(config.PYTH_NETWORK_ENV); + logGranular("Network config", { networkConfig }); + + const client = new HermesClient(networkConfig.hermes); + logGranular("Initialized HermesClient", { + endpoint: networkConfig.hermes + }); + + // Get price feeds with proper options + const options = { + query: query, + filter: filter + }; + + logGranular("Fetching price feeds with options", { + options, + hermesEndpoint: networkConfig.hermes, + clientType: typeof client.getPriceFeeds + }); + + const priceFeeds = await client.getPriceFeeds(options); + + logGranular("Retrieved price feeds", { + responseType: typeof priceFeeds, + isArray: Array.isArray(priceFeeds), + count: priceFeeds?.length || 0, + sample: priceFeeds?.slice(0, 3) || [] // Log first 3 feeds for debugging + }); + + // Process and transform feeds + const transformedFeeds = priceFeeds.map((feed) => ({ + id: feed.id, + attributes: { + asset_type: feed.attributes?.asset_type || "Unknown", + base: feed.attributes?.base || "Unknown", + description: feed.attributes?.description || "Unknown", + display_symbol: feed.attributes?.display_symbol || "Unknown", + quote_currency: feed.attributes?.quote_currency || "Unknown", + schedule: feed.attributes?.schedule || "", + symbol: feed.attributes?.symbol || "Unknown", + generic_symbol: feed.attributes?.generic_symbol, + cms_symbol: feed.attributes?.cms_symbol, + country: feed.attributes?.country, + cqs_symbol: feed.attributes?.cqs_symbol, + nasdaq_symbol: feed.attributes?.nasdaq_symbol, + contract_id: feed.attributes?.contract_id + } + })); + + // Prepare callback content + const callbackContent: GetPriceFeedsContent = { + text: `Retrieved ${priceFeeds.length} price feeds: +${transformedFeeds.map(feed => + `- ${feed.attributes.description} (${feed.attributes.display_symbol}) + Type: ${feed.attributes.asset_type} + Base: ${feed.attributes.base} + Quote: ${feed.attributes.quote_currency} + Schedule: ${feed.attributes.schedule} + ID: ${feed.id}` +).join('\n')} +${query ? `\nMatching query: "${query}"` : ''}${filter ? `\nWith filter: "${filter}"` : ''}`, + query, + filter, + success: true, + data: { + feeds: transformedFeeds, + count: priceFeeds.length, + responseType: "object", + isArray: true + } + }; + + logGranular("Prepared callback content", { + feedCount: transformedFeeds.length, + firstFeed: transformedFeeds[0] + }); + + // Execute callback if provided + if (callback) { + logGranular("Executing callback"); + await callback(callbackContent); + logGranular("Callback completed"); + } + + return true; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; + const errorStack = error instanceof Error ? error.stack : undefined; + + logGranular("Error retrieving price feeds", { + error: errorMessage, + stack: errorStack + }); + + // Prepare error callback content + const errorContent: GetPriceFeedsContent = { + text: `Failed to retrieve price feeds: ${errorMessage}\nError details: ${errorStack || 'No stack trace available'}`, + success: false, + data: { + feeds: [], + error: errorMessage, + count: 0, + responseType: "object", + isArray: true + } + }; + + // Execute callback if provided + if (callback) { + await callback(errorContent); + } + + // Throw appropriate error + throw new DataError( + DataErrorCode.PRICE_FEEDS_FETCH_FAILED, + errorMessage, + ErrorSeverity.HIGH + ); + } + } +}; + +export default getPriceFeedsAction; diff --git a/packages/plugin-pyth-data/src/actions/actionGetPriceUpdatesStream.ts b/packages/plugin-pyth-data/src/actions/actionGetPriceUpdatesStream.ts new file mode 100644 index 0000000000..686ace82f2 --- /dev/null +++ b/packages/plugin-pyth-data/src/actions/actionGetPriceUpdatesStream.ts @@ -0,0 +1,547 @@ +import { Action, elizaLogger } from "@elizaos/core"; +import { IAgentRuntime, Memory, State, HandlerCallback, Content, ActionExample } from "@elizaos/core"; +import { HermesClient } from "@pythnetwork/hermes-client"; +import { DataError, ErrorSeverity, DataErrorCode } from "../error"; +import { validatePythConfig, getNetworkConfig, getConfig } from "../environment"; +import { validatePriceUpdateStreamData } from "../utils/priceUpdateStreamValidation"; + +// Get configuration for granular logging +const config = getConfig(); +const GRANULAR_LOG = config.PYTH_GRANULAR_LOG; +const PYTH_MAX_PRICE_STREAMS = Number(config.PYTH_MAX_PRICE_STREAMS); + +// Track active streams +const activeStreams = new Map(); + +// Enhanced logging helper +const logGranular = (message: string, data?: unknown) => { + if (GRANULAR_LOG) { + elizaLogger.info(`[PriceUpdatesStream] ${message}`, data); + console.log(`[PriceUpdatesStream] ${message}`, data ? JSON.stringify(data, null, 2) : ''); + } +}; + +// Add type for price update item +interface PriceUpdateItem { + id: string; + price: { + price: string; + conf: string; + expo: number; + publish_time: number; + }; + ema_price: { + price: string; + conf: string; + expo: number; + publish_time: number; + }; + metadata?: { + slot: number; + proof_available_time: number; + prev_publish_time: number; + }; +} +interface GetPriceUpdatesStreamContent extends Content { + text: string; + priceIds: string[]; + options?: { + encoding?: "hex" | "base64"; + parsed?: boolean; + allowUnordered?: boolean; + benchmarksOnly?: boolean; + }; + success?: boolean; + data?: { + streamId: string; + status: 'connected' | 'disconnected' | 'error'; + binary?: { + encoding: string; + data: string[]; + }; + parsed?: Array<{ + id: string; + price: { + price: string; + conf: string; + expo: number; + publish_time: number; + }; + ema_price: { + price: string; + conf: string; + expo: number; + publish_time: number; + }; + metadata?: { + slot: number; + proof_available_time: number; + prev_publish_time: number; + }; + }>; + error?: string; + }; +} + +// Helper function to extract price IDs from text +function extractPriceIds(text: string): string[] { + let priceIds: string[] = []; + + // Try to match common price symbols first + const symbolMatch = text.match(/(?:BTC|ETH|SOL)\/USD/g); + if (symbolMatch) { + const symbolToId: { [key: string]: string } = { + 'BTC/USD': '0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43', + 'ETH/USD': '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace', + 'SOL/USD': '0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d' + }; + priceIds = symbolMatch.map(symbol => symbolToId[symbol]).filter(id => id); + } + + if (priceIds.length === 0) { + const hexMatchesWithPrefix = text.match(/0x[0-9a-fA-F]{64}/g); + if (hexMatchesWithPrefix) { + priceIds = hexMatchesWithPrefix; + } else { + const hexMatches = text.match(/[0-9a-fA-F]{64}/g); + if (hexMatches) { + priceIds = hexMatches.map(id => `0x${id}`); + } + } + } + + return priceIds; +} + +// Define proper types for the processed data +interface ProcessedPriceData { + binary?: { + encoding: string; + data: string[]; + }; + parsed?: Array<{ + id: string; + price: { + price: string; + conf: string; + expo: number; + publish_time: number; + }; + ema_price: { + price: string; + conf: string; + expo: number; + publish_time: number; + }; + metadata?: { + slot: number; + proof_available_time: number; + prev_publish_time: number; + }; + }>; +} + +interface RawPriceData { + binary: { + encoding: string; + data: string[]; + }; + parsed: Array; +} + +// Helper function to process price update data +function processPriceUpdateData(data: RawPriceData): ProcessedPriceData { + return { + binary: data.binary, + parsed: data.parsed.map((item: PriceUpdateItem) => ({ + id: item.id, + price: { + price: item.price.price, + conf: item.price.conf, + expo: item.price.expo, + publish_time: item.price.publish_time + }, + ema_price: { + price: item.ema_price.price, + conf: item.ema_price.conf, + expo: item.ema_price.expo, + publish_time: item.ema_price.publish_time + }, + metadata: item.metadata ? { + slot: item.metadata.slot, + proof_available_time: item.metadata.proof_available_time, + prev_publish_time: item.metadata.prev_publish_time + } : undefined + })) + }; +} + +// Helper function to format price update text +function formatPriceUpdateText(streamId: string, messageCount: number, data: RawPriceData): string { + return `Price Update Stream (ID: stream_${streamId}, Update ${messageCount}/${PYTH_MAX_PRICE_STREAMS}): +${data.parsed.map((item: PriceUpdateItem) => + `Price Feed: ${item.id} +Current Price: ${(Number(item.price.price) * Math.pow(10, item.price.expo)).toFixed(2)} USD +Confidence: ±${(Number(item.price.conf) * Math.pow(10, item.price.expo)).toFixed(2)} USD +EMA Price: ${(Number(item.ema_price.price) * Math.pow(10, item.ema_price.expo)).toFixed(2)} USD +EMA Confidence: ±${(Number(item.ema_price.conf) * Math.pow(10, item.ema_price.expo)).toFixed(2)} USD +Last Update: ${new Date(item.price.publish_time * 1000).toLocaleString()}${item.metadata ? ` +Slot: ${item.metadata.slot} +Proof Available: ${new Date(item.metadata.proof_available_time * 1000).toLocaleString()}` : ''}` +).join('\n\n')}`; +} + +// Function to collect stream data +async function collectStreamData(eventSource: EventSource, streamId: string): Promise { + return new Promise((resolve, reject) => { + let messageCount = 0; + const collectedData: RawPriceData = { + binary: { encoding: 'hex', data: [] }, + parsed: [] + }; + + eventSource.onmessage = (event) => { + messageCount++; + logGranular("Received price update", { streamId, messageCount, data: event.data }); + + try { + const rawData = JSON.parse(event.data) as RawPriceData; + collectedData.binary.data.push(...rawData.binary.data); + collectedData.parsed.push(...rawData.parsed); + + if (messageCount >= PYTH_MAX_PRICE_STREAMS) { + eventSource.close(); + resolve(collectedData); + } + } catch (error) { + eventSource.close(); + reject(error); + } + }; + + eventSource.onerror = (error) => { + eventSource.close(); + reject(error); + }; + }); +} + +// Helper function to create and manage price stream +async function createPriceStream( + runtime: IAgentRuntime, + priceIds: string[], + callback?: HandlerCallback +): Promise { + const config = await validatePythConfig(runtime); + if (!config) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Invalid Pyth configuration", + ErrorSeverity.HIGH + ); + } + + const networkConfig = getNetworkConfig(config.PYTH_NETWORK_ENV); + const client = new HermesClient(networkConfig.hermes); + const streamId = `stream_${Date.now()}`; + + logGranular("Creating price stream for IDs:", { streamId, priceIds }); + + try { + const eventSource = (await client.getPriceUpdatesStream(priceIds, { + parsed: true, + encoding: 'hex' + })) as unknown as EventSource; + + // Store the stream + activeStreams.set(streamId, eventSource as any); + + try { + // Collect all stream data + const collectedData = await collectStreamData(eventSource as any, streamId); + + // Process collected data + const processedData = processPriceUpdateData(collectedData); + const updateText = formatPriceUpdateText(streamId, PYTH_MAX_PRICE_STREAMS, collectedData); + + // Send single callback with all data + if (callback) { + callback({ + text: updateText, + success: true, + priceIds, + data: { + streamId, + status: 'connected', + ...processedData + } + } as GetPriceUpdatesStreamContent); + } + + activeStreams.delete(streamId); + logGranular("Stream completed successfully", { streamId }); + + } catch (error) { + logGranular("Error collecting stream data", { streamId, error }); + if (callback) { + callback({ + text: `Error processing price updates: ${error instanceof Error ? error.message : String(error)}`, + success: false, + priceIds, + data: { + streamId, + status: 'error', + error: error instanceof Error ? error.message : String(error) + } + } as GetPriceUpdatesStreamContent); + } + activeStreams.delete(streamId); + throw error; + } + } catch (error) { + logGranular("Error creating price stream", { streamId, error }); + throw new DataError( + DataErrorCode.TRANSFORM_ERROR, + error instanceof Error ? error.message : String(error), + ErrorSeverity.HIGH + ); + } +} + + + +export const getPriceUpdatesStreamAction: Action = { + name: "GET_PRICE_UPDATES_STREAM", + similes: ["STREAM_PRICE_UPDATES", "SUBSCRIBE_TO_PRICES", "WATCH_PRICE_FEED"], + description: "Create a streaming connection for real-time price updates from Pyth Network", + examples: [[ + { + user: "user", + content: { + text: "Stream BTC/USD price updates", + priceIds: ["0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"], + options: { + encoding: "hex", + parsed: true, + benchmarksOnly: true + } + } as GetPriceUpdatesStreamContent + } as ActionExample, + { + user: "assistant", + content: { + text: "Starting BTC/USD price stream...", + success: true, + priceIds: ["0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"], + data: { + streamId: "stream_1", + status: "connected", + updates: [{ + id: "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", + price: 42000, + confidence: 100, + timestamp: 1641034800, + emaPrice: 41950 + }] + } + } as GetPriceUpdatesStreamContent + } as ActionExample + ], [ + { + user: "user", + content: { + text: "Stream ETH and BTC prices with benchmarks only", + priceIds: [ + "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", + "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" + ], + options: { + benchmarksOnly: true, + parsed: true + } + } as GetPriceUpdatesStreamContent + } as ActionExample, + { + user: "assistant", + content: { + text: "Starting price stream for BTC and ETH...", + success: true, + priceIds: [ + "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", + "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" + ], + data: { + streamId: "stream_2", + status: "connected", + updates: [ + { + id: "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", + price: 42000, + confidence: 100, + timestamp: 1641034800, + emaPrice: 41950 + }, + { + id: "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", + price: 2500, + confidence: 50, + timestamp: 1641034800, + emaPrice: 2495 + } + ] + } + } as GetPriceUpdatesStreamContent + } as ActionExample + ]], + + validate: async (_runtime: IAgentRuntime, message: Memory): Promise => { + // Check if this message is intended for this action + if (message.content?.type !== "GET_PRICE_UPDATES_STREAM") { + return true; // Skip validation for other actions + } + + logGranular("Starting validation", { + content: message.content + }); + + try { + let content = message.content as GetPriceUpdatesStreamContent; + + // Handle text-only input by extracting priceIds + if (!content.priceIds) { + const priceIds = extractPriceIds(content.text); + if (priceIds.length > 0) { + content = { + ...content, + priceIds, + options: { + parsed: true, + encoding: "hex" + } + }; + message.content = content; + } + } + + // Validate against schema + try { + await validatePriceUpdateStreamData(content); + logGranular("Schema validation passed"); + } catch (error) { + logGranular("Schema validation failed", { error }); + if (error instanceof DataError) { + elizaLogger.error("Schema validation failed", { + errors: error.details?.errors + }); + throw error; + } + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Schema validation failed", + ErrorSeverity.HIGH, + { error } + ); + } + + // Validate Pyth configuration + const config = await validatePythConfig(_runtime); + if (!config) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Invalid Pyth configuration", + ErrorSeverity.HIGH + ); + } + + if (!content.priceIds || !Array.isArray(content.priceIds)) { + throw DataError.validationFailed(content, ["priceIds must be an array of strings"]); + } + + if (content.priceIds.length === 0) { + throw DataError.validationFailed(content, ["priceIds array cannot be empty"]); + } + + // Validate each price ID is a valid hex string + content.priceIds.forEach((id, index) => { + if (!/^0x[0-9a-fA-F]{64}$/.test(id)) { + throw DataError.validationFailed(content, [`Invalid price ID at index ${index}: ${id}`]); + } + }); + + // Validate options if provided + if (content.options) { + const { encoding, parsed, allowUnordered, benchmarksOnly } = content.options; + + if (encoding && !["hex", "base64"].includes(encoding)) { + throw DataError.validationFailed(content, ["encoding must be either 'hex' or 'base64'"]); + } + + if (parsed !== undefined && typeof parsed !== "boolean") { + throw DataError.validationFailed(content, ["parsed must be a boolean"]); + } + + if (allowUnordered !== undefined && typeof allowUnordered !== "boolean") { + throw DataError.validationFailed(content, ["allowUnordered must be a boolean"]); + } + + if (benchmarksOnly !== undefined && typeof benchmarksOnly !== "boolean") { + throw DataError.validationFailed(content, ["benchmarksOnly must be a boolean"]); + } + } + + logGranular("GET_PRICE_UPDATES_STREAM validation successful", { + priceIds: content.priceIds, + options: content.options + }); + + return true; + } catch (error) { + logGranular("Validation failed", { error }); + throw error; + } + }, + + async handler( + runtime: IAgentRuntime, + message: Memory, + state: State | undefined, + _options: { [key: string]: unknown } = {}, + callback?: HandlerCallback + ): Promise { + logGranular("Starting handler execution", { + messageId: message.id, + messageContent: message.content + }); + + try { + const messageContent = message.content as GetPriceUpdatesStreamContent; + let priceIds = messageContent.priceIds; + + // If no priceIds in content, try to extract them + if (!priceIds) { + priceIds = extractPriceIds(messageContent.text); + if (priceIds.length === 0) { + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + "Could not extract any valid price IDs from message", + ErrorSeverity.HIGH + ); + } + } + + await createPriceStream(runtime, priceIds, callback); + return true; + + } catch (error) { + logGranular("Error in price updates stream handler", error); + throw new DataError( + DataErrorCode.TRANSFORM_ERROR, + error instanceof Error ? error.message : String(error), + ErrorSeverity.HIGH + ); + } + } +}; + +export default getPriceUpdatesStreamAction; + diff --git a/packages/plugin-pyth-data/src/environment.ts b/packages/plugin-pyth-data/src/environment.ts new file mode 100644 index 0000000000..a397c75ff0 --- /dev/null +++ b/packages/plugin-pyth-data/src/environment.ts @@ -0,0 +1,97 @@ +import { IAgentRuntime} from "@elizaos/core"; +import { z } from "zod"; + +// Environment Variables +let ENV: string = "mainnet"; + +// Pyth Network Configuration +const PYTH_NETWORKS = { + mainnet: { + hermes: process.env.PYTH_MAINNET_HERMES_URL || "https://hermes.pyth.network", + wss: process.env.PYTH_MAINNET_WSS_URL || "wss://hermes.pyth.network/ws", + pythnet: process.env.PYTH_MAINNET_PYTHNET_URL || "https://pythnet.rpcpool.com", + contractRegistry: process.env.PYTH_MAINNET_CONTRACT_REGISTRY || "https://pyth.network/developers/price-feed-ids", + programKey: process.env.PYTH_MAINNET_PROGRAM_KEY || "FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH" + }, + testnet: { + hermes: process.env.PYTH_TESTNET_HERMES_URL || "https://hermes.pyth.network", + wss: process.env.PYTH_TESTNET_WSS_URL || "wss://hermes.pyth.network/ws", + pythnet: process.env.PYTH_TESTNET_PYTHNET_URL || "https://pythnet.rpcpool.com", + contractRegistry: process.env.PYTH_TESTNET_CONTRACT_REGISTRY || "https://pyth.network/developers/price-feed-ids#testnet", + programKey: process.env.PYTH_TESTNET_PROGRAM_KEY || "FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH" + } +} as const; + +// // Log environment information +// elizaLogger.info("Environment sources", { +// shellVars: Object.keys(process.env).filter(key => key.startsWith('PYTH_')), +// }); + +export const pythEnvSchema = z.object({ + PYTH_NETWORK_ENV: z.enum(["mainnet", "testnet"]).default("mainnet"), + PYTH_MAX_RETRIES: z.string().transform(Number).default("3"), + PYTH_RETRY_DELAY: z.string().transform(Number).default("1000"), + PYTH_TIMEOUT: z.string().transform(Number).default("5000"), + PYTH_GRANULAR_LOG: z.boolean().default(true), + PYTH_LOG_LEVEL: z.enum(["error", "warn", "info", "debug"]).default("info"), + RUNTIME_CHECK_MODE: z.boolean().default(false), + PYTH_ENABLE_PRICE_STREAMING: z.boolean().default(true), + PYTH_MAX_PRICE_STREAMS: z.string().transform(Number).default("10"), + PYTH_TEST_ID01: z.string().default("0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"), + PYTH_TEST_ID02: z.string().default("0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace"), + +}); + +export type PythConfig = z.infer; + +export function getConfig( + env: string | undefined | null = ENV || + process.env.PYTH_NETWORK_ENV +): PythConfig { + ENV = env || "mainnet"; + + return { + PYTH_NETWORK_ENV: (env as "mainnet" | "testnet") || "mainnet", + PYTH_MAX_RETRIES: Number(process.env.PYTH_MAX_RETRIES || "3"), + PYTH_RETRY_DELAY: Number(process.env.PYTH_RETRY_DELAY || "1000"), + PYTH_TIMEOUT: Number(process.env.PYTH_TIMEOUT || "5000"), + PYTH_GRANULAR_LOG: process.env.PYTH_GRANULAR_LOG === "true" || false, + PYTH_LOG_LEVEL: (process.env.PYTH_LOG_LEVEL as "error" | "warn" | "info" | "debug") || "info", + RUNTIME_CHECK_MODE: process.env.RUNTIME_CHECK_MODE === "true" || false, + PYTH_ENABLE_PRICE_STREAMING: process.env.PYTH_ENABLE_PRICE_STREAMING === "true" || true, + PYTH_MAX_PRICE_STREAMS: Number(process.env.PYTH_MAX_PRICE_STREAMS || "10"), + PYTH_TEST_ID01: process.env.PYTH_TEST_ID01 || "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", + PYTH_TEST_ID02: process.env.PYTH_TEST_ID02 || "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", + }; +} + +export async function validatePythConfig( + runtime: IAgentRuntime +): Promise { + try { + const envConfig = getConfig( + runtime.getSetting("PYTH_NETWORK_ENV") ?? undefined + ); + + const config = { + PYTH_NETWORK_ENV: process.env.PYTH_NETWORK_ENV || runtime.getSetting("PYTH_NETWORK_ENV") || envConfig.PYTH_NETWORK_ENV, + PYTH_MAX_RETRIES: process.env.PYTH_MAX_RETRIES || runtime.getSetting("PYTH_MAX_RETRIES") || envConfig.PYTH_MAX_RETRIES.toString(), + PYTH_RETRY_DELAY: process.env.PYTH_RETRY_DELAY || runtime.getSetting("PYTH_RETRY_DELAY") || envConfig.PYTH_RETRY_DELAY.toString(), + PYTH_GRANULAR_LOG: process.env.PYTH_GRANULAR_LOG === "true" || false, + PYTH_LOG_LEVEL: process.env.PYTH_LOG_LEVEL || runtime.getSetting("PYTH_LOG_LEVEL") || envConfig.PYTH_LOG_LEVEL, + RUNTIME_CHECK_MODE: process.env.RUNTIME_CHECK_MODE === "true" || false, + PYTH_ENABLE_PRICE_STREAMING: process.env.PYTH_ENABLE_PRICE_STREAMING === "true" || true, + PYTH_MAX_PRICE_STREAMS: process.env.PYTH_MAX_PRICE_STREAMS || runtime.getSetting("PYTH_MAX_PRICE_STREAMS") || envConfig.PYTH_MAX_PRICE_STREAMS.toString(), + PYTH_TEST_ID01: process.env.PYTH_TEST_ID01 || envConfig.PYTH_TEST_ID01, + PYTH_TEST_ID02: process.env.PYTH_TEST_ID02 || envConfig.PYTH_TEST_ID02, + }; + + return pythEnvSchema.parse(config); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + throw new Error(`Failed to validate Pyth configuration: ${errorMessage}`); + } +} + +// Export network configurations +export const getNetworkConfig = (env: string = ENV) => PYTH_NETWORKS[env as keyof typeof PYTH_NETWORKS]; diff --git a/packages/plugin-pyth-data/src/error/base.ts b/packages/plugin-pyth-data/src/error/base.ts new file mode 100644 index 0000000000..a564a78157 --- /dev/null +++ b/packages/plugin-pyth-data/src/error/base.ts @@ -0,0 +1,124 @@ +// Base error codes +export enum PythErrorCode { + // WebSocket connection errors + WS_CONNECTION_TIMEOUT = 'WS_CONNECTION_TIMEOUT', + WS_CONNECTION_REFUSED = 'WS_CONNECTION_REFUSED', + WS_INVALID_URL = 'WS_INVALID_URL', + WS_HEARTBEAT_FAILED = 'WS_HEARTBEAT_FAILED', + WS_SSL_ERROR = 'WS_SSL_ERROR', + WS_INVALID_STATE_TRANSITION = 'WS_INVALID_STATE_TRANSITION', + WS_MESSAGE_PARSE_ERROR = 'WS_MESSAGE_PARSE_ERROR', + WS_RATE_LIMIT_EXCEEDED = 'WS_RATE_LIMIT_EXCEEDED', + WS_INVALID_MESSAGE_FORMAT = 'WS_INVALID_MESSAGE_FORMAT', + + // Runtime errors + RUNTIME_INITIALIZATION = 'RUNTIME_INITIALIZATION', + RUNTIME_CONFIGURATION = 'RUNTIME_CONFIGURATION', + RUNTIME_VALIDATION = 'RUNTIME_VALIDATION', + + // State management errors + STATE_INVALID_TRANSITION = 'STATE_INVALID_TRANSITION', + STATE_PERSISTENCE = 'STATE_PERSISTENCE', + STATE_UNEXPECTED_DISCONNECT = 'STATE_UNEXPECTED_DISCONNECT', + STATE_RECONNECTION_FAILED = 'STATE_RECONNECTION_FAILED', + STATE_MAX_RECONNECT_EXCEEDED = 'STATE_MAX_RECONNECT_EXCEEDED', + + // Data handling errors + DATA_INVALID_SUBSCRIPTION = 'DATA_INVALID_SUBSCRIPTION', + DATA_SUBSCRIPTION_LIMIT = 'DATA_SUBSCRIPTION_LIMIT', + DATA_VALIDATION_FAILED = 'DATA_VALIDATION_FAILED', + DATA_SEQUENCE_ERROR = 'DATA_SEQUENCE_ERROR', + DATA_TRANSFORM_ERROR = 'DATA_TRANSFORM_ERROR', + DATA_SCHEMA_ERROR = 'DATA_SCHEMA_ERROR', + DATA_STALE_PRICE = 'DATA_STALE_PRICE', + DATA_CHAIN_ERROR = 'DATA_CHAIN_ERROR', + DATA_PARSE_ERROR = 'DATA_PARSE_ERROR', + DATA_PRICE_UNAVAILABLE = 'DATA_PRICE_UNAVAILABLE', + DATA_CONFIDENCE_TOO_LOW = 'DATA_CONFIDENCE_TOO_LOW', + DATA_CONTRACT_ERROR = 'DATA_CONTRACT_ERROR', + + // Generic errors + UNKNOWN = 'UNKNOWN', + INTERNAL = 'INTERNAL', + NETWORK = 'NETWORK', + NETWORK_ERROR = 'NETWORK_ERROR', + TIMEOUT = 'TIMEOUT', + INVALID_PARAMETER = 'INVALID_PARAMETER', + SUBSCRIPTION_LIMIT_EXCEEDED = 'SUBSCRIPTION_LIMIT_EXCEEDED', + WEBSOCKET_ERROR = 'WEBSOCKET_ERROR', + MESSAGE_PROCESSING_ERROR = 'MESSAGE_PROCESSING_ERROR', + CONNECTION_FAILED = 'CONNECTION_FAILED', + HANDLER_FAILED = 'HANDLER_FAILED', + + // Generic Errors + UNKNOWN_ERROR = 'UNKNOWN_ERROR' +} + +export enum ErrorSeverity { + LOW = 'LOW', // Non-critical errors that don't affect core functionality + MEDIUM = 'MEDIUM', // Errors that affect some functionality but system can continue + HIGH = 'HIGH', // Critical errors that require immediate attention + FATAL = 'FATAL' // System cannot continue operation +} + +// Error detail types +export interface ErrorDetails { + [key: string]: unknown; +} + +// Extended error interface +export interface IPythError { + code: PythErrorCode; + message: string; + severity: ErrorSeverity; + timestamp: number; + details?: ErrorDetails; + originalError?: Error; + name: string; +} + +// Base Pyth error class +export class PythError extends Error implements IPythError { + public readonly timestamp: number; + public readonly name: string = 'PythError'; + + constructor( + public readonly code: PythErrorCode, + public readonly message: string, + public readonly severity: ErrorSeverity = ErrorSeverity.MEDIUM, + public readonly details?: ErrorDetails, + public readonly originalError?: Error + ) { + super(message); + this.timestamp = Date.now(); + Object.setPrototypeOf(this, new.target.prototype); + } + + toJSON(): object { + return { + name: this.name, + code: this.code, + message: this.message, + severity: this.severity, + timestamp: this.timestamp, + details: this.details, + stack: this.stack, + originalError: this.originalError ? { + name: this.originalError.name, + message: this.originalError.message, + stack: this.originalError.stack + } : undefined + }; + } +} + +// Error utility functions +export const createError = ( + code: PythErrorCode, + message: string, + severity?: ErrorSeverity, + details?: ErrorDetails, + originalError?: Error +): PythError => { + return new PythError(code, message, severity, details, originalError); +}; \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/error/data.ts b/packages/plugin-pyth-data/src/error/data.ts new file mode 100644 index 0000000000..0423168e87 --- /dev/null +++ b/packages/plugin-pyth-data/src/error/data.ts @@ -0,0 +1,159 @@ +import { PythError, ErrorSeverity, PythErrorCode, ErrorDetails } from './base'; + +// Data Error Codes +export enum DataErrorCode { + // Validation Errors + VALIDATION_FAILED = 'DATA_VALIDATION_FAILED', + INVALID_SUBSCRIPTION = 'DATA_INVALID_SUBSCRIPTION', + SUBSCRIPTION_LIMIT = 'DATA_SUBSCRIPTION_LIMIT', + SCHEMA_ERROR = 'DATA_SCHEMA_ERROR', + + // Processing Errors + SEQUENCE_ERROR = 'DATA_SEQUENCE_ERROR', + TRANSFORM_ERROR = 'DATA_TRANSFORM_ERROR', + PARSE_ERROR = 'DATA_PARSE_ERROR', + + // Price Feed Errors + PRICE_UNAVAILABLE = 'DATA_PRICE_UNAVAILABLE', + CONFIDENCE_TOO_LOW = 'DATA_CONFIDENCE_TOO_LOW', + STALE_PRICE = 'DATA_STALE_PRICE', + + // Chain-Specific Errors + CHAIN_DATA_ERROR = 'DATA_CHAIN_ERROR', + CONTRACT_ERROR = 'DATA_CONTRACT_ERROR', + + // Network and Connection Errors + NETWORK_ERROR = 'NETWORK_ERROR', + WEBSOCKET_ERROR = 'WEBSOCKET_ERROR', + MESSAGE_PROCESSING_ERROR = 'MESSAGE_PROCESSING_ERROR', + CONNECTION_FAILED = 'CONNECTION_FAILED', + HANDLER_FAILED = 'HANDLER_FAILED', + SUBSCRIPTION_LIMIT_EXCEEDED = 'SUBSCRIPTION_LIMIT_EXCEEDED', + PRICE_FEEDS_FETCH_FAILED = 'PRICE_FEEDS_FETCH_FAILED' +} + +// Validation error type +type ValidationError = string | { + field: string; + message: string; + value?: unknown; +}; + +export class DataError extends PythError { + public readonly name: string = 'DataError'; + + constructor( + code: PythErrorCode | DataErrorCode, + message: string, + severity: ErrorSeverity = ErrorSeverity.MEDIUM, + details?: ErrorDetails, + originalError?: Error + ) { + super(code as PythErrorCode, message, severity, details, originalError); + Object.setPrototypeOf(this, new.target.prototype); + } + + // Factory methods + static invalidSubscription(subscription: unknown, reason: string): DataError { + return new DataError( + DataErrorCode.INVALID_SUBSCRIPTION, + 'Invalid subscription parameters', + ErrorSeverity.MEDIUM, + { subscription, reason } + ); + } + + static subscriptionLimitExceeded( + currentCount: number, + maxLimit: number + ): DataError { + return new DataError( + DataErrorCode.SUBSCRIPTION_LIMIT, + `Subscription limit exceeded (${currentCount}/${maxLimit})`, + ErrorSeverity.HIGH, + { currentCount, maxLimit } + ); + } + + static validationFailed( + data: unknown, + validationErrors: ValidationError[] + ): DataError { + return new DataError( + DataErrorCode.VALIDATION_FAILED, + 'Data validation failed', + ErrorSeverity.MEDIUM, + { data, validationErrors } + ); + } + + static sequenceError( + expected: number, + received: number, + details?: ErrorDetails + ): DataError { + return new DataError( + DataErrorCode.SEQUENCE_ERROR, + `Message sequence error: expected ${expected}, received ${received}`, + ErrorSeverity.MEDIUM, + { expected, received, ...details } + ); + } + + static transformError(data: unknown, targetFormat: string, error?: Error): DataError { + return new DataError( + DataErrorCode.TRANSFORM_ERROR, + 'Failed to transform data', + ErrorSeverity.MEDIUM, + { data, targetFormat }, + error + ); + } + + static schemaError(data: unknown, schema: Record, error?: Error): DataError { + return new DataError( + DataErrorCode.SCHEMA_ERROR, + 'Data does not match schema', + ErrorSeverity.HIGH, + { data, schema }, + error + ); + } + + static stalePriceError( + symbol: string, + lastUpdateTime: number, + maxAge: number + ): DataError { + return new DataError( + DataErrorCode.STALE_PRICE, + `Price data for ${symbol} is stale`, + ErrorSeverity.HIGH, + { + symbol, + lastUpdateTime, + maxAge, + currentTime: Date.now() + } + ); + } + + static chainError( + chain: string, + operation: string, + error?: Error + ): DataError { + return new DataError( + DataErrorCode.CHAIN_DATA_ERROR, + `Chain-specific error on ${chain} during ${operation}`, + ErrorSeverity.HIGH, + { chain, operation }, + error + ); + } +} + +// Type guard +export const isDataError = (error: unknown): error is DataError => { + return error instanceof DataError; +}; \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/error/index.ts b/packages/plugin-pyth-data/src/error/index.ts new file mode 100644 index 0000000000..cc12a00a10 --- /dev/null +++ b/packages/plugin-pyth-data/src/error/index.ts @@ -0,0 +1,3 @@ +export * from './base'; +export * from './websocket'; +export * from './data'; \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/error/runtime.ts b/packages/plugin-pyth-data/src/error/runtime.ts new file mode 100644 index 0000000000..87766547c9 --- /dev/null +++ b/packages/plugin-pyth-data/src/error/runtime.ts @@ -0,0 +1,71 @@ +import { PythError, ErrorSeverity, PythErrorCode, ErrorDetails } from './base'; + +export class RuntimeError extends PythError { + public readonly name: string = 'RuntimeError'; + + constructor( + code: PythErrorCode, + message: string, + severity: ErrorSeverity = ErrorSeverity.HIGH, + details?: ErrorDetails, + originalError?: Error + ) { + super(code, message, severity, details, originalError); + Object.setPrototypeOf(this, new.target.prototype); + } + + // Factory methods + static initializationError(component: string, reason: string, error?: Error): RuntimeError { + return new RuntimeError( + PythErrorCode.RUNTIME_INITIALIZATION, + `Failed to initialize ${component}: ${reason}`, + ErrorSeverity.HIGH, + { component, reason }, + error + ); + } + + static configurationError(component: string, reason: string, error?: Error): RuntimeError { + return new RuntimeError( + PythErrorCode.RUNTIME_CONFIGURATION, + `Configuration error in ${component}: ${reason}`, + ErrorSeverity.HIGH, + { component, reason }, + error + ); + } + + static validationError(component: string, reason: string, error?: Error): RuntimeError { + return new RuntimeError( + PythErrorCode.RUNTIME_VALIDATION, + `Validation error in ${component}: ${reason}`, + ErrorSeverity.HIGH, + { component, reason }, + error + ); + } + + static stateTransitionError( + component: string, + fromState: string, + toState: string, + reason: string + ): RuntimeError { + return new RuntimeError( + PythErrorCode.STATE_INVALID_TRANSITION, + `Invalid state transition in ${component} from ${fromState} to ${toState}: ${reason}`, + ErrorSeverity.HIGH, + { component, fromState, toState, reason } + ); + } + + static statePersistenceError(component: string, operation: string, error?: Error): RuntimeError { + return new RuntimeError( + PythErrorCode.STATE_PERSISTENCE, + `Failed to ${operation} state for ${component}`, + ErrorSeverity.HIGH, + { component, operation }, + error + ); + } +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/error/websocket.ts b/packages/plugin-pyth-data/src/error/websocket.ts new file mode 100644 index 0000000000..d8fc5c5eea --- /dev/null +++ b/packages/plugin-pyth-data/src/error/websocket.ts @@ -0,0 +1,90 @@ +import { PythError, ErrorSeverity, PythErrorCode, ErrorDetails } from './base'; + +// WebSocket States +export enum WebSocketState { + CONNECTING = 'CONNECTING', + CONNECTED = 'CONNECTED', + RECONNECTING = 'RECONNECTING', + DISCONNECTED = 'DISCONNECTED', + ERROR = 'ERROR' +} + +// WebSocket specific error class +export class WebSocketError extends PythError { + public readonly name: string = 'WebSocketError'; + + constructor( + code: PythErrorCode, + message: string, + severity: ErrorSeverity = ErrorSeverity.HIGH, + details?: ErrorDetails, + originalError?: Error + ) { + super(code, message, severity, details, originalError); + Object.setPrototypeOf(this, new.target.prototype); + } + + // Factory methods + static connectionTimeout(details?: ErrorDetails): WebSocketError { + return new WebSocketError( + PythErrorCode.WS_CONNECTION_TIMEOUT, + 'WebSocket connection timed out', + ErrorSeverity.HIGH, + details + ); + } + + static connectionRefused(details?: ErrorDetails): WebSocketError { + return new WebSocketError( + PythErrorCode.WS_CONNECTION_REFUSED, + 'WebSocket connection refused', + ErrorSeverity.HIGH, + details + ); + } + + static invalidUrl(url: string): WebSocketError { + return new WebSocketError( + PythErrorCode.WS_INVALID_URL, + `Invalid WebSocket URL: ${url}`, + ErrorSeverity.HIGH, + { url } + ); + } + + static sslError(details?: ErrorDetails): WebSocketError { + return new WebSocketError( + PythErrorCode.WS_SSL_ERROR, + 'SSL/TLS connection error', + ErrorSeverity.HIGH, + details + ); + } + + static heartbeatFailure(details?: ErrorDetails): WebSocketError { + return new WebSocketError( + PythErrorCode.WS_HEARTBEAT_FAILED, + 'WebSocket heartbeat check failed', + ErrorSeverity.HIGH, + details + ); + } + + static invalidStateTransition( + fromState: WebSocketState, + toState: WebSocketState, + details?: ErrorDetails + ): WebSocketError { + return new WebSocketError( + PythErrorCode.WS_INVALID_STATE_TRANSITION, + `Invalid state transition from ${fromState} to ${toState}`, + ErrorSeverity.HIGH, + { fromState, toState, ...details } + ); + } +} + +// Type guard +export const isWebSocketError = (error: unknown): error is WebSocketError => { + return error instanceof WebSocketError; +}; \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/index.ts b/packages/plugin-pyth-data/src/index.ts new file mode 100644 index 0000000000..cd5a769fa8 --- /dev/null +++ b/packages/plugin-pyth-data/src/index.ts @@ -0,0 +1,92 @@ +import { Plugin } from "@elizaos/core"; +import chalk from 'chalk'; +import Table from 'cli-table3'; +import ora from 'ora'; +import getPriceFeedsAction from "./actions/actionGetPriceFeeds"; +import getPriceUpdatesStreamAction from "./actions/actionGetPriceUpdatesStream"; +import getLatestPriceUpdatesAction from "./actions/actionGetLatestPriceUpdates"; +import getLatestPublisherCapsAction from "./actions/actionGetLatestPublisherCaps"; + +// Start the loader +const spinner = ora({ + text: chalk.cyan('Initializing Pyth Data Plugin...'), + spinner: 'dots12', + color: 'cyan' +}).start(); + +// Simulate some loading time +await new Promise(resolve => setTimeout(resolve, 1000)); + +const actions = [ + getPriceFeedsAction, + getPriceUpdatesStreamAction, + getLatestPriceUpdatesAction, + getLatestPublisherCapsAction, +]; + +// Initial banner with chalk styling +console.log('\n' + chalk.cyan('┌────────────────────────────────────────┐')); +console.log(chalk.cyan('│') + chalk.yellow.bold(' PYTH DATA PLUGIN ') + chalk.cyan(' │')); +console.log(chalk.cyan('├────────────────────────────────────────┤')); +console.log(chalk.cyan('│') + chalk.white(' Initializing Pyth Data Services... ') + chalk.cyan('│')); +console.log(chalk.cyan('│') + chalk.white(' Version: 1.0.0 ') + chalk.cyan('│')); +console.log(chalk.cyan('└────────────────────────────────────────┘')); + +// Stop the loader +spinner.succeed(chalk.green('Pyth Data Plugin initialized successfully!')); + +// Create a beautiful table for actions +const actionTable = new Table({ + head: [ + chalk.cyan('Action'), + chalk.cyan('H'), + chalk.cyan('V'), + chalk.cyan('E'), + chalk.cyan('Similes') + ], + style: { + head: [], + border: ['cyan'] + } +}); + +// Format and add action information +actions.forEach(action => { + actionTable.push([ + chalk.white(action.name), + typeof action.handler === 'function' ? chalk.green('✓') : chalk.red('✗'), + typeof action.validate === 'function' ? chalk.green('✓') : chalk.red('✗'), + action.examples?.length > 0 ? chalk.green('✓') : chalk.red('✗'), + chalk.gray(action.similes?.join(', ') || 'none') + ]); +}); + +// Display the action table +console.log('\n' + actionTable.toString()); + +// Plugin status with a nice table +const statusTable = new Table({ + style: { + border: ['cyan'] + } +}); + +statusTable.push( + [chalk.cyan('Plugin Status')], + [chalk.white('Name : ') + chalk.yellow('pyth-data')], + [chalk.white('Actions : ') + chalk.green(actions.length.toString())], + [chalk.white('Status : ') + chalk.green('Loaded & Ready')] +); + +console.log('\n' + statusTable.toString() + '\n'); + +const pythDataPlugin: Plugin = { + name: "pyth-data", + description: "Pyth Data Plugin for price feeds and market data", + actions: actions, + evaluators: [] +}; + +// Export for both CommonJS and ESM +export { pythDataPlugin }; +export default pythDataPlugin; diff --git a/packages/plugin-pyth-data/src/price_feeds/price_feed_ids.json b/packages/plugin-pyth-data/src/price_feeds/price_feed_ids.json new file mode 100644 index 0000000000..887bcc3140 --- /dev/null +++ b/packages/plugin-pyth-data/src/price_feeds/price_feed_ids.json @@ -0,0 +1,7950 @@ +[ + { + "id": "afcc9a5bb5eefd55e12b6f0b4c8e6bccf72b785134ee232a5d175afd082e8832", + "attributes": { + "asset_type": "Equity", + "base": "AAPL", + "cms_symbol": "AAPL", + "country": "US", + "cqs_symbol": "AAPL", + "description": "APPLE INC / US DOLLAR", + "display_symbol": "AAPL/USD", + "nasdaq_symbol": "AAPL", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.AAPL/USD" + } + }, + { + "id": "d6b3bc030a8bbb7dd9de46fb564c34bb7f860dead8985eb16a49cdc62f8ab3a5", + "attributes": { + "asset_type": "Crypto", + "base": "AAVE", + "description": "AAVE / US DOLLAR", + "display_symbol": "AAVE/USD", + "generic_symbol": "AAVEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AAVE/USD" + } + }, + { + "id": "73dc009953c83c944690037ea477df627657f45c14f16ad3a61089c5a3f9f4f2", + "attributes": { + "asset_type": "Crypto", + "base": "ADA", + "description": "CARDANO / US DOLLAR", + "display_symbol": "ADA/USD", + "generic_symbol": "ADAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ADA/USD" + } + }, + { + "id": "08f781a893bc9340140c5f89c8a96f438bcfae4d1474cc0f688e3a52892c7318", + "attributes": { + "asset_type": "Crypto", + "base": "ALGO", + "description": "ALGORAND / US DOLLAR", + "display_symbol": "ALGO/USD", + "generic_symbol": "ALGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ALGO/USD" + } + }, + { + "id": "8b62866fcd3a25ff9118506444e9fe5171e67c61a049f4b4fdacdbc31ae862bb", + "attributes": { + "asset_type": "Crypto", + "base": "ALICE", + "description": "MY NEIGHBOR ALICE / US DOLLAR", + "display_symbol": "ALICE/USD", + "generic_symbol": "ALCEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ALICE/USD" + } + }, + { + "id": "2657bb1e7a13f1a05887a627c0f191c839aac10924a3396c03abe7d30fbff27a", + "attributes": { + "asset_type": "Crypto", + "base": "ALPACA", + "description": "ALPACA FINANCE / US DOLLAR", + "display_symbol": "ALPACA/USD", + "generic_symbol": "ALPCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ALPACA/USD" + } + }, + { + "id": "c21e81af5c80ee23c0b51c8b4f4ba0ea28c8b38bc85beb7b1335356a32023256", + "attributes": { + "asset_type": "Equity", + "base": "AMC", + "cms_symbol": "AMC", + "country": "US", + "cqs_symbol": "AMC", + "description": "AMC ENTERTAINMENT HOLDINGS INC / US DOLLAR", + "display_symbol": "AMC/USD", + "nasdaq_symbol": "AMC", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.AMC/USD" + } + }, + { + "id": "2a424024e5a4438d4d698f99e25df39e347b3889f7249b64c771f7504a0d2f12", + "attributes": { + "asset_type": "Equity", + "base": "AMGN", + "cms_symbol": "AMGN", + "country": "US", + "cqs_symbol": "AMGN", + "description": "AMGEN, INC. / US DOLLAR", + "display_symbol": "AMGN/USD", + "nasdaq_symbol": "AMGN", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.AMGN/USD" + } + }, + { + "id": "f73112d4ad26fd37cf18ca9b3f7e6f1a562b5965cbc26e4488a540552f18072e", + "attributes": { + "asset_type": "Crypto", + "base": "AMP", + "description": "AMP / US DOLLAR", + "display_symbol": "AMP/USD", + "generic_symbol": "AMPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AMP/USD" + } + }, + { + "id": "095e126b86f4f416a21da0c44b997a379e8647514a1b78204ca0a6267801d00f", + "attributes": { + "asset_type": "Equity", + "base": "AMZN", + "cms_symbol": "AMZN", + "country": "US", + "cqs_symbol": "AMZN", + "description": "AMAZON.COM, INC. / US DOLLAR", + "display_symbol": "AMZN/USD", + "nasdaq_symbol": "AMZN", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.AMZN/USD" + } + }, + { + "id": "cb1743d0e3e3eace7e84b8230dc082829813e3ab04e91b503c08e9a441c0ea8b", + "attributes": { + "asset_type": "Crypto", + "base": "APE", + "description": "APECOIN / US DOLLAR", + "display_symbol": "APE/USD", + "generic_symbol": "APEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.APE/USD" + } + }, + { + "id": "44a93dddd8effa54ea51076c4e851b6cbbfd938e82eb90197de38fe8876bb66e", + "attributes": { + "asset_type": "Crypto", + "base": "APT", + "description": "APTOS / US DOLLAR", + "display_symbol": "APT/USD", + "generic_symbol": "APTSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.APT/USD" + } + }, + { + "id": "c11efd88a9b2c96bc84bccd6ce4aa05bebad7aa760dbe5f2f00ef90c4abd50cc", + "attributes": { + "asset_type": "Crypto", + "base": "ATLAS", + "description": "STAR ATLAS / US DOLLAR", + "display_symbol": "ATLAS/USD", + "generic_symbol": "ATLASUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ATLAS/USD" + } + }, + { + "id": "61226d39beea19d334f17c2febce27e12646d84675924ebb02b9cdaea68727e3", + "attributes": { + "asset_type": "Crypto", + "base": "ATOM", + "description": "COSMOS / US DOLLAR", + "display_symbol": "ATOM/USD", + "generic_symbol": "ATOMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ATOM/USD" + } + }, + { + "id": "2646ca1e1186fd2bb48b2ab3effa841d233b7e904b2caebb19c8030784a89c97", + "attributes": { + "asset_type": "FX", + "base": "AUD", + "description": "AUSTRALIAN DOLLAR / US DOLLAR", + "display_symbol": "AUD/USD", + "generic_symbol": "AUDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.AUD/USD", + "tenor": "Spot" + } + }, + { + "id": "eb00e1f858549e12034ff880b7592456a71b4237aaf4aeb16e63cd9b68ba4d7e", + "attributes": { + "asset_type": "Crypto", + "base": "AURORA", + "description": "AURORA / US DOLLAR", + "display_symbol": "AURORA/USD", + "generic_symbol": "AURUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AURORA/USD" + } + }, + { + "id": "d7566a3ba7f7286ed54f4ae7e983f4420ae0b1e0f3892e11f9c4ab107bbad7b9", + "attributes": { + "asset_type": "Crypto", + "base": "AVAX", + "description": "AVALANCHE / US DOLLAR", + "display_symbol": "AVAX/USD", + "generic_symbol": "AVAXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AVAX/USD" + } + }, + { + "id": "01f64be1849d432ddf6164c6bcf4ec8635db12aaa76132b2291561ffd6a29993", + "attributes": { + "asset_type": "Equity", + "base": "AXP", + "cms_symbol": "AXP", + "country": "US", + "cqs_symbol": "AXP", + "description": "AMERICAN EXPRESS COMPANY / US DOLLAR", + "display_symbol": "AXP/USD", + "nasdaq_symbol": "AXP", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.AXP/USD" + } + }, + { + "id": "b327d9cf0ecd793a175fa70ac8d2dc109d4462758e556962c4a87b02ec4f3f15", + "attributes": { + "asset_type": "Crypto", + "base": "AXS", + "description": "AXIE INFINITY / US DOLLAR", + "display_symbol": "AXS/USD", + "generic_symbol": "AXSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AXS/USD" + } + }, + { + "id": "40f63777ba678d5c2c7c69c4ad9daeb867d274bc785c5ada2c84b8613eeb5e14", + "attributes": { + "asset_type": "Equity", + "base": "BA", + "cms_symbol": "BA", + "country": "US", + "cqs_symbol": "BA", + "description": "BOEING CO / US DOLLAR", + "display_symbol": "BA/USD", + "nasdaq_symbol": "BA", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BA/USD" + } + }, + { + "id": "50c67b3fd225db8912a424dd4baed60ffdde625ed2feaaf283724f9608fea266", + "attributes": { + "asset_type": "Crypto", + "base": "SUI", + "description": "SUI / US DOLLAR", + "display_symbol": "SUI/USD", + "generic_symbol": "SUIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SUI/USD" + } + }, + { + "id": "30029479598797290e3638a1712c29bde2367d0eca794f778b25b5a472f192de", + "attributes": { + "asset_type": "Crypto", + "base": "BCH", + "description": "BITCOIN CASH / US DOLLAR", + "display_symbol": "BCH/USD", + "generic_symbol": "BCHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BCH/USD" + } + }, + { + "id": "39786301f95a366bcb8538fa0d2a449ac904be84c7069b9181cbf647799d657b", + "attributes": { + "asset_type": "Crypto", + "base": "BIFI", + "description": "BEEFY FINANCE / US DOLLAR", + "display_symbol": "BIFI/USD", + "generic_symbol": "BIFIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BIFI/USD" + } + }, + { + "id": "51fa95fac7bb8a4790f5733e8b2040937e88e6d8ea8fe172cea56b204b059bc2", + "attributes": { + "asset_type": "Crypto", + "base": "STETH", + "description": "LIDO STAKED ETH / ETHEREUM", + "display_symbol": "STETH/ETH", + "generic_symbol": "STETHETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STETH/ETH" + } + }, + { + "id": "ecf553770d9b10965f8fb64771e93f5690a182edc32be4a3236e0caaa6e0581a", + "attributes": { + "asset_type": "Crypto", + "base": "BNB", + "description": "BNB / US DOLLAR", + "display_symbol": "BNB/USD", + "generic_symbol": "BNBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BNB/USD" + } + }, + { + "id": "53377a90ac8ddbd1cad1a65dd705f12eeba0be01510777a1e25fcd03f295572d", + "attributes": { + "asset_type": "Crypto", + "base": "BONK", + "description": "BONK / US DOLLAR", + "display_symbol": "BONK/USD", + "generic_symbol": "BONKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BONK/USD" + } + }, + { + "id": "f9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b", + "attributes": { + "asset_type": "Crypto", + "base": "BTC", + "description": "BITCOIN / US DOLLAR", + "display_symbol": "BTC/USD", + "generic_symbol": "BTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BTC/USD" + } + }, + { + "id": "eb3b5720301b36fa074260e6e27e2cfff3a7c6bbb47564eb218a9a7f2a8c0193", + "attributes": { + "asset_type": "Crypto", + "base": "BTT", + "description": "BITTORRENT / US DOLLAR", + "display_symbol": "BTT/USD", + "generic_symbol": "BTTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BTT/USD" + } + }, + { + "id": "c098773aa18ebb7e84d5ee7ea7d97105ab2015a329f670012398cd2c8f5cc6ca", + "attributes": { + "asset_type": "Crypto", + "base": "C98", + "description": "COIN98 / US DOLLAR", + "display_symbol": "C98/USD", + "generic_symbol": "C98USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.C98/USD" + } + }, + { + "id": "3ea98c0336f6a8506dc34567da82178f6f7a664b206ae8eaf8ab8d96721ecccc", + "attributes": { + "asset_type": "Crypto", + "base": "CAKE", + "description": "PANCAKESWAP / US DOLLAR", + "display_symbol": "CAKE/USD", + "generic_symbol": "CAKEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CAKE/USD" + } + }, + { + "id": "6e03ddbdaf07cd975626dc72e567427ceaa05108f5ffa1611942cf4006cefb2c", + "attributes": { + "asset_type": "Equity", + "base": "CAT", + "cms_symbol": "CAT", + "country": "US", + "cqs_symbol": "CAT", + "description": "CATERPILLAR INC. / US DOLLAR", + "display_symbol": "CAT/USD", + "nasdaq_symbol": "CAT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.CAT/USD" + } + }, + { + "id": "651071f8c7ab2321b6bdd3bc79b94a50841a92a6e065f9e3b8b9926a8fb5a5d1", + "attributes": { + "asset_type": "Crypto", + "base": "CBETH", + "description": "COINBASE WRAPPED STAKED ETH / US DOLLAR", + "display_symbol": "CBETH/USD", + "generic_symbol": "CETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CBETH/USD" + } + }, + { + "id": "e75bf4f2cf9e9f6a91d3c3cfc00136e3ba7eaeb162084fdad818c68133dc8a24", + "attributes": { + "asset_type": "Crypto", + "base": "CELO", + "description": "CELO / US DOLLAR", + "display_symbol": "CELO/USD", + "generic_symbol": "CELOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CELO/USD" + } + }, + { + "id": "0d10b9ccdc9af1d65cd4bafabf4e34db01c0ce83abba190230eaf26d7592cd21", + "attributes": { + "asset_type": "Crypto", + "base": "CHR", + "description": "CHROMIA / US DOLLAR", + "display_symbol": "CHR/USD", + "generic_symbol": "CHRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CHR/USD" + } + }, + { + "id": "247db80e271f8d9e31c358aa93cb81bb091f2ffd90e8d85182b56fc22501e82e", + "attributes": { + "asset_type": "Crypto", + "base": "CHZ", + "description": "CHILIZ / US DOLLAR", + "display_symbol": "CHZ/USD", + "generic_symbol": "CHZUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CHZ/USD" + } + }, + { + "id": "f6d77a739c261c21da55c6a461384a0aa10ce6f4ae997fa3fd2fe107b9ed6739", + "attributes": { + "asset_type": "Crypto", + "base": "USD0", + "description": "USUAL USD / US DOLLAR", + "display_symbol": "USD0/USD", + "generic_symbol": "USD0USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USD0/USD" + } + }, + { + "id": "a29b53fbc56604ef1f2b65e89e48b0f09bb77b3fb890f4c70ee8cbd68a12a94b", + "attributes": { + "asset_type": "Equity", + "base": "COIN", + "cms_symbol": "COIN", + "country": "US", + "cqs_symbol": "COIN", + "description": "COINBASE GLOBAL INC / US DOLLAR", + "display_symbol": "COIN/USD", + "nasdaq_symbol": "COIN", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.COIN/USD" + } + }, + { + "id": "8112fed370f3d9751e513f7696472eab61b7f4e2487fd9f46c93de00a338631c", + "attributes": { + "asset_type": "Crypto", + "base": "NTRN", + "description": "NEUTRON / US DOLLAR", + "display_symbol": "NTRN/USD", + "generic_symbol": "NTRNUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.NTRN/USD" + } + }, + { + "id": "13ac8c71e4e1c61dece57bea76163d393bf75cd0db8e52981e1564fa592698cb", + "attributes": { + "asset_type": "Crypto", + "base": "COW", + "description": "COW PROTOCOL / US DOLLAR", + "display_symbol": "COW/USD", + "generic_symbol": "COWUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.COW/USD" + } + }, + { + "id": "0d66aae904c7d457ed92c5d933e7d25ecb2b1e285b1be6a4e8520e38bc296161", + "attributes": { + "asset_type": "Equity", + "base": "CRM", + "cms_symbol": "CRM", + "country": "US", + "cqs_symbol": "CRM", + "description": "SALESFORCE INC / US DOLLAR", + "display_symbol": "CRM/USD", + "nasdaq_symbol": "CRM", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.CRM/USD" + } + }, + { + "id": "475a251c7cbded7645a146fc049d44058aa977e6850f20f4c86e289fb8dbe4f8", + "attributes": { + "asset_type": "Crypto", + "base": "CRO", + "description": "CRONOS / US DOLLAR", + "display_symbol": "CRO/USD", + "generic_symbol": "CROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CRO/USD" + } + }, + { + "id": "94bce4aee88fdfa5b58d81090bd6b3784717fa6df85419d9f04433bb3d615d5c", + "attributes": { + "asset_type": "Crypto", + "base": "CRV", + "description": "CURVE DAO / US DOLLAR", + "display_symbol": "CRV/USD", + "generic_symbol": "CRVUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CRV/USD" + } + }, + { + "id": "f1063ff9dea7f8052929e97e907218eff557542a59c54a60eb3a945b67759999", + "attributes": { + "asset_type": "Equity", + "base": "CSCO", + "cms_symbol": "CSCO", + "country": "US", + "cqs_symbol": "CSCO", + "description": "CISCO SYSTEMS INC / US DOLLAR", + "display_symbol": "CSCO/USD", + "nasdaq_symbol": "CSCO", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.CSCO/USD" + } + }, + { + "id": "b59d65c2e10af17c0d6f7d10be8d64c0c13dd15d957c4c39763b4cc55e591937", + "attributes": { + "asset_type": "Crypto", + "base": "CUSD", + "description": "CELO DOLLAR / US DOLLAR", + "display_symbol": "CUSD/USD", + "generic_symbol": "CUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CUSD/USD" + } + }, + { + "id": "23fc699f5966447af3ec895e6f2c046f91d62d40ad1a86e8cde8fd0746324d8f", + "attributes": { + "asset_type": "Equity", + "base": "CVX", + "cms_symbol": "CVX", + "country": "US", + "cqs_symbol": "CVX", + "description": "CHEVRON CORPORATION / US DOLLAR", + "display_symbol": "CVX/USD", + "nasdaq_symbol": "CVX", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.CVX/USD" + } + }, + { + "id": "4193915dc8d03bc15603ec3c0ca9c5e3eff6726c2a2cf262e30be121c2b9a206", + "attributes": { + "asset_type": "Crypto", + "base": "CVX", + "description": "CONVEX FINANCE / US DOLLAR", + "display_symbol": "CVX/USD", + "generic_symbol": "CVXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CVX/USD" + } + }, + { + "id": "87a67534df591d2dd5ec577ab3c75668a8e3d35e92e27bf29d9e2e52df8de412", + "attributes": { + "asset_type": "Crypto", + "base": "DAI", + "description": "DAI / US DOLLAR", + "display_symbol": "DAI/USD", + "generic_symbol": "DAIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DAI/USD" + } + }, + { + "id": "5f70ddbab5034fe97cf8722437f7f3a7f575a9f369e751c9567e2c55c9bb554f", + "attributes": { + "asset_type": "Equity", + "base": "DIS", + "cms_symbol": "DIS", + "country": "US", + "cqs_symbol": "DIS", + "description": "WALT DISNEY CO / US DOLLAR", + "display_symbol": "DIS/USD", + "nasdaq_symbol": "DIS", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.DIS/USD" + } + }, + { + "id": "36032e522b810babd8e3148e9f0d588af9e95e93b97ffb58566b837fdbd31f7f", + "attributes": { + "asset_type": "Crypto", + "base": "DOT", + "description": "POLKADOT / US DOLLAR", + "display_symbol": "DOT/USD", + "generic_symbol": "DOTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DOT/USD" + } + }, + { + "id": "751a17c2f649525a42812450ed3a656933e3bccefa702461a60c21109cb8fcb9", + "attributes": { + "asset_type": "Equity", + "base": "DOW", + "cms_symbol": "DOW", + "country": "US", + "cqs_symbol": "DOW", + "description": "DOW INC / US DOLLAR", + "display_symbol": "DOW/USD", + "nasdaq_symbol": "DOW", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.DOW/USD" + } + }, + { + "id": "05a934cb3bbadef93b525978ab5bd3d5ce3b8fc6717b9ea182a688c5d8ee8e02", + "attributes": { + "asset_type": "Crypto", + "base": "DYDX", + "description": "DYDX / US DOLLAR", + "display_symbol": "DYDX/USD", + "generic_symbol": "DYDXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DYDX/USD" + } + }, + { + "id": "0cf3cc70e1449323c5b2c359d1359fe7ac68109e9e927e090ecd71611493a281", + "attributes": { + "asset_type": "Equity", + "base": "EFA", + "cms_symbol": "EFA", + "country": "US", + "cqs_symbol": "EFA", + "description": "ISHARES MSCI EAFE ETF / US DOLLAR", + "display_symbol": "EFA/USD", + "nasdaq_symbol": "EFA", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.EFA/USD" + } + }, + { + "id": "ca80ba6dc32e08d06f1aa886011eed1d77c77be9eb761cc10d72b7d0a2fd57a6", + "attributes": { + "asset_type": "Crypto", + "base": "ETH", + "description": "ETHEREUM / US DOLLAR", + "display_symbol": "ETH/USD", + "generic_symbol": "ETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ETH/USD" + } + }, + { + "id": "c1b12769f6633798d45adfd62bfc70114839232e2949b01fb3d3f927d2606154", + "attributes": { + "asset_type": "FX", + "base": "EUR", + "description": "EURO / US DOLLAR", + "display_symbol": "EUR/USD", + "generic_symbol": "EURUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.EUR/USD", + "tenor": "Spot" + } + }, + { + "id": "55b9594b0b975ca8be6b00399c47956e04269f1e565ffa33e2f8756e7e840efb", + "attributes": { + "asset_type": "Crypto", + "base": "SDAI", + "description": "SAVINGS DAI / US DOLLAR", + "display_symbol": "SDAI/USD", + "generic_symbol": "SDAIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SDAI/USD" + } + }, + { + "id": "6660d7629213995af8aa169ad6a1cf1a725765d3741b7e7a27825f884a701b96", + "attributes": { + "asset_type": "Crypto", + "base": "FIDA", + "description": "BONFIDA / US DOLLAR", + "display_symbol": "FIDA/USD", + "generic_symbol": "FIDAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FIDA/USD" + } + }, + { + "id": "57596fe1a697014b962ac9e693dee99c4bb01d6c5eca271a1a26ad475a92cdbd", + "attributes": { + "asset_type": "Crypto", + "base": "FLOKI", + "description": "FLOKI / US DOLLAR", + "display_symbol": "FLOKI/USD", + "generic_symbol": "FLKIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FLOKI/USD" + } + }, + { + "id": "aa67a6594d0e1578faa3bba80bec5b31e461b945e4fbab59eeab38ece09335fb", + "attributes": { + "asset_type": "Crypto", + "base": "FLOW", + "description": "FLOW / US DOLLAR", + "display_symbol": "FLOW/USD", + "generic_symbol": "FLOWUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FLOW/USD" + } + }, + { + "id": "9b7bfd7654cbb80099d5edc0a29159afc9e9b4636c811cf8c3b95bd11dd8e3dd", + "attributes": { + "asset_type": "Crypto", + "base": "FTM", + "description": "FANTOM / US DOLLAR", + "display_symbol": "FTM/USD", + "generic_symbol": "FTMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FTM/USD" + } + }, + { + "id": "0184a60a47ab7c23fcb828d727b05748ef52433fb5ae96f775cc98c9049d8c2c", + "attributes": { + "asset_type": "Crypto", + "base": "FTT", + "description": "FTX / US DOLLAR", + "display_symbol": "FTT/USD", + "generic_symbol": "FTTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FTT/USD" + } + }, + { + "id": "ac27da9472e28969d829c27312afb08c5f1866336384f0dbdf9a48af97cf28a0", + "attributes": { + "asset_type": "Crypto", + "base": "FXS", + "description": "FRAX SHARE / US DOLLAR", + "display_symbol": "FXS/USD", + "generic_symbol": "FXSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FXS/USD" + } + }, + { + "id": "21adabf73ad61903c1872fa220f84d3b1b9990cec2047f8317e2a67efcd1764e", + "attributes": { + "asset_type": "Crypto", + "base": "GALA", + "description": "GALA GAMES / US DOLLAR", + "display_symbol": "GALA/USD", + "generic_symbol": "GALAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GALA/USD" + } + }, + { + "id": "bcbdc2755bd74a2065f9d3283c2b8acbd898e473bdb90a6764b3dbd467c56ecd", + "attributes": { + "asset_type": "FX", + "base": "GBP", + "description": "BRITISH POUND / US DOLLAR", + "display_symbol": "GBP/USD", + "generic_symbol": "GBPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.GBP/USD", + "tenor": "Spot" + } + }, + { + "id": "732854c8a2a37168037263fa01e47526a5cffe026a43168d61baf4bf4e490f97", + "attributes": { + "asset_type": "Equity", + "base": "GE", + "cms_symbol": "GE", + "country": "US", + "cqs_symbol": "GE", + "description": "GENERAL ELECTRIC COMPANY / US DOLLAR", + "display_symbol": "GE/USD", + "nasdaq_symbol": "GE", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.GE/USD" + } + }, + { + "id": "974124ccd9de65f614142b71ed717c2a6b079ae8f69e795e4d4a0d01b7218538", + "attributes": { + "asset_type": "Equity", + "base": "GME", + "cms_symbol": "GME", + "country": "US", + "cqs_symbol": "GME", + "description": "GAMESTOP CORP. / US DOLLAR", + "display_symbol": "GME/USD", + "nasdaq_symbol": "GME", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.GME/USD" + } + }, + { + "id": "c999fe8a75bf9528931deb832e2934dd1ac138757d7f2c1398675b6f521d556f", + "attributes": { + "asset_type": "Crypto", + "base": "GMT", + "description": "STEPN / US DOLLAR", + "display_symbol": "GMT/USD", + "generic_symbol": "GMTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GMT/USD" + } + }, + { + "id": "0c6c5da309db3296d7e08c3e28b24fb259dca5aa46fb34be4b44ecccfeead6fe", + "attributes": { + "asset_type": "Crypto", + "base": "VIRTUAL", + "description": "VIRTUAL PROTOCOL / US DOLLAR", + "display_symbol": "VIRTUAL/USD", + "generic_symbol": "VIRTUALUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.VIRTUAL/USD" + } + }, + { + "id": "abb1a3382ab1c96282e4ee8c847acc0efdb35f0564924b35f3246e8f401b2a3d", + "attributes": { + "asset_type": "Equity", + "base": "GOOG", + "cms_symbol": "GOOG", + "country": "US", + "cqs_symbol": "GOOG", + "description": "ALPHABET INC CLASS C / US DOLLAR", + "display_symbol": "GOOG/USD", + "nasdaq_symbol": "GOOG", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.GOOG/USD" + } + }, + { + "id": "54f2d4037e28936b53732671ecdc73678257fb55674d82b3a4a15b70bf0a68dc", + "attributes": { + "asset_type": "Equity", + "base": "GOVT", + "cms_symbol": "GOVT", + "country": "US", + "cqs_symbol": "GOVT", + "description": "ISHARES US TREASURY BOND ETF / US DOLLAR", + "display_symbol": "GOVT/USD", + "nasdaq_symbol": "GOVT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.GOVT/USD" + } + }, + { + "id": "9f2f5ece4fc51f0378a5efac659680808f1273fac4e6bce8c8f92244602c64e3", + "attributes": { + "asset_type": "Equity", + "base": "GS", + "cms_symbol": "GS", + "country": "US", + "cqs_symbol": "GS", + "description": "GOLDMAN SACHS GROUP INC / US DOLLAR", + "display_symbol": "GS/USD", + "nasdaq_symbol": "GS", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.GS/USD" + } + }, + { + "id": "ad5126202f3a1c4fb84b02b7e384a00a7f90b437c58c1fce18b5096ebc18f117", + "attributes": { + "asset_type": "Crypto", + "base": "EZETH", + "description": "RENZO RESTAKED ETH / US DOLLAR", + "display_symbol": "EZETH/USD", + "generic_symbol": "EZETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EZETH/USD" + } + }, + { + "id": "21085c70777592104ad15d352e44fb59f8030398e853b0a0dd2f9b3572ca8f27", + "attributes": { + "asset_type": "Equity", + "base": "HD", + "cms_symbol": "HD", + "country": "US", + "cqs_symbol": "HD", + "description": "HOME DEPOT INC / US DOLLAR", + "display_symbol": "HD/USD", + "nasdaq_symbol": "HD", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.HD/USD" + } + }, + { + "id": "4dcb3accbf0a5f0d33a0a38968ce520d6009f28b8da573ccab99165fb8d8727f", + "attributes": { + "asset_type": "Crypto", + "base": "HNT", + "description": "HELIUM / US DOLLAR", + "display_symbol": "HNT/USD", + "generic_symbol": "HNTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HNT/USD" + } + }, + { + "id": "a457fb802064a5a7c5c87c8375165f3e607730deaa9d2627ba7710b4b2841064", + "attributes": { + "asset_type": "Equity", + "base": "HON", + "cms_symbol": "HON", + "country": "US", + "cqs_symbol": "HON", + "description": "HONEYWELL INTERNATIONAL INC / US DOLLAR", + "display_symbol": "HON/USD", + "nasdaq_symbol": "HON", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.HON/USD" + } + }, + { + "id": "a87f24ce54e247daba8c3d8ed3f2d2d8dec57e4e05467082c6ef467b472d6a84", + "attributes": { + "asset_type": "Crypto", + "base": "EURA", + "description": "EURA / US DOLLAR", + "display_symbol": "EURA/USD", + "generic_symbol": "EURAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EURA/USD" + } + }, + { + "id": "881768fdbacd7a32ddaf4e67b20cb391380a88f795d8a373127c6cc66997f0c7", + "attributes": { + "asset_type": "Equity", + "base": "IBM", + "cms_symbol": "IBM", + "country": "US", + "cqs_symbol": "IBM", + "description": "IBM COMMON STOCK / US DOLLAR", + "display_symbol": "IBM/USD", + "nasdaq_symbol": "IBM", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.IBM/USD" + } + }, + { + "id": "2d9315a88f3019f8efa88dfe9c0f0843712da0bac814461e27733f6b83eb51b3", + "attributes": { + "asset_type": "Crypto", + "base": "INJ", + "description": "INJECTIVE / US DOLLAR", + "display_symbol": "INJ/USD", + "generic_symbol": "INJUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.INJ/USD" + } + }, + { + "id": "1a957a00d2c9efce38515c6c939f35ce0ee46ae0a0522be1569d4df06beb1ced", + "attributes": { + "asset_type": "Equity", + "base": "INTC", + "cms_symbol": "INTC", + "country": "US", + "cqs_symbol": "INTC", + "description": "INTEL CORPORATION / US DOLLAR", + "display_symbol": "INTC/USD", + "nasdaq_symbol": "INTC", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.INTC/USD" + } + }, + { + "id": "46e3b2070dbb94beea1f4531005a9c111f4fb145a1a71fee9976d79fc35c71e2", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / TURKISH LYRA", + "display_symbol": "USD/TRY", + "generic_symbol": "USDTRY", + "quote_currency": "TRY", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/TRY", + "tenor": "Spot" + } + }, + { + "id": "576eef18034939eb62e7736f6f9fb7eb6c67b5c6ed81605f4879057028d734bb", + "attributes": { + "asset_type": "Equity", + "base": "IVV", + "cms_symbol": "IVV", + "country": "US", + "cqs_symbol": "IVV", + "description": "ISHARES CORE S&P 500 ETF / US DOLLAR", + "display_symbol": "IVV/USD", + "nasdaq_symbol": "IVV", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.IVV/USD" + } + }, + { + "id": "5b026317d56ec664f2d18ae4a7526f19c29134916f1d2c3af656e63c72e8a748", + "attributes": { + "asset_type": "Equity", + "base": "IWM", + "cms_symbol": "IWM", + "country": "US", + "cqs_symbol": "IWM", + "description": "ISHARES RUSSELL 2000 ETF / US DOLLAR", + "display_symbol": "IWM/USD", + "nasdaq_symbol": "IWM", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.IWM/USD" + } + }, + { + "id": "83bfaf5301e31cb552cc2611611baf8ad4af08f2a25322932c8a5306a098f765", + "attributes": { + "asset_type": "Crypto", + "base": "PUFETH", + "description": "PUFFER ETH / US DOLLAR", + "display_symbol": "PUFETH/USD", + "generic_symbol": "PUFETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PUFETH/USD" + } + }, + { + "id": "26f46723ebaf6eb891b2d5709172346d2221838f39a93d644251a9102c3224c1", + "attributes": { + "asset_type": "Crypto", + "base": "JITOSOL", + "description": "JITO STAKED SOL / US DOLLAR", + "display_symbol": "JITOSOL/USD", + "generic_symbol": "JTSLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JITOSOL/USD" + } + }, + { + "id": "24264e92a7b9a1477c8c69ec6610a330e1720ade0d345175c55781443b8d1b32", + "attributes": { + "asset_type": "Equity", + "base": "JNJ", + "cms_symbol": "JNJ", + "country": "US", + "cqs_symbol": "JNJ", + "description": "JOHNSON & JOHNSON / US DOLLAR", + "display_symbol": "JNJ/USD", + "nasdaq_symbol": "JNJ", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.JNJ/USD" + } + }, + { + "id": "046f22737835f58f2251df9283339618e4f9510bbe3171582fe50df3fedf8063", + "attributes": { + "asset_type": "Equity", + "base": "JPM", + "cms_symbol": "JPM", + "country": "US", + "cqs_symbol": "JPM", + "description": "JPMORGAN CHASE & CO / US DOLLAR", + "display_symbol": "JPM/USD", + "nasdaq_symbol": "JPM", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.JPM/USD" + } + }, + { + "id": "ac541125cba1f87cd7048ed465faaca653784605e05fc1ee90b979f0a4eb57a2", + "attributes": { + "asset_type": "Crypto", + "base": "KCS", + "description": "KUCOIN / US DOLLAR", + "display_symbol": "KCS/USD", + "generic_symbol": "KCSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.KCS/USD" + } + }, + { + "id": "2fbbfed77003411f75ccb824c8996854984565867bfc8263a36f2f86795ecded", + "attributes": { + "asset_type": "Equity", + "base": "KO", + "cms_symbol": "KO", + "country": "US", + "cqs_symbol": "KO", + "description": "COCA-COLA CO / US DOLLAR", + "display_symbol": "KO/USD", + "nasdaq_symbol": "KO", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.KO/USD" + } + }, + { + "id": "83be4ed61dd8a3518d198098ce37240c494710a7b9d85e35d9fceac21df08994", + "attributes": { + "asset_type": "Crypto", + "base": "LINK", + "description": "CHAINLINK / US DOLLAR", + "display_symbol": "LINK/USD", + "generic_symbol": "LINKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LINK/USD" + } + }, + { + "id": "74c3dcab79a257c5634b1bd0f57938d308de511ba7fffc2f01ab001084a15106", + "attributes": { + "asset_type": "Equity", + "base": "CSPX", + "country": "GB", + "description": "ISHARES CORE S&P 500 UCITS ETF / US DOLLAR", + "display_symbol": "CSPX/USD", + "generic_symbol": "CSPX", + "quote_currency": "USD", + "symbol": "Equity.GB.CSPX/USD", + "umtf": "CSPXl" + } + }, + { + "id": "27e2caf78dffd46696e9d7bc6583d1a1add9a3ed4d5aaa9b90fddf049ca492ba", + "attributes": { + "asset_type": "Equity", + "base": "IB01", + "country": "GB", + "description": "ISHARES $ TREASURY BOND 0-1YR UCITS ETF / US DOLLAR", + "display_symbol": "IB01/USD", + "generic_symbol": "IB01", + "quote_currency": "USD", + "symbol": "Equity.GB.IB01/USD", + "umtf": "IB01l" + } + }, + { + "id": "b17c4f7a56fdda9cbcb73b7edfc6a75f32dfa4f04ae79839b6fdfb56f6a1e9f6", + "attributes": { + "asset_type": "Equity", + "base": "IBTA", + "country": "GB", + "description": "ISHARES $ TREASURY BOND 1-3YR UCITS ETF / US DOLLAR", + "display_symbol": "IBTA/USD", + "generic_symbol": "IBTA", + "quote_currency": "USD", + "symbol": "Equity.GB.IBTA/USD", + "umtf": "IBTAl" + } + }, + { + "id": "997e0bf451cb36b4aea096e6b5c254d700922211dd933d9d17c467f0d6f34321", + "attributes": { + "asset_type": "Crypto", + "base": "LTC", + "description": "LITECOIN / US DOLLAR", + "display_symbol": "LTC/USD", + "generic_symbol": "LTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LTC/USD" + } + }, + { + "id": "677dbbf4f68b5cb996a40dfae338b87d5efb2e12a9b2686d1ca16d69b3d7f204", + "attributes": { + "asset_type": "Crypto", + "base": "LUNA", + "description": "TERRA / US DOLLAR", + "display_symbol": "LUNA/USD", + "generic_symbol": "LUNAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LUNA/USD" + } + }, + { + "id": "6de025a4cf28124f8ea6cb8085f860096dbc36d9c40002e221fc449337e065b2", + "attributes": { + "asset_type": "Crypto", + "base": "LUNC", + "description": "TERRA LUNA CLASSIC / US DOLLAR", + "display_symbol": "LUNC/USD", + "generic_symbol": "LUNCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LUNC/USD" + } + }, + { + "id": "6058b804017a18cfcd598b290519a03331fd0b28aa1f1595f3b9dae7ee6a418f", + "attributes": { + "asset_type": "Equity", + "base": "MCD", + "cms_symbol": "MCD", + "country": "US", + "cqs_symbol": "MCD", + "description": "MCDONALD'S CORP / US DOLLAR", + "display_symbol": "MCD/USD", + "nasdaq_symbol": "MCD", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.MCD/USD" + } + }, + { + "id": "2206debd84882bbb4852896580279c34f4b5dff225301bf218380828a193a10e", + "attributes": { + "asset_type": "Crypto", + "base": "ZIL", + "description": "ZILLIQA / US DOLLAR", + "display_symbol": "ZIL/USD", + "generic_symbol": "ZILUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZIL/USD" + } + }, + { + "id": "d596b62970582b2eba14b4ef4ab67a0d074007ede767da4e2d8cb9361192d6c5", + "attributes": { + "asset_type": "Crypto", + "base": "GNO", + "description": "GNOSIS / US DOLLAR", + "display_symbol": "GNO/USD", + "generic_symbol": "GNOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GNO/USD" + } + }, + { + "id": "b3b2fb5e7825bfe3474d0f378c695f6cb85e229deea14e7a28d37a9e5a1b7749", + "attributes": { + "asset_type": "Equity", + "base": "MINT", + "cms_symbol": "MINT", + "country": "US", + "cqs_symbol": "MINT", + "description": "PIMCO ENHANCED SHORT MATURITY ACTIVE ETF / US DOLLAR", + "display_symbol": "MINT/USD", + "nasdaq_symbol": "MINT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.MINT/USD" + } + }, + { + "id": "93ab444e1de19f0ca3e27d2bfcc9b58da4777e927e958bda0ed5632306345c8f", + "attributes": { + "asset_type": "Equity", + "base": "MMM", + "cms_symbol": "MMM", + "country": "US", + "cqs_symbol": "MMM", + "description": "3M CO / US DOLLAR", + "display_symbol": "MMM/USD", + "nasdaq_symbol": "MMM", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.MMM/USD" + } + }, + { + "id": "f22b3440dc6ff5cc08ef498d434f7e72563bd49d013a8ae8c26199d871ded7fc", + "attributes": { + "asset_type": "Equity", + "base": "MRK", + "cms_symbol": "MRK", + "country": "US", + "cqs_symbol": "MRK", + "description": "MERCK & CO INC / US DOLLAR", + "display_symbol": "MRK/USD", + "nasdaq_symbol": "MRK", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.MRK/USD" + } + }, + { + "id": "4e10201a9ad79892f1b4e9a468908f061f330272c7987ddc6506a254f77becd7", + "attributes": { + "asset_type": "Equity", + "base": "MSFT", + "cms_symbol": "MSFT", + "country": "US", + "cqs_symbol": "MSFT", + "description": "MICROSOFT CORP / US DOLLAR", + "display_symbol": "MSFT/USD", + "nasdaq_symbol": "MSFT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.MSFT/USD" + } + }, + { + "id": "7f57ca775216655022daa88e41c380529211cde01a1517735dbcf30e4a02bdaa", + "attributes": { + "asset_type": "Crypto", + "base": "MSOL", + "description": "MARINADE STAKED SOL / US DOLLAR", + "display_symbol": "MSOL/USD", + "generic_symbol": "MSOLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MSOL/USD" + } + }, + { + "id": "27e867f0f4f61076456d1a73b14c7edc1cf5cef4f4d6193a33424288f11bd0f4", + "attributes": { + "asset_type": "Crypto", + "base": "NEAR", + "description": "NEAR PROTOCOL / US DOLLAR", + "display_symbol": "NEAR/USD", + "generic_symbol": "NEARUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.NEAR/USD" + } + }, + { + "id": "12c80cd16c123809ed8e38c4acd024ba6320db5909196d31c359aeb19787a359", + "attributes": { + "asset_type": "Equity", + "base": "NFLX", + "cms_symbol": "NFLX", + "country": "US", + "cqs_symbol": "NFLX", + "description": "NETFLIX INC / US DOLLAR", + "display_symbol": "NFLX/USD", + "nasdaq_symbol": "NFLX", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.NFLX/USD" + } + }, + { + "id": "1e5e1e8d255ea9d18ed48e3e2b19351077c05403622edc31dc3b99671362e82e", + "attributes": { + "asset_type": "Crypto", + "base": "G", + "description": "GRAVITY / US DOLLAR", + "display_symbol": "G/USD", + "generic_symbol": "GUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.G/USD" + } + }, + { + "id": "e4c07b0c5f658b740dfebc0502b1374037abbccb44cb5a5d6002ddaeddf57048", + "attributes": { + "asset_type": "Equity", + "base": "NKE", + "cms_symbol": "NKE", + "country": "US", + "cqs_symbol": "NKE", + "description": "NIKE INC / US DOLLAR", + "display_symbol": "NKE/USD", + "nasdaq_symbol": "NKE", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.NKE/USD" + } + }, + { + "id": "d71fc5838e683d30b49539d979af53063250a76cfab4a4ecfa2b3279f26b7b29", + "attributes": { + "asset_type": "FX", + "base": "NZD", + "description": "NEW ZEALAND DOLLAR / US DOLLAR", + "display_symbol": "NZD/USD", + "generic_symbol": "NZDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.NZD/USD", + "tenor": "Spot" + } + }, + { + "id": "c3036175403e4b32dc291d0c023aa691f0287f058bfde5fff15d71ac68973e73", + "attributes": { + "asset_type": "Crypto", + "base": "OMI", + "description": "ECOMI / US DOLLAR", + "display_symbol": "OMI/USD", + "generic_symbol": "OMIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.OMI/USD" + } + }, + { + "id": "19786f31e85d3598cecdab810b2787de0fc22c2cf98b4f16fb1e5bf567a0a431", + "attributes": { + "asset_type": "Crypto", + "base": "1INCH", + "description": "1INCH / US DOLLAR", + "display_symbol": "1INCH/USD", + "generic_symbol": "1NCHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.1INCH/USD" + } + }, + { + "id": "9b245faf19d2f3306b58821ef60b194d7b67eb5250635059d8eaae4a36337b28", + "attributes": { + "asset_type": "Crypto", + "base": "ONE", + "description": "HARMONY / US DOLLAR", + "display_symbol": "ONE/USD", + "generic_symbol": "ONEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ONE/USD" + } + }, + { + "id": "71334dcd37620ce3c33e3bafef04cc80dec083042e49b734315b36d1aad7991f", + "attributes": { + "asset_type": "Crypto", + "base": "OP", + "description": "OPTIMISM / US DOLLAR", + "display_symbol": "OP/USD", + "generic_symbol": "OPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.OP/USD" + } + }, + { + "id": "85dafbfa99c733fdd33649551666958ca8f82fd0d849746e093b770caab249d2", + "attributes": { + "asset_type": "Crypto", + "base": "ORCA", + "description": "ORCA / US DOLLAR", + "display_symbol": "ORCA/USD", + "generic_symbol": "ORCAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ORCA/USD" + } + }, + { + "id": "5da40314baa1b85c85172eca23d1193e0395620fa95e732a1d7b3372ff4caf92", + "attributes": { + "asset_type": "Crypto", + "base": "LUSD", + "description": "LIQUITY USD / US DOLLAR", + "display_symbol": "LUSD/USD", + "generic_symbol": "LUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LUSD/USD" + } + }, + { + "id": "dc3ac2fc4726ae0afed1501e6e834010fa30687d8688b16b22c55c0975e5cd08", + "attributes": { + "asset_type": "Equity", + "base": "PG", + "cms_symbol": "PG", + "country": "US", + "cqs_symbol": "PG", + "description": "PROCTER & GAMBLE CO / US DOLLAR", + "display_symbol": "PG/USD", + "nasdaq_symbol": "PG", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.PG/USD" + } + }, + { + "id": "f03087a9a90a16402eb312c56f9f9acab1b7125c74864de8c588daeab2339121", + "attributes": { + "asset_type": "Crypto", + "base": "PYUSD", + "description": "PAYPAL USD / US DOLLAR", + "display_symbol": "PYUSD/USD", + "generic_symbol": "PYUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PYUSD/USD" + } + }, + { + "id": "38f943dd4921c7b5744de7e1cd40d1127ffd97d11c30d1632e8ceacbaf94c7d3", + "attributes": { + "asset_type": "Crypto Index", + "base": "GMMEME", + "description": "GMCI MEME / US DOLLAR", + "display_symbol": "GMMEME/USD", + "generic_symbol": "GMMEMEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.Index.GMMEME/USD" + } + }, + { + "id": "6f9c0f8b434d5ebb36a24c0a9f07ed40c29615132087ccaa8cf3b2d802724a9b", + "attributes": { + "asset_type": "Crypto", + "base": "PENGU", + "description": "PUDGY PENGUIN / US DOLLAR", + "display_symbol": "PENGU/USD", + "generic_symbol": "PENGUUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PENGU/USD" + } + }, + { + "id": "fc564609e09195df943fdcff899ae7448d5abe93e4906db809a8ceb17ece7967", + "attributes": { + "asset_type": "Equity", + "base": "QQQ", + "cms_symbol": "QQQ", + "country": "US", + "cqs_symbol": "QQQ", + "description": "INVESCO QQQ TRUST SERIES 1 / US DOLLAR", + "display_symbol": "QQQ/USD", + "nasdaq_symbol": "QQQ", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.QQQ/USD" + } + }, + { + "id": "05ae6deea209d05792ed290f7d7a409c9b4b9c650dca49d48010a260b48f6e97", + "attributes": { + "asset_type": "Crypto Index", + "base": "GML2", + "description": "GMCI L2 / US DOLLAR", + "display_symbol": "GML2/USD", + "generic_symbol": "GML2USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.Index.GML2/USD" + } + }, + { + "id": "cb9372930932694b8a74dd5599c0f9e236575f434faf05141d95803a91f044ed", + "attributes": { + "asset_type": "Crypto", + "base": "RAY", + "description": "RAYDIUM / US DOLLAR", + "display_symbol": "RAY/USD", + "generic_symbol": "RAYUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RAY/USD" + } + }, + { + "id": "60fd61b2d90eba47f281505a88869b66133d9dc58f203b019f5aa47f1b39343e", + "attributes": { + "asset_type": "Crypto", + "base": "RETH", + "description": "ROCKET POOL ETH / US DOLLAR", + "display_symbol": "RETH/USD", + "generic_symbol": "RETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RETH/USD" + } + }, + { + "id": "6b278cabb9304e2840c882eb758906f951d908d77b2bc2daf94833d51434c364", + "attributes": { + "asset_type": "Crypto", + "base": "TAIKO", + "description": "TAIKO / US DOLLAR", + "display_symbol": "TAIKO/USD", + "generic_symbol": "TAIKOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TAIKO/USD" + } + }, + { + "id": "af5099d1afbd0f56edf50939d40bd588495ad4a39a885d3511755fdbf3e2f5a7", + "attributes": { + "asset_type": "Crypto", + "base": "ZERO", + "description": "ZEROLEND / US DOLLAR", + "display_symbol": "ZERO/USD", + "generic_symbol": "ZEROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZERO/USD" + } + }, + { + "id": "672fbb7d9ec665cfbe8c2ffa643ba321a047b7a72d7b6d7c3d8fb120fc40954b", + "attributes": { + "asset_type": "Crypto", + "base": "SHIB", + "description": "SHIBA INU / US DOLLAR", + "display_symbol": "SHIB/USD", + "generic_symbol": "SHIBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SHIB/USD" + } + }, + { + "id": "432a849ea65824a2d4f18b7708533ff7f52156320714d0ad26404130f49a4ad9", + "attributes": { + "asset_type": "Equity", + "base": "SHV", + "cms_symbol": "SHV", + "country": "US", + "cqs_symbol": "SHV", + "description": "ISHARES SHORT TREASURY BOND ETF / US DOLLAR", + "display_symbol": "SHV/USD", + "nasdaq_symbol": "SHV", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.SHV/USD" + } + }, + { + "id": "dd51a67a1b4d0702abf5b5385631b7d3e586993eadacf2e0d900c0a81edcffdd", + "attributes": { + "asset_type": "Crypto", + "base": "SLND", + "description": "SOLEND / US DOLLAR", + "display_symbol": "SLND/USD", + "generic_symbol": "SLNDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SLND/USD" + } + }, + { + "id": "fe650f0367d4a7ef9815a593ea15d36593f0643aaaf0149bb04be67ab851decd", + "attributes": { + "asset_type": "Crypto", + "base": "SOL", + "description": "SOLANA / US DOLLAR", + "display_symbol": "SOL/USD", + "generic_symbol": "SOLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SOL/USD" + } + }, + { + "id": "cd69843b4eb5c5207dafbe82e2b08fb64107a56d2fa026cf260c6d5b8ae67a40", + "attributes": { + "asset_type": "Equity", + "base": "SPY", + "cms_symbol": "SPY", + "country": "US", + "cqs_symbol": "SPY", + "description": "SPDR S&P 500 ETF TRUST / US DOLLAR", + "display_symbol": "SPY/USD", + "nasdaq_symbol": "SPY", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.SPY/USD" + } + }, + { + "id": "7013db91897c09f4b4008dac0cc654ee492ce96648e78c5012ee22aef3109943", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "WEETH", + "contract_id": "eth: 0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee", + "description": "WRAPPED ETHER.FI STAKED ETH / ETHER.FI STAKED ETH REDEMPTION RATE", + "display_symbol": "WEETH/EETH", + "generic_symbol": "WEETHEETH", + "quote_currency": "EETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WEETH/EETH.RR" + } + }, + { + "id": "0b9c164fe24d3fcde513c7a5514a28bb0bcc1660ea4714c996d77d31142c331b", + "attributes": { + "asset_type": "Equity", + "base": "MSTR", + "cms_symbol": "MSTR", + "country": "US", + "cqs_symbol": "MSTR", + "description": "MICROSTRATEGY INC. - CLASS A / US DOLLAR", + "display_symbol": "MSTR/USD", + "nasdaq_symbol": "MSTR", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.MSTR/USD" + } + }, + { + "id": "b7abd25a76ddaffdf847224f03198ccb92723f90b2429cf33f0eecb96e352a86", + "attributes": { + "asset_type": "Crypto", + "base": "STETH", + "description": "LIDO STAKED ETH / US DOLLAR", + "display_symbol": "STETH/USD", + "generic_symbol": "SETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STETH/USD" + } + }, + { + "id": "0c6121e82becabf505f1eb6f4375dbe3a10f4906b70a3d1fecf082413bafeb3d", + "attributes": { + "asset_type": "Crypto", + "base": "BODEN", + "description": "JEO BODEN / US DOLLAR", + "display_symbol": "BODEN/USD", + "generic_symbol": "BODENUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BODEN/USD" + } + }, + { + "id": "b7944629cafb67b555f26fcf97577714a09a09eb258212eeb96ab1d81f11e296", + "attributes": { + "asset_type": "Crypto", + "base": "TURBO", + "description": "TURBO / US DOLLAR", + "display_symbol": "TURBO/USD", + "generic_symbol": "TURBOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TURBO/USD" + } + }, + { + "id": "b1aefa3f44ebcf391c08a287d30faaab7d34958284cb6cb67efc7c22d8deda20", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "VSOL", + "contract_id": "sol: Fu9BYC6tWBo1KMKaP3CFoKfRhqv9akmy3DuYwnCyWiyC", + "description": "THE VAULT STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "VSOL/SOL", + "generic_symbol": "VSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.VSOL/SOL.RR" + } + }, + { + "id": "ed0899e3a021f1e59031ad365bb3014d78f9ba5556e263692d3508b9272daabf", + "attributes": { + "asset_type": "Crypto", + "base": "BUCK", + "description": "BUCKET PROTOCOL BUCK STABLECOIN / US DOLLAR", + "display_symbol": "BUCK/USD", + "generic_symbol": "BUCKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BUCK/USD" + } + }, + { + "id": "8c22a8c0727e9087dc4514f4f9e78d1dd6250fa0f069593fa415ff3c3e9d0bcb", + "attributes": { + "asset_type": "Crypto", + "base": "AERO", + "description": "AERODROME FINANCE / US DOLLAR", + "display_symbol": "AERO/USD", + "generic_symbol": "AEROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AERO/USD" + } + }, + { + "id": "318e9f183dbc7333461fd7eb62c954872cf863c46bd09ca56887df525e40279a", + "attributes": { + "asset_type": "Crypto", + "base": "THETA", + "description": "THETA NETWORK / US DOLLAR", + "display_symbol": "THETA/USD", + "generic_symbol": "THTAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.THETA/USD" + } + }, + { + "id": "3bd6f0fe1d2ae1f396babe23d5313b74bb1e85cddaad74b3349b6431cf093c58", + "attributes": { + "asset_type": "Crypto", + "base": "ETHFI", + "description": "ETHER.FI / US DOLLAR", + "display_symbol": "ETHFI/USD", + "generic_symbol": "ETHFIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ETHFI/USD" + } + }, + { + "id": "22d37021bbcf3a9bf87a4ba1c77af15cb8ae80b42c524302e5c4cecb20bba226", + "attributes": { + "asset_type": "Crypto", + "base": "DEGEN", + "description": "DEGEN (BASE) / US DOLLAR", + "display_symbol": "DEGEN/USD", + "generic_symbol": "DEGENUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DEGEN/USD" + } + }, + { + "id": "1f54ee448dd8126174014a7fe3c354a3c9836615802480c196ea01f73b5ad5e6", + "attributes": { + "asset_type": "Equity", + "base": "TLT", + "cms_symbol": "TLT", + "country": "US", + "cqs_symbol": "TLT", + "description": "ISHARES 20+ YEAR TREASURY BOND ETF / US DOLLAR", + "display_symbol": "TLT/USD", + "nasdaq_symbol": "TLT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.TLT/USD" + } + }, + { + "id": "7ca28037f63a175cfca36a878be6b5d47d87b2dd677efb8e22f70865d9ff3a6d", + "attributes": { + "asset_type": "Equity", + "base": "TRV", + "cms_symbol": "TRV", + "country": "US", + "cqs_symbol": "TRV", + "description": "TRAVELERS COMPANIES INC / US DOLLAR", + "display_symbol": "TRV/USD", + "nasdaq_symbol": "TRV", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.TRV/USD" + } + }, + { + "id": "7dac7cafc583cc4e1ce5c6772c444b8cd7addeecd5bedb341dfa037c770ae71e", + "attributes": { + "asset_type": "Equity", + "base": "TSLA", + "cms_symbol": "TSLA", + "country": "US", + "cqs_symbol": "TSLA", + "description": "TESLA INC / US DOLLAR", + "display_symbol": "TSLA/USD", + "nasdaq_symbol": "TSLA", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.TSLA/USD" + } + }, + { + "id": "1bd1c59cd425aebf8a931c1b2a902b9a11e7d18dc68021e4a35a5cf24220a6c7", + "attributes": { + "asset_type": "Crypto", + "base": "TUSD", + "description": "TRUEUSD / US DOLLAR", + "display_symbol": "TUSD/USD", + "generic_symbol": "TUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TUSD/USD" + } + }, + { + "id": "577b331acfc8f86c171ad5ac6b2e580b10df39af0131ce6808628e44e3b77a66", + "attributes": { + "asset_type": "Equity", + "base": "UNH", + "cms_symbol": "UNH", + "country": "US", + "cqs_symbol": "UNH", + "description": "UNITEDHEALTH GROUP INC / US DOLLAR", + "display_symbol": "UNH/USD", + "nasdaq_symbol": "UNH", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.UNH/USD" + } + }, + { + "id": "64ae1fc7ceacf2cd59bee541382ff3770d847e63c40eb6cf2413e7de5e93078a", + "attributes": { + "asset_type": "Crypto", + "base": "UNI", + "description": "UNISWAP / US DOLLAR", + "display_symbol": "UNI/USD", + "generic_symbol": "UNIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.UNI/USD" + } + }, + { + "id": "7b22e3f1dcd2afa868b6463b1bc0cefe39979dc2d3470e1837f0d4557be34f73", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / BRAZILIAN REAL", + "display_symbol": "USD/BRL", + "generic_symbol": "USDBRL", + "quote_currency": "BRL", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/BRL", + "tenor": "Spot" + } + }, + { + "id": "b762d257b4bbce7935a8251b3e060977cfab1ed21770e8b431beff4cb7f41137", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / CANADIAN DOLLAR", + "display_symbol": "USD/CAD", + "generic_symbol": "USDCAD", + "quote_currency": "CAD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/CAD", + "tenor": "Spot" + } + }, + { + "id": "796d24444ff50728b58e94b1f53dc3a406b2f1ba9d0d0b91d4406c37491a6feb", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / SWISS FRANC", + "display_symbol": "USD/CHF", + "generic_symbol": "USDCHF", + "quote_currency": "CHF", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/CHF", + "tenor": "Spot" + } + }, + { + "id": "c7bdaa960b886927325f02f0e4d5db19c179d066f762906f803096c336a4462a", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / CHINESE YUAN OFFSHORE", + "display_symbol": "USD/CNH", + "generic_symbol": "USDCNH", + "quote_currency": "CNH", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/CNH", + "tenor": "Spot" + } + }, + { + "id": "41f3625971ca2ed2263e78573fe5ce23e13d2558ed3f2e47ab0f84fb9e7ae722", + "attributes": { + "asset_type": "Crypto", + "base": "USDC", + "description": "USD COIN / US DOLLAR", + "display_symbol": "USDC/USD", + "generic_symbol": "USDCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDC/USD" + } + }, + { + "id": "96f29ee40cd494a9f1f154ebd8300e93568b18a01a19a6c3890895718a57e984", + "attributes": { + "asset_type": "Crypto", + "base": "USDD", + "description": "USDD / US DOLLAR", + "display_symbol": "USDD/USD", + "generic_symbol": "USDDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDD/USD" + } + }, + { + "id": "d5e01ddc49e0b46138b7eb47f24219f3e32c0d0e644649ceb4eef921b9c5a919", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / HONG KONG DOLLAR", + "display_symbol": "USD/HKD", + "generic_symbol": "USDHKD", + "quote_currency": "HKD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/HKD", + "tenor": "Spot" + } + }, + { + "id": "20a938f54b68f1f2ef18ea0328f6dd0747f8ea11486d22b021e83a900be89776", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / JAPANESE YEN", + "display_symbol": "USD/JPY", + "generic_symbol": "USDJPY", + "quote_currency": "JPY", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/JPY", + "tenor": "Spot" + } + }, + { + "id": "c15af424d245edeee0ec072dc94c639443b2ae4bb0ac1204e3ca4802f311960d", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / MEXICAN PESO", + "display_symbol": "USD/MXN", + "generic_symbol": "USDMXN", + "quote_currency": "MXN", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/MXN", + "tenor": "Spot" + } + }, + { + "id": "587a8fcb91ffb1e7325ca5ea83633271467a7d277a442ff3cb38e981b1eacb41", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / NORWEGIAN KRONE", + "display_symbol": "USD/NOK", + "generic_symbol": "USDNOK", + "quote_currency": "NOK", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/NOK", + "tenor": "Spot" + } + }, + { + "id": "abb2661c87ecac9f93eade3dd089dbb6e9eb4083eba3b35371ee6f8fa1133752", + "attributes": { + "asset_type": "Crypto", + "base": "VSUI", + "description": "VOLO STAKED SUI / US DOLLAR", + "display_symbol": "VSUI/USD", + "generic_symbol": "VSUIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.VSUI/USD" + } + }, + { + "id": "aa3761fac23cd01faf71a5865f50748ab58afe045041dd95051b004652c726e7", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / SWEDISH KRONA", + "display_symbol": "USD/SEK", + "generic_symbol": "USDSEK", + "quote_currency": "SEK", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/SEK", + "tenor": "Spot" + } + }, + { + "id": "6256c91c19cfbbfc6f91e1fd15c028a26be1f78bb59ac9f7250cbb67f9e5b964", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / SINGAPORE DOLLAR", + "display_symbol": "USD/SGD", + "generic_symbol": "USDSGD", + "quote_currency": "SGD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/SGD", + "tenor": "Spot" + } + }, + { + "id": "1fc18861232290221461220bd4e2acd1dcdfbc89c84092c93c18bdc7756c1588", + "attributes": { + "asset_type": "Crypto", + "base": "USDT", + "description": "TETHER / US DOLLAR", + "display_symbol": "USDT/USD", + "generic_symbol": "USDTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDT/USD" + } + }, + { + "id": "ff0ec26442c57d7456695b843694e7379b15cf1b250b27e0e47e657f1955aaff", + "attributes": { + "asset_type": "FX", + "base": "USD", + "description": "US DOLLAR / SOUTH AFRICAN RAND", + "display_symbol": "USD/ZAR", + "generic_symbol": "USDZAR", + "quote_currency": "ZAR", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "FX.USD/ZAR", + "tenor": "Spot" + } + }, + { + "id": "d5b3be475e19733cedadd74fc619372b553745eab050b935af6a331d29354941", + "attributes": { + "asset_type": "Equity", + "base": "USO", + "cms_symbol": "USO", + "country": "US", + "cqs_symbol": "USO", + "description": "UNITED STATES OIL FUND LP / US DOLLAR", + "display_symbol": "USO/USD", + "nasdaq_symbol": "USO", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.USO/USD" + } + }, + { + "id": "026d1f1cf9f1c0ee92eb55696d3bd2393075b611c4f468ae5b967175edc4c25c", + "attributes": { + "asset_type": "Crypto", + "base": "USTC", + "description": "TERRA CLASSIC USD / US DOLLAR", + "display_symbol": "USTC/USD", + "generic_symbol": "USTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USTC/USD" + } + }, + { + "id": "6cdc09f443fe8ed53517b9760b0674d054e719de9b83cba1bbb02c2439448590", + "attributes": { + "asset_type": "Equity", + "base": "V", + "cms_symbol": "V", + "country": "US", + "cqs_symbol": "V", + "description": "VISA INC / US DOLLAR", + "display_symbol": "V/USD", + "nasdaq_symbol": "V", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.V/USD" + } + }, + { + "id": "946292ad3f481f36f5e558726cf4974e2a7a34598bf15d2abe3619e7b6a8db91", + "attributes": { + "asset_type": "Crypto", + "base": "NAVX", + "description": "NAVI PROTOCOL / US DOLLAR", + "display_symbol": "NAVX/USD", + "generic_symbol": "NAVXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.NAVX/USD" + } + }, + { + "id": "80e17c0e489956493ed84e4af202031c38cb7d310c5f154134cd0ff39ac6101b", + "attributes": { + "asset_type": "Equity", + "base": "VOO", + "cms_symbol": "VOO", + "country": "US", + "cqs_symbol": "VOO", + "description": "VANGUARD S&P 500 ETF / US DOLLAR", + "display_symbol": "VOO/USD", + "nasdaq_symbol": "VOO", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.VOO/USD" + } + }, + { + "id": "b5b88d45d3053431b7c49031e7a4c3de19bf2159dc7502e69d582ffe183d6073", + "attributes": { + "asset_type": "Equity", + "base": "VZ", + "cms_symbol": "VZ", + "country": "US", + "cqs_symbol": "VZ", + "description": "VERIZON COMMUNICATIONS INC / US DOLLAR", + "display_symbol": "VZ/USD", + "nasdaq_symbol": "VZ", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.VZ/USD" + } + }, + { + "id": "be2c316abe4133b60602db548a0cc9045c533bedc7759df98cf3a9274c5c6f93", + "attributes": { + "asset_type": "Equity", + "base": "WBA", + "cms_symbol": "WBA", + "country": "US", + "cqs_symbol": "WBA", + "description": "WALGREENS BOOTS ALLIANCE INC / US DOLLAR", + "display_symbol": "WBA/USD", + "nasdaq_symbol": "WBA", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.WBA/USD" + } + }, + { + "id": "12ec16885dc4310530a8f7e360ed39160a0d7c30eeb6087e3b6c6bad71b74f95", + "attributes": { + "asset_type": "Crypto", + "base": "MEW", + "description": "CAT IN A DOGS WORLD / US DOLLAR", + "display_symbol": "MEW/USD", + "generic_symbol": "MEWUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MEW/USD" + } + }, + { + "id": "e157999f282bb939e943724620a60af4ea9b0078f34499b840c65bee0c81cef5", + "attributes": { + "asset_type": "Equity", + "base": "WMT", + "cms_symbol": "WMT", + "country": "US", + "cqs_symbol": "WMT", + "description": "WALMART INC / US DOLLAR", + "display_symbol": "WMT/USD", + "nasdaq_symbol": "WMT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.WMT/USD" + } + }, + { + "id": "68bd4b3c889eb5ff8c56eed05781f68f3a931d6a1ee5a744d041d70b87e2900c", + "attributes": { + "asset_type": "Crypto", + "base": "WOM", + "description": "WOMBAT EXCHANGE / US DOLLAR", + "display_symbol": "WOM/USD", + "generic_symbol": "WOMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WOM/USD" + } + }, + { + "id": "bf517e0f7ccfc307f0b2fa93b99a737641933989af6af769c928725989c21e66", + "attributes": { + "asset_type": "Crypto", + "base": "WOO", + "description": "WOO NETWORK / US DOLLAR", + "display_symbol": "WOO/USD", + "generic_symbol": "WOOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WOO/USD" + } + }, + { + "id": "321ba4d608fa75ba76d6d73daa715abcbdeb9dba02257f05a1b59178b49f599b", + "attributes": { + "asset_type": "Metal", + "base": "XAG", + "description": "SILVER / US DOLLAR", + "display_symbol": "XAG/USD", + "generic_symbol": "XAGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "Metal.XAG/USD", + "tenor": "Spot" + } + }, + { + "id": "30a19158f5a54c0adf8fb7560627343f22a1bc852b89d56be1accdc5dbf96d0e", + "attributes": { + "asset_type": "Metal", + "base": "XAU", + "description": "GOLD / US DOLLAR", + "display_symbol": "XAU/USD", + "generic_symbol": "XAUUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,0000-1700,C,1700-2400;1224/0000-1700,1225/1700-2400,1231/0000-1700,0101/1700-2400", + "symbol": "Metal.XAU/USD", + "tenor": "Spot" + } + }, + { + "id": "31775e1d6897129e8a84eeba975778fb50015b88039e9bc140bbd839694ac0ae", + "attributes": { + "asset_type": "Crypto", + "base": "DOGE", + "description": "DOGECOIN / US DOLLAR", + "display_symbol": "DOGE/USD", + "generic_symbol": "XDGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DOGE/USD" + } + }, + { + "id": "bc00d79f11e851e9763b0951338474dd423f40f51ef6a24d2b0806f341382b0c", + "attributes": { + "asset_type": "Equity", + "base": "XLE", + "cms_symbol": "XLE", + "country": "US", + "cqs_symbol": "XLE", + "description": "ENERGY SELECT SECTOR SPDR FUND / US DOLLAR", + "display_symbol": "XLE/USD", + "nasdaq_symbol": "XLE", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.XLE/USD" + } + }, + { + "id": "a7e2e2f7d47b17d18e6d49c427f21fb30c0a85e621a8502c3c4e486f3ab543c8", + "attributes": { + "asset_type": "Crypto", + "base": "XMR", + "description": "MONERO / US DOLLAR", + "display_symbol": "XMR/USD", + "generic_symbol": "XMRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XMR/USD" + } + }, + { + "id": "6d3aab530ea3cbc160683b353ca7df3c8a4c78633414ba3df67d5a4b0948ec54", + "attributes": { + "asset_type": "Crypto", + "base": "BOME", + "description": "BOOK OF MEME / US DOLLAR", + "display_symbol": "BOME/USD", + "generic_symbol": "BOMEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BOME/USD" + } + }, + { + "id": "6cd5c99c6d86df928b0562f26617ddef400818f8907391f3087965e6b786b0b3", + "attributes": { + "asset_type": "Crypto", + "base": "ANKR", + "description": "ANKR NETWORK / US DOLLAR", + "display_symbol": "ANKR/USD", + "generic_symbol": "ANKRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ANKR/USD" + } + }, + { + "id": "37f40d2898159e8f2e52b93cb78f47cc3829a31e525ab975c49cc5c5d9176378", + "attributes": { + "asset_type": "Crypto", + "base": "ARB", + "description": "ARBITRUM / US DOLLAR", + "display_symbol": "ARB/USD", + "generic_symbol": "ARBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ARB/USD" + } + }, + { + "id": "f3295ef1efc8cb94518faade282e294e718dc65a03aa3b7912b894e61e0a6634", + "attributes": { + "asset_type": "Crypto", + "base": "BAL", + "description": "BALANCER / US DOLLAR", + "display_symbol": "BAL/USD", + "generic_symbol": "BALUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BAL/USD" + } + }, + { + "id": "44b948f5d3f5ad7e24e1aacca13872c1bd5ebcc106a44cc70a0f4c6aec2c564a", + "attributes": { + "asset_type": "Crypto", + "base": "BAT", + "description": "BASIC ATTENTION / US DOLLAR", + "display_symbol": "BAT/USD", + "generic_symbol": "BATUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BAT/USD" + } + }, + { + "id": "be2dbc97659e92bf07462aeda414195246515e6b17abd6997f0ab2297cb03e1d", + "attributes": { + "asset_type": "Crypto", + "base": "BLUR", + "description": "BLUR / US DOLLAR", + "display_symbol": "BLUR/USD", + "generic_symbol": "BLURUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BLUR/USD" + } + }, + { + "id": "d999afda91920097eed20eac02e68b9dfa0b8c798d5c7cd24f74a694c2126165", + "attributes": { + "asset_type": "Crypto", + "base": "CANTO", + "description": "CANTO / US DOLLAR", + "display_symbol": "CANTO/USD", + "generic_symbol": "CANTOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CANTO/USD" + } + }, + { + "id": "eba2144f04b3af59382d92b8cbc3170008b4a2945a01f36e81f92dfdeb8cc519", + "attributes": { + "asset_type": "Crypto", + "base": "CFX", + "description": "CONFLUX / US DOLLAR", + "display_symbol": "CFX/USD", + "generic_symbol": "CFXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CFX/USD" + } + }, + { + "id": "5a035d5440f5c163069af66062bac6c79377bf88396fa27e6067bfca8096d280", + "attributes": { + "asset_type": "Crypto", + "base": "EVMOS", + "description": "EVMOS / US DOLLAR", + "display_symbol": "EVMOS/USD", + "generic_symbol": "EVMOSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EVMOS/USD" + } + }, + { + "id": "b5622d32f36dc820af288aab779133ef1205d3123bbe256603849b820de48b87", + "attributes": { + "asset_type": "Crypto", + "base": "FIL", + "description": "FILECOIN / US DOLLAR", + "display_symbol": "FIL/USD", + "generic_symbol": "FILUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FIL/USD" + } + }, + { + "id": "a46737d6e4686b9cddd59725c9564f851aae93efa37c52f46d9fbcbe03d0344d", + "attributes": { + "asset_type": "Crypto", + "base": "FRAX", + "description": "FRAX / US DOLLAR", + "display_symbol": "FRAX/USD", + "generic_symbol": "FRAXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FRAX/USD" + } + }, + { + "id": "4b57c2471f6ab9250d26b7e0ff8807bfd620a609503f52b0b67645f69eb2d5c5", + "attributes": { + "asset_type": "Crypto", + "base": "GMX", + "description": "GMX / US DOLLAR", + "display_symbol": "GMX/USD", + "generic_symbol": "GMXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GMX/USD" + } + }, + { + "id": "312106929adaffd2e1a1098603ffd30ecd6c6fe7861faae6bc81b0e30f4adfe8", + "attributes": { + "asset_type": "Crypto", + "base": "GNS", + "description": "GAINS NETWORK / US DOLLAR", + "display_symbol": "GNS/USD", + "generic_symbol": "GNSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GNS/USD" + } + }, + { + "id": "229d6d6e7d6411aac146f6e632ddbc0ce783ddbc5a24f573a2d62e61d6405c9f", + "attributes": { + "asset_type": "Crypto", + "base": "USDB", + "description": "BLAST STABLECOIN / US DOLLAR", + "display_symbol": "USDB/USD", + "generic_symbol": "USDBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDB/USD" + } + }, + { + "id": "99137a18354efa7fb6840889d059fdb04c46a6ce21be97ab60d9ad93e91ac758", + "attributes": { + "asset_type": "Crypto", + "base": "HFT", + "description": "HASHFLOW / US DOLLAR", + "display_symbol": "HFT/USD", + "generic_symbol": "HFTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HFT/USD" + } + }, + { + "id": "570b0d8b1874762f45775332a23e7c153c0db9cd77e574ae5f698453a26ca593", + "attributes": { + "asset_type": "Crypto", + "base": "IOTA", + "description": "IOTA MOTA / US DOLLAR", + "display_symbol": "IOTA/USD", + "generic_symbol": "IOTAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.IOTA/USD" + } + }, + { + "id": "69b9ca2e7159fe570844c22bac849c490e0ddfd0349626c19fd7d65509e192a3", + "attributes": { + "asset_type": "Crypto", + "base": "LDO", + "description": "LIDO DAO / US DOLLAR", + "display_symbol": "LDO/USD", + "generic_symbol": "LDOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LDO/USD" + } + }, + { + "id": "8fece987ff24a0a7ec4d87c29d337e7b54989663536b73883ae8387589cfea2d", + "attributes": { + "asset_type": "Crypto", + "base": "MTR", + "description": "METER STABLE / US DOLLAR", + "display_symbol": "MTR/USD", + "generic_symbol": "MTRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MTR/USD" + } + }, + { + "id": "a5fd90e292644d5f9b79a1640f464fcae4b8cb925465d197a78185a308603606", + "attributes": { + "asset_type": "Crypto", + "base": "MTRG", + "description": "METER GOVERNANCE / US DOLLAR", + "display_symbol": "MTRG/USD", + "generic_symbol": "MTRGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MTRG/USD" + } + }, + { + "id": "d9437c194a4b00ba9d7652cd9af3905e73ee15a2ca4152ac1f8d430cc322b857", + "attributes": { + "asset_type": "Crypto", + "base": "OSMO", + "description": "OSMOSIS / US DOLLAR", + "display_symbol": "OSMO/USD", + "generic_symbol": "OSMOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.OSMO/USD" + } + }, + { + "id": "f26cf0b5c71699e81f59384824c71b8cdcc29ce409f3e6934c8c18abe652a04f", + "attributes": { + "asset_type": "Crypto", + "base": "PERP", + "description": "PERPETUAL PROTOCOL / US DOLLAR", + "display_symbol": "PERP/USD", + "generic_symbol": "PERPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PERP/USD" + } + }, + { + "id": "4d0c5744a741196b5c2ff74b8f3bde242407f2ffb40104347dcff3421eaea07f", + "attributes": { + "asset_type": "Crypto", + "base": "RLB", + "description": "ROLLBIT COIN / US DOLLAR", + "display_symbol": "RLB/USD", + "generic_symbol": "RLBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RLB/USD" + } + }, + { + "id": "e09298255394baa5bcad40dcaf6c8050b63ef5da7b997d075318278ba8f2e477", + "attributes": { + "asset_type": "Crypto", + "base": "SAMO", + "description": "SAMOYEDCOIN / US DOLLAR", + "display_symbol": "SAMO/USD", + "generic_symbol": "SAMOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SAMO/USD" + } + }, + { + "id": "d952c751e36d6113f62ec2bb1679be4ac69d684b33224fa305644010f7c44aa4", + "attributes": { + "asset_type": "Crypto", + "base": "SMR", + "description": "SHIMMER / US DOLLAR", + "display_symbol": "SMR/USD", + "generic_symbol": "SMRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SMR/USD" + } + }, + { + "id": "e956a4199936e913b402474cb29576066f15108121d434606a19b34036e6d5cc", + "attributes": { + "asset_type": "Crypto", + "base": "SNX", + "description": "SYNTHETIX NETWORK / US DOLLAR", + "display_symbol": "SNX/USD", + "generic_symbol": "SNXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SNX/USD" + } + }, + { + "id": "c2dec53d44e1fcc69b96f72c2d0a73080c328a0c6ac74bac9f575e7afbf6884b", + "attributes": { + "asset_type": "Crypto", + "base": "SPELL", + "description": "SPELL / US DOLLAR", + "display_symbol": "SPELL/USD", + "generic_symbol": "SPELLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SPELL/USD" + } + }, + { + "id": "e4f18eb4bd03fc316e0affa5c829d8b307315e1bee8b4f7907b3c045be238130", + "attributes": { + "asset_type": "Equity", + "base": "HYG", + "cms_symbol": "HYG", + "country": "US", + "cqs_symbol": "HYG", + "description": "ISHARES IBOXX $ HIGH YIELD CORPORATE BOND ETF / US DOLLAR", + "display_symbol": "HYG/USD", + "nasdaq_symbol": "HYG", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.HYG/USD" + } + }, + { + "id": "057aef33dd5ca9b91bef92c6aee08bca76565934008ed3c8d55e382ed17fb883", + "attributes": { + "asset_type": "Equity", + "base": "META", + "cms_symbol": "META", + "country": "US", + "cqs_symbol": "META", + "description": "META PLATFORMS INC / US DOLLAR", + "display_symbol": "META/USD", + "nasdaq_symbol": "META", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.META/USD" + } + }, + { + "id": "bfaf7739cb6fe3e1c57a0ac08e1d931e9e6062d476fa57804e165ab572b5b621", + "attributes": { + "asset_type": "Crypto", + "base": "XRP", + "description": "RIPPLE / US DOLLAR", + "display_symbol": "XRP/USD", + "generic_symbol": "XRPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XRP/USD" + } + }, + { + "id": "e13490529898ba044274027323a175105d89bc43c2474315c76a051ba02d76f8", + "attributes": { + "asset_type": "Rates", + "description": "US10Y YIELD - OTR", + "display_symbol": "US10Y %", + "generic_symbol": "US10Y", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US10Y" + } + }, + { + "id": "49e9e8574bd7fcbd294e4a94057c7ed7fac1402f5960470cd8a12ee63df186e3", + "attributes": { + "asset_type": "Rates", + "description": "US1M YIELD - OTR", + "display_symbol": "US1M %", + "generic_symbol": "US1M", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US1M" + } + }, + { + "id": "ff1196f6b85d274dcc2608b6974f2781b9757ecd25ecc9f08a44ae13071b2ebf", + "attributes": { + "asset_type": "Rates", + "description": "US2Y YIELD - OTR", + "display_symbol": "US2Y %", + "generic_symbol": "US2Y", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US2Y" + } + }, + { + "id": "32f2d7d2c0cc235012cbc5e92270f4f1e01b1dbc913f80733dcd88016440ac2f", + "attributes": { + "asset_type": "Rates", + "description": "US3M YIELD - OTR", + "display_symbol": "US3M %", + "generic_symbol": "US3M", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US3M" + } + }, + { + "id": "00d1e4ef2cef8626de09035298b4763cac85567b03ae6534098c7914992339cd", + "attributes": { + "asset_type": "Rates", + "description": "US5Y YIELD - OTR", + "display_symbol": "US5Y %", + "generic_symbol": "US5Y", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US5Y" + } + }, + { + "id": "7092f3445078c8bc4220e2c6e8b238d6691afa3a9f485bcc644d1f725c85f5ea", + "attributes": { + "asset_type": "Rates", + "description": "US6M YIELD - OTR", + "display_symbol": "US6M %", + "generic_symbol": "US6M", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US6M" + } + }, + { + "id": "2f32dfc72942edb002af80986a1e3d6d405193ef59e3d5ee5f7986c0d6655b1e", + "attributes": { + "asset_type": "Rates", + "description": "US7Y YIELD - OTR", + "display_symbol": "US7Y %", + "generic_symbol": "US7Y", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US7Y" + } + }, + { + "id": "f3030274adc132e3a31d43dd7f56ac82ae9d673aa0c15a0ce15455a9d00434e6", + "attributes": { + "asset_type": "Rates", + "description": "US30Y YIELD - OTR", + "display_symbol": "US30Y %", + "generic_symbol": "US30Y", + "schedule": "America/New_York;0800-1700,0800-1700,0800-1700,0800-1700,0800-1700,C,C;1224/0800-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Rates.US30Y" + } + }, + { + "id": "ed82efbfade01083ffa8f64664c86af39282c9f084877066ae72b635e77718f0", + "attributes": { + "asset_type": "Crypto", + "base": "PEPE", + "description": "PEPE / US DOLLAR", + "display_symbol": "PEPE/USD", + "generic_symbol": "PEPEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PEPE/USD" + } + }, + { + "id": "caf0acd3a8849e1100a737f5dd3890efe1e7a574a9c69e230addb3d41dd859c2", + "attributes": { + "asset_type": "Crypto", + "base": "WOJAK", + "description": "WOJAK / US DOLLAR", + "display_symbol": "WOJAK/USD", + "generic_symbol": "WOJAKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WOJAK/USD" + } + }, + { + "id": "e4973bd7bb2b8b78dd63af491582952e28f642a5b26cb2455826e201ae762bf7", + "attributes": { + "asset_type": "Crypto", + "base": "IOT", + "description": "HELIUM IOT / US DOLLAR", + "display_symbol": "IOT/USD", + "generic_symbol": "IOTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.IOT/USD" + } + }, + { + "id": "c8dc7dbfae6aa1a1f0feccefb1fb82fc38ba18d1d0d62380272d53a879c1df87", + "attributes": { + "asset_type": "Crypto", + "base": "MNDE", + "description": "MARINADE / US DOLLAR", + "display_symbol": "MNDE/USD", + "generic_symbol": "MNDEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MNDE/USD" + } + }, + { + "id": "9ff9aca7ac05dd6725aa169e643c82a34d9061eaead7bb759192cf784bcb20af", + "attributes": { + "asset_type": "Crypto", + "base": "MOBILE", + "description": "HELIUM MOBILE / US DOLLAR", + "display_symbol": "MOBILE/USD", + "generic_symbol": "MOBILEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MOBILE/USD" + } + }, + { + "id": "013317758a5b499650d72edcd7ba12bb5cc54ce9434196b607fa5e01e0f7797b", + "attributes": { + "asset_type": "Crypto", + "base": "TRX", + "description": "TRON / US DOLLAR", + "display_symbol": "TRX/USD", + "generic_symbol": "TRXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TRX/USD" + } + }, + { + "id": "e76e307abc63a0fe6a6cd8bec83a23997aae27b5a91459c3d73b2cf20abf7430", + "attributes": { + "asset_type": "Crypto", + "base": "WAVES", + "description": "WAVES / US DOLLAR", + "display_symbol": "WAVES/USD", + "generic_symbol": "WAVESUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WAVES/USD" + } + }, + { + "id": "72fe21b4ba5661f194b5f17bfadcc59eddd3e0e53198d040e5091c6dfb558108", + "attributes": { + "asset_type": "Crypto", + "base": "AXL", + "description": "AXELAR / US DOLLAR", + "display_symbol": "AXL/USD", + "generic_symbol": "AXLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AXL/USD" + } + }, + { + "id": "ee0c08f6b500a5933e95f75169dcd8910d9ff8d4acc6d07c9f577113a2387b9c", + "attributes": { + "asset_type": "Crypto", + "base": "MOVE", + "description": "MOVEMENT / US DOLLAR", + "display_symbol": "MOVE/USD", + "generic_symbol": "MOVEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MOVE/USD" + } + }, + { + "id": "cb324dafd531712dd31c39969ae0246ee4c6ae167257bcf8ac27e28ca35e6a0c", + "attributes": { + "asset_type": "Crypto", + "base": "CETUS", + "description": "CETUS PROTOCOL / US DOLLAR", + "display_symbol": "CETUS/USD", + "generic_symbol": "CETUSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CETUS/USD" + } + }, + { + "id": "f53898175dc626f78e6ac049f47bad2afb516cf102ebb3edfa04e2d1c6147618", + "attributes": { + "asset_type": "Crypto", + "base": "GRAIL", + "description": "CAMELOT TOKEN / US DOLLAR", + "display_symbol": "GRAIL/USD", + "generic_symbol": "GRAILUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GRAIL/USD" + } + }, + { + "id": "bf8bcb308fba8c8e78fcfda6ca73061e1d4ee63b1200493f81ee19e643f5cf0b", + "attributes": { + "asset_type": "Crypto", + "base": "KAVA", + "description": "KAVA / US DOLLAR", + "display_symbol": "KAVA/USD", + "generic_symbol": "KAVAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.KAVA/USD" + } + }, + { + "id": "9c3abe6aa5e68f3125776b5367ff5eb6e3dfe2cbcb698c2c12abd949594c5147", + "attributes": { + "asset_type": "Crypto", + "base": "PRIME", + "description": "ECHELON PRIME / US DOLLAR", + "display_symbol": "PRIME/USD", + "generic_symbol": "PRIMEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PRIME/USD" + } + }, + { + "id": "0e47ed5970339fa822759bc97c2b697a1a45727888dfae9858971bbd3327e5c8", + "attributes": { + "asset_type": "Crypto", + "base": "SPA", + "description": "SPERAX / US DOLLAR", + "display_symbol": "SPA/USD", + "generic_symbol": "SPAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SPA/USD" + } + }, + { + "id": "c2703fcc925ad32b6256afc3ebad634970d1b1ffb3f4143e36b2d055b1dcd29b", + "attributes": { + "asset_type": "Crypto", + "base": "STX", + "description": "STACKS / US DOLLAR", + "display_symbol": "STX/USD", + "generic_symbol": "STXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STX/USD" + } + }, + { + "id": "19546a41867d2e2d5ff2c181524f71f618477244bb14fb28dd4c22885ba4d8e7", + "attributes": { + "asset_type": "Crypto", + "base": "TON", + "description": "TONCOIN / US DOLLAR", + "display_symbol": "TON/USD", + "generic_symbol": "TONUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TON/USD" + } + }, + { + "id": "3f545e3f4ec9fd8eb3b9d9d6071a1da361f6729fa1b93d1d1baca3379551d99e", + "attributes": { + "asset_type": "Crypto", + "base": "TURBOS", + "description": "TURBOS FINANCE / US DOLLAR", + "display_symbol": "TURBOS/USD", + "generic_symbol": "TURBOSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TURBOS/USD" + } + }, + { + "id": "334a4429edb95cd4a3455d5133bbb568f9013b3ecb68962c89ee99c8e24818ad", + "attributes": { + "asset_type": "Crypto", + "base": "XPRT", + "description": "PERSISTENCE / US DOLLAR", + "display_symbol": "XPRT/USD", + "generic_symbol": "XPRTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XPRT/USD" + } + }, + { + "id": "22d0b475cfe70ef0ff58d08efc3d72a78c7949d2c9f00dd1c8f8074e5bbf99e7", + "attributes": { + "asset_type": "Crypto", + "base": "SAND", + "description": "THE SANDBOX / US DOLLAR", + "display_symbol": "SAND/USD", + "generic_symbol": "SANDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SAND/USD" + } + }, + { + "id": "fd4712eb77ed09b64d09b63cd86f8343af561730ce089d6cc5dd5320f2098be9", + "attributes": { + "asset_type": "Equity", + "base": "ARKK", + "cms_symbol": "ARKK", + "country": "US", + "cqs_symbol": "ARKK", + "description": "ARK INNOVATION ETF / US DOLLAR", + "display_symbol": "ARKK/USD", + "nasdaq_symbol": "ARKK", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.ARKK/USD" + } + }, + { + "id": "577bde1ece4c8e091a11be1bce3de36aef1f259123449e752ca9e813d2d5b62b", + "attributes": { + "asset_type": "Equity", + "base": "EEM", + "cms_symbol": "EEM", + "country": "US", + "cqs_symbol": "EEM", + "description": "ISHARES MSCI EMERGING MARKETS ETF / US DOLLAR", + "display_symbol": "EEM/USD", + "nasdaq_symbol": "EEM", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.EEM/USD" + } + }, + { + "id": "eea89835d12d9b6286f2251c839c455ec31b6537c60b1f6c559b8478f4bfe107", + "attributes": { + "asset_type": "Equity", + "base": "GLD", + "cms_symbol": "GLD", + "country": "US", + "cqs_symbol": "GLD", + "description": "SPDR GOLD SHARES ETF / US DOLLAR", + "display_symbol": "GLD/USD", + "nasdaq_symbol": "GLD", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.GLD/USD" + } + }, + { + "id": "16e38262485de554be6a09b0c1d4d86eb2151a7af265f867d769dee359cec32e", + "attributes": { + "asset_type": "Equity", + "base": "NVDA", + "cms_symbol": "NVDA", + "country": "US", + "cqs_symbol": "NVDA", + "description": "NVIDIA CORP / US DOLLAR", + "display_symbol": "NVDA/USD", + "nasdaq_symbol": "NVDA", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.NVDA/USD" + } + }, + { + "id": "9f8571f9844fb0987ee453ba743255fc26a28f25b0273f2ea708c2cc32c5d10b", + "attributes": { + "asset_type": "Equity", + "base": "BLK", + "cms_symbol": "BLK", + "country": "US", + "cqs_symbol": "BLK", + "description": "BLACKROCK INC / US DOLLAR", + "display_symbol": "BLK/USD", + "nasdaq_symbol": "BLK", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BLK/USD" + } + }, + { + "id": "c9606d7045eeb402289a7892cc57aa6087d8cbe3c6c195536f1aaf3f0e86801e", + "attributes": { + "asset_type": "Equity", + "base": "CPNG", + "cms_symbol": "CPNG", + "country": "US", + "cqs_symbol": "CPNG", + "description": "COUPANG INC - CLASS A / US DOLLAR", + "display_symbol": "CPNG/USD", + "nasdaq_symbol": "CPNG", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.CPNG/USD" + } + }, + { + "id": "a36c0b485ebb9bbaf0d182d8208e7a2c2ae138e69f47712085d4166f1c847dbb", + "attributes": { + "asset_type": "Equity", + "base": "AI", + "cms_symbol": "AI", + "country": "US", + "cqs_symbol": "AI", + "description": "C3.AI INC / US DOLLAR", + "display_symbol": "AI/USD", + "nasdaq_symbol": "AI", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.AI/USD" + } + }, + { + "id": "ab190eb0297743756205bf59319ba407bd94dbf99dbfe62e8ef6566f13a2d8e4", + "attributes": { + "asset_type": "Crypto", + "base": "WEMIX", + "description": "WEMIX / US DOLLAR", + "display_symbol": "WEMIX/USD", + "generic_symbol": "WEMIXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WEMIX/USD" + } + }, + { + "id": "d45b6d47bf43faa700e6f6fec4f8989fcc80eabb2f2eff862d7258d60026d1b5", + "attributes": { + "asset_type": "Crypto", + "base": "MNT", + "description": "MANTLE / US DOLLAR", + "display_symbol": "MNT/USD", + "generic_symbol": "MNTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MNT/USD" + } + }, + { + "id": "8c0a51ffe78225c7ee6fe41f25845ebe03ec6d4a074f57be6790e202f81aa939", + "attributes": { + "asset_type": "Crypto", + "base": "BAND", + "description": "BAND / US DOLLAR", + "display_symbol": "BAND/USD", + "generic_symbol": "BANDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BAND/USD" + } + }, + { + "id": "2b4797ce530ada17b8c72586290706d0d8f6302fb67b808ab61509f5432e85ee", + "attributes": { + "asset_type": "Crypto", + "base": "CELR", + "description": "CELER / US DOLLAR", + "display_symbol": "CELR/USD", + "generic_symbol": "CELRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CELR/USD" + } + }, + { + "id": "4e149083ba3766e716b77c1a6f7744709a075bed2ac08dc485543616454a6404", + "attributes": { + "asset_type": "Crypto", + "base": "COMP", + "description": "COMPOUND / US DOLLAR", + "display_symbol": "COMP/USD", + "generic_symbol": "COMPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.COMP/USD" + } + }, + { + "id": "5107e4bc7b44831306baac8ea821fb5019dcfd179d72e9cf29180a970c6a2a8c", + "attributes": { + "asset_type": "Crypto", + "base": "CTSI", + "description": "CARTESI / US DOLLAR", + "display_symbol": "CTSI/USD", + "generic_symbol": "CTSIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CTSI/USD" + } + }, + { + "id": "3016ac46e4eff9d176fc550a46b13ed402807a74f0c5681847ee457ce54025e1", + "attributes": { + "asset_type": "Crypto", + "base": "EGLD", + "description": "MULTIVERSX / US DOLLAR", + "display_symbol": "EGLD/USD", + "generic_symbol": "EGLDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EGLD/USD" + } + }, + { + "id": "e974bc2bee67685ba3e58fc38b1d61578a1ce7703a1f3eb66bd304f8dce89147", + "attributes": { + "asset_type": "Crypto", + "base": "ENJ", + "description": "ENJIN / US DOLLAR", + "display_symbol": "ENJ/USD", + "generic_symbol": "ENJUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ENJ/USD" + } + }, + { + "id": "67f0ce7248a5e8ec8e83020a9e8b5a6e34259efbb459fc1ba57cd7b6929329db", + "attributes": { + "asset_type": "Crypto", + "base": "ENS", + "description": "ETHEREUM NAME SERVICE / US DOLLAR", + "display_symbol": "ENS/USD", + "generic_symbol": "ENSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ENS/USD" + } + }, + { + "id": "5212f4bb90c861ed88a2024a435463ab41cacf6f5deeed7b085dca90b1f5cfa5", + "attributes": { + "asset_type": "Crypto", + "base": "EOS", + "description": "EOS / US DOLLAR", + "display_symbol": "EOS/USD", + "generic_symbol": "EOSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EOS/USD" + } + }, + { + "id": "d77bfe9814f5a4718e1420881093efa8c0fe1a783472899f27ad4c7a58ef4d27", + "attributes": { + "asset_type": "Crypto", + "base": "ETC", + "description": "ETHEREUM CLASSIC / US DOLLAR", + "display_symbol": "ETC/USD", + "generic_symbol": "ETCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ETC/USD" + } + }, + { + "id": "754a0a0800247d77751e35efb91638c828046103be3bb3d26989e65bf4010859", + "attributes": { + "asset_type": "Crypto", + "base": "ETH", + "description": "ETHEREUM / BITCOIN", + "display_symbol": "ETH/BTC", + "generic_symbol": "ETHBTC", + "quote_currency": "BTC", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ETH/BTC" + } + }, + { + "id": "178ec659c2e795d91f812a1802a84b456ccbab205ba54b3c5a07f81bf7e74157", + "attributes": { + "asset_type": "Crypto", + "base": "GRT", + "description": "THE GRAPH / US DOLLAR", + "display_symbol": "GRT/USD", + "generic_symbol": "GRTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GRT/USD" + } + }, + { + "id": "69b9541d49c4611bc883e8a5e9646a1e787341e05a04fc154775deb974e82823", + "attributes": { + "asset_type": "Crypto", + "base": "WELL", + "description": "MOONWELL / US DOLLAR", + "display_symbol": "WELL/USD", + "generic_symbol": "WELLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WELL/USD" + } + }, + { + "id": "5befcdb06599c4126afeb0b20d751d6360a28a880c23222be2ee40be38c1fb26", + "attributes": { + "asset_type": "Crypto", + "base": "KNC", + "description": "KYBER NETWORK CRYSTAL V2 / US DOLLAR", + "display_symbol": "KNC/USD", + "generic_symbol": "KNCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.KNC/USD" + } + }, + { + "id": "bc1030a0b410ac71bc2a666a70dabaeb1e95ad7c587d6b50752f532a77424e1a", + "attributes": { + "asset_type": "Crypto", + "base": "KSM", + "description": "KUSAMA / US DOLLAR", + "display_symbol": "KSM/USD", + "generic_symbol": "KSMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.KSM/USD" + } + }, + { + "id": "8cbdbeb28d932e84de738a2042de7e2c87f5b0b1ef4e7e346c3df93a202dd425", + "attributes": { + "asset_type": "Crypto", + "base": "MANA", + "description": "DECENTRALAND / US DOLLAR", + "display_symbol": "MANA/USD", + "generic_symbol": "MANAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MANA/USD" + } + }, + { + "id": "6f1fc5f67a2e6370602a4eac61e8bd2c780c2fd9ff17d1bfef1cdbd766014cd1", + "attributes": { + "asset_type": "Crypto", + "base": "MASK", + "description": "MASK NETWORK / US DOLLAR", + "display_symbol": "MASK/USD", + "generic_symbol": "MASKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MASK/USD" + } + }, + { + "id": "01a33b54c2911e1f58fdc02bc03e3778508bb9a84571afca33e2757791eb1269", + "attributes": { + "asset_type": "Crypto", + "base": "MAV", + "description": "MAVERICK / US DOLLAR", + "display_symbol": "MAV/USD", + "generic_symbol": "MAVUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MAV/USD" + } + }, + { + "id": "c4d994230a6db7909135e4673287fb672f45ea92fb40b1bc9adf101ecf877ab7", + "attributes": { + "asset_type": "Crypto", + "base": "MKR", + "description": "MAKER / US DOLLAR", + "display_symbol": "MKR/USD", + "generic_symbol": "MKRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MKR/USD" + } + }, + { + "id": "215660dcce039eac1422c9b90de9feac12b81e7501ebb6a908d70a752f47c868", + "attributes": { + "asset_type": "Crypto", + "base": "OMG", + "description": "OMG NETWORK / US DOLLAR", + "display_symbol": "OMG/USD", + "generic_symbol": "OMGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.OMG/USD" + } + }, + { + "id": "02c1cc29f62ce849611bafc6bd4860e0113300d76db6f95dd753ab76e4f0beeb", + "attributes": { + "asset_type": "Crypto", + "base": "PEOPLE", + "description": "CONSTITUTIONDAO / US DOLLAR", + "display_symbol": "PEOPLE/USD", + "generic_symbol": "PEOPLEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PEOPLE/USD" + } + }, + { + "id": "ad0f7fb0bdefc9ec569499a1382b8404153deeff7f9e2fa1c7210dc245877160", + "attributes": { + "asset_type": "Crypto", + "base": "RUNE", + "description": "THORCHAIN / US DOLLAR", + "display_symbol": "RUNE/USD", + "generic_symbol": "RUNEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RUNE/USD" + } + }, + { + "id": "8794f3dc7f3358d27080185ae905ac31045df4f3b0c1a93954c5ace3c369e990", + "attributes": { + "asset_type": "Crypto", + "base": "SKL", + "description": "SKALE / US DOLLAR", + "display_symbol": "SKL/USD", + "generic_symbol": "SKLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SKL/USD" + } + }, + { + "id": "2f60eb4454f0634772512d32508db6b442fc192616a0eb75b9e6f85372d0775f", + "attributes": { + "asset_type": "Crypto", + "base": "STORJ", + "description": "STORJ / US DOLLAR", + "display_symbol": "STORJ/USD", + "generic_symbol": "STORJUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STORJ/USD" + } + }, + { + "id": "2167ece6ee3201b7b61f4cdc17bf2e874ca6ad850c390ba2c5a76d703a1b8cd2", + "attributes": { + "asset_type": "Crypto", + "base": "SUSHI", + "description": "SUSHISWAP / US DOLLAR", + "display_symbol": "SUSHI/USD", + "generic_symbol": "SUSHIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SUSHI/USD" + } + }, + { + "id": "1f2cdd651c9dcc338619615610f4ac68a1d0300e57e45ce6a28f6bce62f8b36b", + "attributes": { + "asset_type": "Crypto", + "base": "METH", + "description": "MANTLE STAKED ETHER / US DOLLAR", + "display_symbol": "METH/USD", + "generic_symbol": "METHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.METH/USD" + } + }, + { + "id": "7bb0f9786aaf74adc35b9d38f255c87cffb41362ff6a44c7d6795dfacbe7f5e8", + "attributes": { + "asset_type": "Crypto", + "base": "XTZ", + "description": "TEZOS / US DOLLAR", + "display_symbol": "XTZ/USD", + "generic_symbol": "XTZUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XTZ/USD" + } + }, + { + "id": "c9c8430ee6c26e218abe9f1c9cb88a664f7096d4934d8dfda17bc5d79e918848", + "attributes": { + "asset_type": "Crypto", + "base": "YFI", + "description": "YEARN FINANCE / US DOLLAR", + "display_symbol": "YFI/USD", + "generic_symbol": "YFIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.YFI/USD" + } + }, + { + "id": "f669e586ebcd8716820498bd430936067b1c69c632eaa8e2a69bc313510c0e3c", + "attributes": { + "asset_type": "Crypto", + "base": "WSTETH", + "description": "WRAPPED STETH / US DOLLAR", + "display_symbol": "WSTETH/USD", + "generic_symbol": "WSTETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WSTETH/USD" + } + }, + { + "id": "9c48c155a80410aaa3699f6257d2255f6c95d0879766db1a187a249096ed2e94", + "attributes": { + "asset_type": "Crypto", + "base": "RPL", + "description": "ROCKETPOOL / US DOLLAR", + "display_symbol": "RPL/USD", + "generic_symbol": "RPLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RPL/USD" + } + }, + { + "id": "ebe9d7071f7634ad1bb474c3cb43f415a6c975d3892377ce5fceb369d48a54d3", + "attributes": { + "asset_type": "Crypto", + "base": "ARKM", + "description": "ARKHAM / US DOLLAR", + "display_symbol": "ARKM/USD", + "generic_symbol": "ARKMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ARKM/USD" + } + }, + { + "id": "5d44dd349f3014ff0e522bf8497847b5c721877438d39aca5a1e80fa51d12df8", + "attributes": { + "asset_type": "Crypto", + "base": "BSOL", + "description": "BLAZESTAKE STAKED SOL / US DOLLAR", + "display_symbol": "BSOL/USD", + "generic_symbol": "BSOLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BSOL/USD" + } + }, + { + "id": "d9d0eaa78e9be4be5bfcba019f41db9ac45e74e49a532d233d71e2c9219c3e95", + "attributes": { + "asset_type": "Crypto", + "base": "IDEX", + "description": "IDEX / US DOLLAR", + "display_symbol": "IDEX/USD", + "generic_symbol": "IDEXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.IDEX/USD" + } + }, + { + "id": "ae872267e5e719e31fa27ccc071c5d8f1314cf62dbf6a63078afb93cecd71487", + "attributes": { + "asset_type": "Crypto", + "base": "NEON", + "description": "NEON / US DOLLAR", + "display_symbol": "NEON/USD", + "generic_symbol": "NEONUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.NEON/USD" + } + }, + { + "id": "4cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c2", + "attributes": { + "asset_type": "Crypto", + "base": "RON", + "description": "RONIN / US DOLLAR", + "display_symbol": "RON/USD", + "generic_symbol": "RONUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RON/USD" + } + }, + { + "id": "69c5297fa967a51372d56174fcf7225b21263559bfbdb5cf03eff4af6c2212ea", + "attributes": { + "asset_type": "Crypto", + "base": "WLD", + "description": "WORLDCOIN / US DOLLAR", + "display_symbol": "WLD/USD", + "generic_symbol": "WLDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WLD/USD" + } + }, + { + "id": "b050ef58e51b3301b68e8ca172553bd2f5a46c00a417456e16e3fba93549be21", + "attributes": { + "asset_type": "Crypto", + "base": "XRD", + "description": "RADIX / US DOLLAR", + "display_symbol": "XRD/USD", + "generic_symbol": "XRDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XRD/USD" + } + }, + { + "id": "373ef7da0247f66b5841b22d0f80567b5affc5a4fe9e8bc10b0f7ae4a3dfacb8", + "attributes": { + "asset_type": "Crypto", + "base": "FDUSD", + "description": "FIRST DIGITAL USD / US DOLLAR", + "display_symbol": "FDUSD/USD", + "generic_symbol": "FDUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FDUSD/USD" + } + }, + { + "id": "38f4cd70ed68b449613c0a13dd101141c2bc61a72e284595feb452f6e7e6b0c5", + "attributes": { + "asset_type": "Crypto", + "base": "GLMR", + "description": "MOONBEAM / US DOLLAR", + "display_symbol": "GLMR/USD", + "generic_symbol": "GLMRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GLMR/USD" + } + }, + { + "id": "effc3ed351e90bcd50134c40a82e9362a58585385052d64e8c3352fc6ecaea76", + "attributes": { + "asset_type": "Crypto", + "base": "GT", + "description": "GATETOKEN / US DOLLAR", + "display_symbol": "GT/USD", + "generic_symbol": "GTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GT/USD" + } + }, + { + "id": "aafe1c068f0b7ff44a899435fbbcf04ceed5ffc0be6bfc17ee1c24995bbd4cb7", + "attributes": { + "asset_type": "Crypto", + "base": "HT", + "description": "HUOBI TOKEN / US DOLLAR", + "display_symbol": "HT/USD", + "generic_symbol": "HTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HT/USD" + } + }, + { + "id": "da0be66c19400cdfce7944ab8def8734cb3858c3f6b34b044deb95929b47c3ab", + "attributes": { + "asset_type": "Crypto", + "base": "ICP", + "description": "INTERNET COMPUTER / US DOLLAR", + "display_symbol": "ICP/USD", + "generic_symbol": "ICPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ICP/USD" + } + }, + { + "id": "7a55e2c3a5e7355b5377041a0f0be64f2a41b2a5eb70e3f0a3468b3c6da7e01f", + "attributes": { + "asset_type": "Crypto", + "base": "IMX", + "description": "IMMUTABLE / US DOLLAR", + "display_symbol": "IMX/USD", + "generic_symbol": "IMXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.IMX/USD" + } + }, + { + "id": "413d0b0e68a514c19a580d41436bd4f124061a33f0887dc298d9d05482f93fc2", + "attributes": { + "asset_type": "Crypto", + "base": "LRC", + "description": "LOOPRING / US DOLLAR", + "display_symbol": "LRC/USD", + "generic_symbol": "LRCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LRC/USD" + } + }, + { + "id": "acc799c61d9ea219a7ff79a638b12e42e4f57643ff49230f45efa9ea7dce5a0b", + "attributes": { + "asset_type": "Crypto", + "base": "MINA", + "description": "MINA / US DOLLAR", + "display_symbol": "MINA/USD", + "generic_symbol": "MINAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MINA/USD" + } + }, + { + "id": "c388a65a0c945592b6e2ba74e19a1f09cf9a31ac89586fb397609c82c0a024a2", + "attributes": { + "asset_type": "Crypto", + "base": "OKB", + "description": "OKB / US DOLLAR", + "display_symbol": "OKB/USD", + "generic_symbol": "OKBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.OKB/USD" + } + }, + { + "id": "a46d2af20af5557323e0dfa1f2696b570cb9287891179d7b93096c931e9076df", + "attributes": { + "asset_type": "Crypto", + "base": "QNT", + "description": "QUANT / US DOLLAR", + "display_symbol": "QNT/USD", + "generic_symbol": "QNTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.QNT/USD" + } + }, + { + "id": "063db98a05a60b5925fb023246902198cd65208b9bdfd13347e9231ad970ce12", + "attributes": { + "asset_type": "Crypto", + "base": "RDNT", + "description": "RADIANT / US DOLLAR", + "display_symbol": "RDNT/USD", + "generic_symbol": "RDNTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RDNT/USD" + } + }, + { + "id": "5338ac71bfc18be14279a8e8b99014b736558d9ca650fcd902378da9e77ae5c5", + "attributes": { + "asset_type": "Crypto", + "base": "VET", + "description": "VECHAIN / US DOLLAR", + "display_symbol": "VET/USD", + "generic_symbol": "VETUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.VET/USD" + } + }, + { + "id": "ea0459ab2954676022baaceadb472c1acc97888062864aa23e9771bae3ff36ed", + "attributes": { + "asset_type": "Crypto", + "base": "WBTC", + "description": "WRAPPED BITCOIN / US DOLLAR", + "display_symbol": "WBTC/USD", + "generic_symbol": "WBTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WBTC/USD" + } + }, + { + "id": "ae5645a4463f4b9656694576fe6096b9bce4d37a3bb2c5287ee3d149f1a16767", + "attributes": { + "asset_type": "Crypto", + "base": "XLM", + "description": "STELLAR / US DOLLAR", + "display_symbol": "XLM/USD", + "generic_symbol": "XLMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XLM/USD" + } + }, + { + "id": "2e68d9149ad63d42f4e3bc5d0d60490e32367677fa182d4eee1452f1a58d3ef4", + "attributes": { + "asset_type": "Crypto", + "base": "BSV", + "description": "BITCOIN SV / US DOLLAR", + "display_symbol": "BSV/USD", + "generic_symbol": "BSVUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BSV/USD" + } + }, + { + "id": "6c8f9811b8d80376c3d663e029544408455fe95f387e9a82fce456d691317ee1", + "attributes": { + "asset_type": "Crypto", + "base": "GUSD", + "description": "GEMINI DOLLAR / US DOLLAR", + "display_symbol": "GUSD/USD", + "generic_symbol": "GUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GUSD/USD" + } + }, + { + "id": "aabe0d228ca57feaa1423e03c141f6540771490a41612b3d2a3a57a59dc2efd8", + "attributes": { + "asset_type": "Crypto", + "base": "MIM", + "description": "MAGIC INTERNET MONEY / US DOLLAR", + "display_symbol": "MIM/USD", + "generic_symbol": "MIMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MIM/USD" + } + }, + { + "id": "f5bb76a768e600540d6286051963c10458da9418803fa022e672c002619835f5", + "attributes": { + "asset_type": "Crypto", + "base": "PAXG", + "description": "PAX GOLD / US DOLLAR", + "display_symbol": "PAXG/USD", + "generic_symbol": "PAXGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PAXG/USD" + } + }, + { + "id": "feb3d7674a40ec01d9f0b0d7aa996b816066f02c3d5550b4e3354410502fce9e", + "attributes": { + "asset_type": "Crypto", + "base": "PENDLE", + "description": "PENDLE / US DOLLAR", + "display_symbol": "PENDLE/USD", + "generic_symbol": "PENDLEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PENDLE/USD" + } + }, + { + "id": "95f1aef92c74670d40f1f37ee6fb158ffd6a0f8913b07b9e61087f9b7273b11c", + "attributes": { + "asset_type": "Crypto", + "base": "SEI", + "description": "SEI / US DOLLAR", + "display_symbol": "SEI/USD", + "generic_symbol": "SEIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SEI/USD" + } + }, + { + "id": "83d2c4df4b67a8d16f27d032ddb0f932239e2435e80ec9d9d1fbe59cbe9431d2", + "attributes": { + "asset_type": "Crypto", + "base": "MODE", + "description": "MODE NETWORK / US DOLLAR", + "display_symbol": "MODE/USD", + "generic_symbol": "MODEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MODE/USD" + } + }, + { + "id": "ed1b51d4fb17e8c8b54a0c5bdbd59b38a0304d032287eb38d907374f16b5f535", + "attributes": { + "asset_type": "Crypto", + "base": "TBTC", + "description": "THRESHOLD BITCOIN / US DOLLAR", + "display_symbol": "TBTC/USD", + "generic_symbol": "TBTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TBTC/USD" + } + }, + { + "id": "d34659f792d16725786fe9852f80a88dc7b38c338babb60c8519e12a86a15f62", + "attributes": { + "asset_type": "Crypto", + "base": "UMA", + "description": "UMA / US DOLLAR", + "display_symbol": "UMA/USD", + "generic_symbol": "UMAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.UMA/USD" + } + }, + { + "id": "b1cf98385fe91ca74e8a6b576b3fce31f2c50a67d49707e4b7e84273d2818f53", + "attributes": { + "asset_type": "Crypto", + "base": "TNSR", + "description": "TENSOR / US DOLLAR", + "display_symbol": "TNSR/USD", + "generic_symbol": "TNSRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TNSR/USD" + } + }, + { + "id": "adb58999a5a9f3d280b320b420639c634b85c4ad85f94f829f8ff2830ed20c7a", + "attributes": { + "asset_type": "Crypto", + "base": "USDP", + "description": "PAX DOLLAR / US DOLLAR", + "display_symbol": "USDP/USD", + "generic_symbol": "USDPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDP/USD" + } + }, + { + "id": "683832447e2920e3d85ab52609be9822ad0da95de656b8acd9a8f0e3a3717895", + "attributes": { + "asset_type": "Crypto", + "base": "ZEC", + "description": "ZCASH / US DOLLAR", + "display_symbol": "ZEC/USD", + "generic_symbol": "ZECUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZEC/USD" + } + }, + { + "id": "936e515a3ec2fdf8351c171a7114463a187798c738a8bddc0277ec49d4ff545d", + "attributes": { + "asset_type": "Crypto", + "base": "ROSE", + "description": "OASIS NETWORK / US DOLLAR", + "display_symbol": "ROSE/USD", + "generic_symbol": "ROSEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ROSE/USD" + } + }, + { + "id": "56246cc9f1c36638a4452396119c6052700c8b84ceda82cf6a9480bb54c2dbd0", + "attributes": { + "asset_type": "Equity", + "base": "DIA", + "country": "US", + "description": "SPDR DOW JONES INDUSTRIAL AVERAGE ETF TRUST / US DOLLAR", + "display_symbol": "DIA/USD", + "generic_symbol": "DIA", + "nasdaq_symbol": "DIA", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.DIA/USD" + } + }, + { + "id": "fe8d778b24319a5429fef44e4486003eefe7f6bd84c2946958b2f77ea40e160c", + "attributes": { + "asset_type": "Equity", + "base": "USFR", + "country": "US", + "description": "WISDOMTREE FLOATING RATE TREASURY FUND / US DOLLAR", + "display_symbol": "USFR/USD", + "generic_symbol": "USFR", + "nasdaq_symbol": "USFR", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.USFR/USD" + } + }, + { + "id": "f2ef5dc6156e6cdccda6c315f3fc6de2bf37e9aecbc9b5efc51de98096c3e7c6", + "attributes": { + "asset_type": "Crypto", + "base": "HBAR", + "description": "HEDERA / US DOLLAR", + "display_symbol": "HBAR/USD", + "generic_symbol": "HBARUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HBAR/USD" + } + }, + { + "id": "f43b62d183da10176674bf62cb062bd0c0b644efcdbe676df646623c10634853", + "attributes": { + "asset_type": "Crypto", + "base": "SWETH", + "description": "SWELL ETHEREUM / US DOLLAR", + "display_symbol": "SWETH/USD", + "generic_symbol": "SWETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SWETH/USD" + } + }, + { + "id": "97b8488c5d01e28aa93b049ca96ffc0f4bfc3d7096a790a0af3b6290f98685ce", + "attributes": { + "asset_type": "Crypto", + "base": "LEO", + "description": "LEO TOKEN / US DOLLAR", + "display_symbol": "LEO/USD", + "generic_symbol": "LEOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LEO/USD" + } + }, + { + "id": "731dcbd0d95a10b29a75b09bce7b58538cfb41b9064369f6d9ef4ab3cb8da806", + "attributes": { + "asset_type": "Crypto", + "base": "AKT", + "description": "AKASH NETWORK / US DOLLAR", + "display_symbol": "AKT/USD", + "generic_symbol": "AKTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AKT/USD" + } + }, + { + "id": "033115217b52a823cfd3c40fa8e645707fa94da672a03f1636f644417a233466", + "attributes": { + "asset_type": "Crypto", + "base": "CORE", + "description": "CORE / US DOLLAR", + "display_symbol": "CORE/USD", + "generic_symbol": "COREUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CORE/USD" + } + }, + { + "id": "ac51007fea22c46f37537d943aff87bb25667740b4e45930503eb353c7521d75", + "attributes": { + "asset_type": "Crypto", + "base": "AR", + "description": "ARWEAVE / US DOLLAR", + "display_symbol": "AR/USD", + "generic_symbol": "ARUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AR/USD" + } + }, + { + "id": "d4671c19b3d1e8c30a36506434b811c05a45a761ae6b25a0c4c17d211878509d", + "attributes": { + "asset_type": "Crypto", + "base": "ASTR", + "description": "ASTAR / US DOLLAR", + "display_symbol": "ASTR/USD", + "generic_symbol": "ASTRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ASTR/USD" + } + }, + { + "id": "05729320d519c040ba5af551920b588e39d34424c32d4e12d68681d0213a3913", + "attributes": { + "asset_type": "Crypto", + "base": "BITCOIN", + "description": "HARRYPOTTEROBAMASONIC10INU ETH / US DOLLAR", + "display_symbol": "BITCOIN/USD", + "generic_symbol": "BITCOINUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BITCOIN/USD" + } + }, + { + "id": "7043ddbf4e06d715338932025a3c96db93087e198da890d6a291a543be56047c", + "attributes": { + "asset_type": "Crypto", + "base": "FRXETH", + "description": "FRAX ETHER / US DOLLAR", + "display_symbol": "FRXETH/USD", + "generic_symbol": "FRXETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FRXETH/USD" + } + }, + { + "id": "46089f2cd9e374ed8ee92afde250abc5d085c08986b30a4a2a690f20511936e7", + "attributes": { + "asset_type": "Crypto", + "base": "ZEN", + "description": "HORIZEN / US DOLLAR", + "display_symbol": "ZEN/USD", + "generic_symbol": "ZENUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZEN/USD" + } + }, + { + "id": "1fad582c6cecd41b38b2c7785abd03660a218a213588ba98a16e2870204f30e1", + "attributes": { + "asset_type": "Equity", + "base": "C3M", + "country": "FR", + "description": "AMUNDI ETF GOVIES 0-6 MONTHS EURO INVESTMENT GRADE UCITS ETF DR / EURO", + "display_symbol": "C3M/EUR", + "generic_symbol": "C3M", + "quote_currency": "EUR", + "symbol": "Equity.FR.C3M/EUR" + } + }, + { + "id": "a05c2942ddf43f027949ff53fbafff6cd3398ddb0354beaa3edf8ee33583cfb6", + "attributes": { + "asset_type": "Equity", + "base": "EUE", + "country": "IE", + "description": "ISHARES CORE EURO STOXX 50 UCITS ETF EUR / EURO", + "display_symbol": "EUE/EUR", + "generic_symbol": "EUE", + "quote_currency": "EUR", + "symbol": "Equity.IE.EUE/EUR" + } + }, + { + "id": "505c15ed84becd963fc6c00836c2a2c0897a2c5e8065f89b9298a34a38d6bb10", + "attributes": { + "asset_type": "Equity", + "base": "BCOIN", + "country": "NL", + "description": "JACOBI FT WILSHIRE BITCOIN ETF / US DOLLAR", + "display_symbol": "BCOIN/USD", + "generic_symbol": "BCOIN", + "quote_currency": "USD", + "symbol": "Equity.NL.BCOIN/USD" + } + }, + { + "id": "c158fc3980d813a980c576fcf649a8f7794b75144171868040840c345997269f", + "attributes": { + "asset_type": "Crypto", + "base": "BOBA", + "description": "BOBA NETWORK / US DOLLAR", + "display_symbol": "BOBA/USD", + "generic_symbol": "BOBAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BOBA/USD" + } + }, + { + "id": "84be9673fdff55f7801690763fca8aaff12b283a55ac61065bec5652ff2ae984", + "attributes": { + "asset_type": "Crypto", + "base": "EURC", + "description": "EURO COIN / US DOLLAR", + "display_symbol": "EURC/USD", + "generic_symbol": "EURCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EURC/USD" + } + }, + { + "id": "400a19a5e54616fa4047a1c17108d31b19bc9418cf7b7b263883c2f8020fbe79", + "attributes": { + "asset_type": "Crypto", + "base": "LST", + "description": "LIQUID STAKING TOKEN / US DOLLAR", + "display_symbol": "LST/USD", + "generic_symbol": "LSTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LST/USD" + } + }, + { + "id": "fdef37057d596fe8bdfdba6d808f2e01b40a9d6601fd8814fddede62e05f8d97", + "attributes": { + "asset_type": "Crypto", + "base": "SLP", + "description": "SMOOTH LOVE POTION / US DOLLAR", + "display_symbol": "SLP/USD", + "generic_symbol": "SLPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SLP/USD" + } + }, + { + "id": "30998099c161c4f04b48569485cfab66256f36006810fe787f40fbc96e263438", + "attributes": { + "asset_type": "Crypto", + "base": "TIA", + "description": "CELESTIA / US DOLLAR", + "display_symbol": "TIA/USD", + "generic_symbol": "TIAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TIA/USD" + } + }, + { + "id": "b828d7baf048f26e111d1d057238dea676d99869345d6ea90e1ca7799a2c23f3", + "attributes": { + "asset_type": "Crypto", + "base": "XAUT", + "description": "TETHER GOLD / US DOLLAR", + "display_symbol": "XAUT/USD", + "generic_symbol": "XAUTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XAUT/USD" + } + }, + { + "id": "4371e08a384f3509d1e7510f2fff209ceb58260dfddd624a6eea4df733a97571", + "attributes": { + "asset_type": "Crypto", + "base": "TRB", + "description": "TELLOR TRIBUTES / US DOLLAR", + "display_symbol": "TRB/USD", + "generic_symbol": "TRBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TRB/USD" + } + }, + { + "id": "e46dee29c768f526c17b91a27621d53260454633f33a8a393248a69f090844ed", + "attributes": { + "asset_type": "Crypto", + "base": "MEME", + "description": "MEMECOIN / US DOLLAR", + "display_symbol": "MEME/USD", + "generic_symbol": "MEMEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MEME/USD" + } + }, + { + "id": "97d8ebefd64420a02939ed20572be4ea745d16bd61d58f1e1eb4bd508536723a", + "attributes": { + "asset_type": "Crypto", + "base": "RENDER", + "description": "RENDER / US DOLLAR", + "display_symbol": "RENDER/USD", + "generic_symbol": "RENDERUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RENDER/USD" + } + }, + { + "id": "2b4c2ab4993d0472b73b29f6598cb716d2be452389a9964f8db6cbec1bea3899", + "attributes": { + "asset_type": "Crypto", + "base": "ORDI", + "description": "ORDI / US DOLLAR", + "display_symbol": "ORDI/USD", + "generic_symbol": "ORDIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ORDI/USD" + } + }, + { + "id": "dcbe01f5bc8eac514658a250b6871e44e1f2b4e6b6c97ee193a2816a658865b1", + "attributes": { + "asset_type": "Crypto", + "base": "SATS", + "description": "SATS ORDINALS / US DOLLAR", + "display_symbol": "SATS/USD", + "generic_symbol": "SATSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SATS/USD" + } + }, + { + "id": "c615ea2ed57c4e0c70ab5cb6fd29ada8350f039e67c019159204bc22c46da3f3", + "attributes": { + "asset_type": "Crypto", + "base": "PYTH", + "description": "PYTH NETWORK / US DOLLAR", + "display_symbol": "PYTH/USD", + "generic_symbol": "PYTHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PYTH/USD" + } + }, + { + "id": "b70baf5be4a7509e962468325ddb952aca04e549bbd8e7744214fde88857ac29", + "attributes": { + "asset_type": "Crypto", + "base": "POL", + "description": "POLYGON ECOSYSTEM TOKEN / US DOLLAR", + "display_symbol": "POL/USD", + "generic_symbol": "POLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.POL/USD" + } + }, + { + "id": "eb601dbea63790e822d75e5ee21f5032bd608f994c17df75b8ec494a848ce2bf", + "attributes": { + "asset_type": "Crypto", + "base": "SFRXETH", + "description": "STAKED FRAX ETHER / US DOLLAR", + "display_symbol": "SFRXETH/USD", + "generic_symbol": "SFRXETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SFRXETH/USD" + } + }, + { + "id": "c222a1d2b89218c034b515e738b19ee268c105d8ede44d95b279f1c8bfbb68af", + "attributes": { + "asset_type": "Crypto", + "base": "USDY", + "description": "ONDO US DOLLAR YIELD / US DOLLAR", + "display_symbol": "USDY/USD", + "generic_symbol": "USDYUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDY/USD" + } + }, + { + "id": "4ae69c1f5f1bc2e3c09c43c23b974c34995b4ddb03b0e0fe095ebee2b6c7a5ac", + "attributes": { + "asset_type": "Crypto", + "base": "VIC", + "description": "VICTION / US DOLLAR", + "display_symbol": "VIC/USD", + "generic_symbol": "VICUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.VIC/USD" + } + }, + { + "id": "b7d65603c6a6f051f3c0579ca4ec844c379dbb4cd2a8e4510b2b8433d2256294", + "attributes": { + "asset_type": "Crypto", + "base": "BORG", + "description": "SWISSBORG / US DOLLAR", + "display_symbol": "BORG/USD", + "generic_symbol": "BORGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BORG/USD" + } + }, + { + "id": "6d207964e86efe52d0832090bf4390e13744b011c2744b69d4418fe7021ff347", + "attributes": { + "asset_type": "Crypto", + "base": "JOE", + "description": "JOE / US DOLLAR", + "display_symbol": "JOE/USD", + "generic_symbol": "JOEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JOE/USD" + } + }, + { + "id": "cf7ca338739d3ad1ba7795d45889efa7c2795883817222dd40fb77d2f9024e59", + "attributes": { + "asset_type": "Crypto", + "base": "BLZE", + "description": "BLAZE / US DOLLAR", + "display_symbol": "BLZE/USD", + "generic_symbol": "BLZEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BLZE/USD" + } + }, + { + "id": "1126fc5add7272eca2c168bf6393b1f82376a749db15ee63791b843f39867592", + "attributes": { + "asset_type": "Crypto", + "base": "JTO", + "description": "JITO / US DOLLAR", + "display_symbol": "JTO/USD", + "generic_symbol": "JTOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JTO/USD" + } + }, + { + "id": "e92860f24d56f9ba9894658202633062744556e98fb3e924b4a2694d82f05737", + "attributes": { + "asset_type": "Crypto", + "base": "JUP", + "description": "JUPITER / US DOLLAR", + "display_symbol": "JUP/USD", + "generic_symbol": "JUPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JUP/USD" + } + }, + { + "id": "b7a3681fb8c1bdbefc659a3a64c4a1a87b05c2c3a83babb8c5c8941e0602854a", + "attributes": { + "asset_type": "Crypto", + "base": "MYRO", + "description": "MYRO / US DOLLAR", + "display_symbol": "MYRO/USD", + "generic_symbol": "MYROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MYRO/USD" + } + }, + { + "id": "55dbf94d05be7d6fd05a96b9e62eb279844a5571138ea0a2c8800c4ff6d66e43", + "attributes": { + "asset_type": "Crypto", + "base": "ELON", + "description": "DOGELON MARS / US DOLLAR", + "display_symbol": "ELON/USD", + "generic_symbol": "ELONUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ELON/USD" + } + }, + { + "id": "f43ec4cc582241061daceec80cbbdeb0ffae4f5d9870c96a63b08d76aa8bea5e", + "attributes": { + "asset_type": "Crypto", + "base": "STRK", + "description": "STARKNET / US DOLLAR", + "display_symbol": "STRK/USD", + "generic_symbol": "STRKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STRK/USD" + } + }, + { + "id": "8563980e02d2df4761d5746889a0cc84fdac4cd98928a55f19ffd67c258b09c5", + "attributes": { + "asset_type": "Crypto", + "base": "TENET", + "description": "TENET / US DOLLAR", + "display_symbol": "TENET/USD", + "generic_symbol": "TENETUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TENET/USD" + } + }, + { + "id": "1a5460c118c02ceff5fa704b357008612d279bfe0f4d4992288bb1bbd6922ee4", + "attributes": { + "asset_type": "Commodities", + "description": "BRENT CRUDE OIL - 1 MONTH", + "display_symbol": "BRENT1M/USD", + "generic_symbol": "BRENT1M", + "quote_currency": "USD", + "schedule": "America/New_York;0000-1800&2000-2400,0000-1800&2000-2400,0000-1800&2000-2400,0000-1800&2000-2400,0000-1800,C,1800-2400;1224/0000-1400&2000-2400,1225/C,0101/C,0418/C", + "symbol": "Commodities.BRENT1M" + } + }, + { + "id": "ff1f3dc0f17407784d360523d1d3a81f0bb8be66b3aa7646e354a621f98906f2", + "attributes": { + "asset_type": "Commodities", + "description": "BRENT CRUDE OIL - 2 MONTH", + "display_symbol": "BRENT2M/USD", + "generic_symbol": "BRENT2M", + "quote_currency": "USD", + "schedule": "America/New_York;0000-1800&2000-2400,0000-1800&2000-2400,0000-1800&2000-2400,0000-1800&2000-2400,0000-1800,C,1800-2400;1224/0000-1400&2000-2400,1225/C,0101/C,0418/C", + "symbol": "Commodities.BRENT2M" + } + }, + { + "id": "8a19b7005f1c8dae8f965454bfcc05fa96c7d7271c5e2e5a6673fc412e6c6f4b", + "attributes": { + "asset_type": "Commodities", + "description": "BRENT CRUDE OIL - 3 MONTH", + "display_symbol": "BRENT3M/USD", + "generic_symbol": "BRENT3M", + "quote_currency": "USD", + "schedule": "America/New_York;0000-1800&2000-2400,0000-1800&2000-2400,0000-1800&2000-2400,0000-1800&2000-2400,0000-1800,C,1800-2400;1224/0000-1400&2000-2400,1225/C,0101/C,0418/C", + "symbol": "Commodities.BRENT3M" + } + }, + { + "id": "4d7549a26b1a2f7018c9bf59e24d38247c897009c45a11b00d9df8649decb2f2", + "attributes": { + "asset_type": "Commodities", + "description": "WTI CRUDE OIL - 1 MONTH", + "display_symbol": "WTI1M/USD", + "generic_symbol": "WTI1M", + "quote_currency": "USD", + "schedule": "America/New_York;0000-1700&1800-2400,0000-1700&1800-2400,0000-1700&1800-2400,0000-1700&1800-2400,0000-1700,C,1800-2400;1224/0000-1345,1225/1800-2400,1231/0000-1700,0101/1800-2400,0120/1800-2400", + "symbol": "Commodities.WTI1M" + } + }, + { + "id": "4136f90bfc483738d859e4a27dbeb5e721d146a2a1926a95ebcf2c24bdb9e97c", + "attributes": { + "asset_type": "Commodities", + "description": "WTI CRUDE OIL - 2 MONTH", + "display_symbol": "WTI2M/USD", + "generic_symbol": "WTI2M", + "quote_currency": "USD", + "schedule": "America/New_York;0000-1700&1800-2400,0000-1700&1800-2400,0000-1700&1800-2400,0000-1700&1800-2400,0000-1700,C,1800-2400;1224/0000-1345,1225/1800-2400,1231/0000-1700,0101/1800-2400,0120/1800-2400", + "symbol": "Commodities.WTI2M" + } + }, + { + "id": "6d01002be81299acb7aedeb55938f2384b79dca5a7aa0e9f62144bbf2edb93ac", + "attributes": { + "asset_type": "Commodities", + "description": "WTI CRUDE OIL - 3 MONTH", + "display_symbol": "WTI3M/USD", + "generic_symbol": "WTI3M", + "quote_currency": "USD", + "schedule": "America/New_York;0000-1700&1800-2400,0000-1700&1800-2400,0000-1700&1800-2400,0000-1700&1800-2400,0000-1700,C,1800-2400;1224/0000-1345,1225/1800-2400,1231/0000-1700,0101/1800-2400,0120/1800-2400", + "symbol": "Commodities.WTI3M" + } + }, + { + "id": "d213e2929116af56c3ce71a1acee874f1dd03f42567b552085fa9d8ce8ce7134", + "attributes": { + "asset_type": "Crypto", + "base": "AFSUI", + "description": "AFTERMATH STAKED SUI / US DOLLAR", + "display_symbol": "AFSUI/USD", + "generic_symbol": "AFSUIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AFSUI/USD" + } + }, + { + "id": "891bbf50646522331b7270e37cd821044a6ccf13e9bd45c88f8ee2bdd91b0126", + "attributes": { + "asset_type": "Crypto", + "base": "AUDIO", + "description": "AUDIUS / US DOLLAR", + "display_symbol": "AUDIO/USD", + "generic_symbol": "AUDIOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AUDIO/USD" + } + }, + { + "id": "a5b36ba01eb5d1b51cac5add8a8a573c6b362f117438a7902d35a8554700efd6", + "attributes": { + "asset_type": "Crypto", + "base": "DODO", + "description": "DODO / US DOLLAR", + "display_symbol": "DODO/USD", + "generic_symbol": "DODOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DODO/USD" + } + }, + { + "id": "b675212df51f05b159e31e3047895778df9df1c870587102a06fc96100853361", + "attributes": { + "asset_type": "Crypto", + "base": "HASUI", + "description": "HAEDAL STAKED SUI / US DOLLAR", + "display_symbol": "HASUI/USD", + "generic_symbol": "HASUIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HASUI/USD" + } + }, + { + "id": "22e9da715516143024e927fa028a91c950232d136e9016865286fc44720d1b6d", + "attributes": { + "asset_type": "Crypto", + "base": "LOOKS", + "description": "LOOKSRARE / US DOLLAR", + "display_symbol": "LOOKS/USD", + "generic_symbol": "LOOKSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LOOKS/USD" + } + }, + { + "id": "2098e169aea9cb3c67702ff5497140b584edae27113a21e555399dafddbe1443", + "attributes": { + "asset_type": "Crypto", + "base": "SHDW", + "description": "SHADOW TOKEN / US DOLLAR", + "display_symbol": "SHDW/USD", + "generic_symbol": "SHDWUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SHDW/USD" + } + }, + { + "id": "0571fda7bfcdd1919d72a5163516a08f4adda3b11ce2fe7008200c761d64c1d9", + "attributes": { + "asset_type": "Crypto", + "base": "THL", + "description": "THALA / US DOLLAR", + "display_symbol": "THL/USD", + "generic_symbol": "THLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.THL/USD" + } + }, + { + "id": "c877c9422e794106bee634c7d7f27e2bbd9e2a6118f0ba57da57725a45164754", + "attributes": { + "asset_type": "Crypto", + "base": "JLP", + "description": "JUPITER LIQUIDITY PROVIDER TOKEN / US DOLLAR", + "display_symbol": "JLP/USD", + "generic_symbol": "JLPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JLP/USD" + } + }, + { + "id": "b13646bc9b07d2f9d7e40787bfad4d31664797cf9ba14dc3eb525376c9a0ad26", + "attributes": { + "asset_type": "Crypto", + "base": "MAGA", + "description": "TRUMP / US DOLLAR", + "display_symbol": "MAGA/USD", + "generic_symbol": "MAGAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MAGA/USD" + } + }, + { + "id": "613a67e6d2235e9886aa91809d1a67bde393ca588e853749ee7d99bb1e5c389d", + "attributes": { + "asset_type": "Crypto", + "base": "COQ", + "description": "COQ INU / US DOLLAR", + "display_symbol": "COQ/USD", + "generic_symbol": "COQUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.COQ/USD" + } + }, + { + "id": "67c68ce90695fc069790a369938f2349ccfbbec6ae6125f68f20b6a2015193ad", + "attributes": { + "asset_type": "Crypto", + "base": "MANTA", + "description": "MANTA NETWORK / US DOLLAR", + "display_symbol": "MANTA/USD", + "generic_symbol": "MANTAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MANTA/USD" + } + }, + { + "id": "8a63b58848080feab6ecaa2c48adafdf58b6f2cdcb97b05c56b15bda0c6095cb", + "attributes": { + "asset_type": "Crypto", + "base": "METIS", + "description": "METIS / US DOLLAR", + "display_symbol": "METIS/USD", + "generic_symbol": "METISUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.METIS/USD" + } + }, + { + "id": "30b72e216cb9f5e4a4aecd5b84c3a60c3c987fcfd92ec16feea1b88168ba52d4", + "attributes": { + "asset_type": "Crypto", + "base": "MOD", + "description": "MOVE DOLLAR / US DOLLAR", + "display_symbol": "MOD/USD", + "generic_symbol": "MODUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MOD/USD" + } + }, + { + "id": "73c4d9b094ff75a2bc7babc162f8e2c3aa5d5173aaec558b8eec05d9f528e173", + "attributes": { + "asset_type": "Crypto", + "base": "TAO", + "description": "BITTENSOR / US DOLLAR", + "display_symbol": "TAO/USD", + "generic_symbol": "TAOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TAO/USD" + } + }, + { + "id": "c81f3d1ce4419653d08976f946f876b508ff915ebd047520f0e123a0cef53fdb", + "attributes": { + "asset_type": "Crypto", + "base": "THAPT", + "description": "THALA APT / US DOLLAR", + "display_symbol": "THAPT/USD", + "generic_symbol": "THAPTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.THAPT/USD" + } + }, + { + "id": "55f2a7c35ab8d1957b010338ad4979845272369a2d6dbd30421626730c9a4f6f", + "attributes": { + "asset_type": "Crypto", + "base": "USDE", + "description": "ETHENA USDE / US DOLLAR", + "display_symbol": "USDE/USD", + "generic_symbol": "USDEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDE/USD" + } + }, + { + "id": "57e07b6b937fe3caf73a169492985aad204a9f10ab61dc392b525586a6f70b3b", + "attributes": { + "asset_type": "Crypto", + "base": "USDM", + "description": "MOUNTAIN PROTOCOL USD / US DOLLAR", + "display_symbol": "USDM/USD", + "generic_symbol": "USDMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDM/USD" + } + }, + { + "id": "45f08e06a4d78c7a46c70b324f62fe89080fa8f20da4abc5c0c6d262069b7edc", + "attributes": { + "asset_type": "Crypto", + "base": "WIF", + "description": "DOG WIF HAT / US DOLLAR", + "display_symbol": "WIF/USD", + "generic_symbol": "WIFUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WIF/USD" + } + }, + { + "id": "d9575d330607771c9990f61f5406957b54c731025c5db46fd5bb616af9e98e73", + "attributes": { + "asset_type": "Crypto", + "base": "XAI", + "description": "XAI / US DOLLAR", + "display_symbol": "XAI/USD", + "generic_symbol": "XAIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XAI/USD" + } + }, + { + "id": "ad79230b28d84a8941d5596c857d44a9812899427aa2fc0dd85b56535be52ea0", + "attributes": { + "asset_type": "Equity", + "base": "ARKB", + "cms_symbol": "ARKB", + "country": "US", + "cqs_symbol": "ARKB", + "description": "ARK 21SHARES BITCOIN ETF / US DOLLAR", + "display_symbol": "ARKB/USD", + "nasdaq_symbol": "ARKB", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.ARKB/USD" + } + }, + { + "id": "06c6037f2a20c17ebbf6b88a57226bda0795e470f6998171761a03ee46ec5dad", + "attributes": { + "asset_type": "Equity", + "base": "BITB", + "cms_symbol": "BITB", + "country": "US", + "cqs_symbol": "BITB", + "description": "BITWISE BITCOIN ETF TRUST / US DOLLAR", + "display_symbol": "BITB/USD", + "nasdaq_symbol": "BITB", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BITB/USD" + } + }, + { + "id": "eaadfc051d076f161c20ef3935393ff8c0e5242e817c39007a7f39286d9aa1c5", + "attributes": { + "asset_type": "Equity", + "base": "BITS", + "cms_symbol": "BITS", + "country": "US", + "cqs_symbol": "BITS", + "description": "GLOBAL X BLOCKCHAIN & BITCOIN STRATEGY ETF / US DOLLAR", + "display_symbol": "BITS/USD", + "nasdaq_symbol": "BITS", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BITS/USD" + } + }, + { + "id": "9929be8d4b038d09a19c96a8398aa47ae582a342faee92a1c3ee04ebd8b8aa32", + "attributes": { + "asset_type": "Equity", + "base": "BRRR", + "cms_symbol": "BRRR", + "country": "US", + "cqs_symbol": "BRRR", + "description": "VALKYRIE BITCOIN FUND / US DOLLAR", + "display_symbol": "BRRR/USD", + "nasdaq_symbol": "BRRR", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BRRR/USD" + } + }, + { + "id": "d3b214dba0f48c5734ba82dbde142a94bd08296e972350ba52e8cec39c558342", + "attributes": { + "asset_type": "Equity", + "base": "BTCO", + "cms_symbol": "BTCO", + "country": "US", + "cqs_symbol": "BTCO", + "description": "INVESCO GALAXY BITCOIN ETF / US DOLLAR", + "display_symbol": "BTCO/USD", + "nasdaq_symbol": "BTCO", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BTCO/USD" + } + }, + { + "id": "50abc5263dc80edd447e141697393dd5b2dccf1a5c2c279c31a068065e3eaf35", + "attributes": { + "asset_type": "Equity", + "base": "BTCW", + "cms_symbol": "BTCW", + "country": "US", + "cqs_symbol": "BTCW", + "description": "WISDOMTREE BITCOIN TRUST / US DOLLAR", + "display_symbol": "BTCW/USD", + "nasdaq_symbol": "BTCW", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BTCW/USD" + } + }, + { + "id": "71383b0e3f360c56ebab5b778172ec8117a1b350dac71b7f81645ce24108e8a3", + "attributes": { + "asset_type": "Equity", + "base": "BTF", + "cms_symbol": "BTF", + "country": "US", + "cqs_symbol": "BTF", + "description": "VALKYRIE BITCOIN STRATEGY ETF / US DOLLAR", + "display_symbol": "BTF/USD", + "nasdaq_symbol": "BTF", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.BTF/USD" + } + }, + { + "id": "262cdae6b967879eeca1eec431b9efabb016608dc67e10e53a26005da5ee6e5a", + "attributes": { + "asset_type": "Equity", + "base": "DEFI", + "cms_symbol": "DEFI", + "country": "US", + "cqs_symbol": "DEFI", + "description": "HASHDEX BITCOIN ETF / US DOLLAR", + "display_symbol": "DEFI/USD", + "nasdaq_symbol": "DEFI", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.DEFI/USD" + } + }, + { + "id": "de79dbfb0fc745c3ff97f572d0163320634803ca750d2d2f75448be7516a4c79", + "attributes": { + "asset_type": "Equity", + "base": "EZBC", + "cms_symbol": "EZBC", + "country": "US", + "cqs_symbol": "EZBC", + "description": "FRANKLIN BITCOIN ETF / US DOLLAR", + "display_symbol": "EZBC/USD", + "nasdaq_symbol": "EZBC", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.EZBC/USD" + } + }, + { + "id": "86536ecb90fcf72f5bda28bc248bcc6838507d9cd311d978d803a7a615b6a382", + "attributes": { + "asset_type": "Equity", + "base": "FBTC", + "cms_symbol": "FBTC", + "country": "US", + "cqs_symbol": "FBTC", + "description": "FIDELITY WISE ORIGIN BITCOIN TRUST / US DOLLAR", + "display_symbol": "FBTC/USD", + "nasdaq_symbol": "FBTC", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.FBTC/USD" + } + }, + { + "id": "7559e07b85b667b6c025e52bfddb36dfaf3366bfef908c3cc7d867636b9e0973", + "attributes": { + "asset_type": "Equity", + "base": "GBTC", + "cms_symbol": "GBTC", + "country": "US", + "cqs_symbol": "GBTC", + "description": "GRAYSCALE BITCOIN TRUST / US DOLLAR", + "display_symbol": "GBTC/USD", + "nasdaq_symbol": "GBTC", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.GBTC/USD" + } + }, + { + "id": "26045f082b4bedb761cf8475cddf9a86e1bce13eaac464f31a1c15987b101d4c", + "attributes": { + "asset_type": "Equity", + "base": "HODL", + "cms_symbol": "HODL", + "country": "US", + "cqs_symbol": "HODL", + "description": "VANECK BITCOIN TRUST / US DOLLAR", + "display_symbol": "HODL/USD", + "nasdaq_symbol": "HODL", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.HODL/USD" + } + }, + { + "id": "72ce464a385582d0f36c9c062dc007785a2a5e0c17deff4e4a2aa2248e173bc3", + "attributes": { + "asset_type": "Equity", + "base": "IBIT", + "cms_symbol": "IBIT", + "country": "US", + "cqs_symbol": "IBIT", + "description": "ISHARES BITCOIN TRUST / US DOLLAR", + "display_symbol": "IBIT/USD", + "nasdaq_symbol": "IBIT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.IBIT/USD" + } + }, + { + "id": "916f9d7fe37e4d06f2033b1f5a6943784318559b4a2fd63e95b4be5ff504241e", + "attributes": { + "asset_type": "Crypto", + "base": "ALT", + "description": "ALTLAYER / US DOLLAR", + "display_symbol": "ALT/USD", + "generic_symbol": "ALTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ALT/USD" + } + }, + { + "id": "3d03464b1870fedfc642b2bc71c101bc5f247cd38f5476c1c825ae4413ca9ac2", + "attributes": { + "asset_type": "Crypto", + "base": "BEAM", + "description": "BEAM / US DOLLAR", + "display_symbol": "BEAM/USD", + "generic_symbol": "BEAMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BEAM/USD" + } + }, + { + "id": "15f63843dcccf30510f48ff6e363f9ead3b0b05d7f7dde6e3890a7e9e4d83e4a", + "attributes": { + "asset_type": "Crypto", + "base": "FUD", + "description": "FUD THE PUG / US DOLLAR", + "display_symbol": "FUD/USD", + "generic_symbol": "FUDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FUD/USD" + } + }, + { + "id": "f17e1ccd9752d346005962dee30a3d99a1dc2ca708a8e2ee70f9eef1b3419c0d", + "attributes": { + "asset_type": "Crypto", + "base": "KAS", + "description": "KASPA / US DOLLAR", + "display_symbol": "KAS/USD", + "generic_symbol": "KASUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.KAS/USD" + } + }, + { + "id": "d911ee913d4c74f0a287692f5f402fc3de836d333e077c2ce1a5d6bb1bca81b0", + "attributes": { + "asset_type": "Crypto", + "base": "SEAM", + "description": "SEAMLESS PROTOCOL / US DOLLAR", + "display_symbol": "SEAM/USD", + "generic_symbol": "SEAMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SEAM/USD" + } + }, + { + "id": "d90fca6e5f33c370d2f2c76296eaaa703971a95271d245aee612ee1c246c9769", + "attributes": { + "asset_type": "Crypto", + "base": "DRIFT", + "description": "DRIFT PROTOCOL / US DOLLAR", + "display_symbol": "DRIFT/USD", + "generic_symbol": "DRIFTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DRIFT/USD" + } + }, + { + "id": "86d196443d86a992f6c4ce38779cdfa36b649e43052ef8bedbe0b503029a94c2", + "attributes": { + "asset_type": "Crypto", + "base": "WETH", + "description": "WRAPPED ETH / US DOLLAR", + "display_symbol": "WETH/USD", + "generic_symbol": "WETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WETH/USD" + } + }, + { + "id": "acc32245ba1a09fe3b857000c8a8ec56e3b1ecc43830ca5bd187029cb3225a45", + "attributes": { + "asset_type": "Crypto", + "base": "ZETA", + "description": "ZETACHAIN / US DOLLAR", + "display_symbol": "ZETA/USD", + "generic_symbol": "ZETAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZETA/USD" + } + }, + { + "id": "d04d0062704f92e5c4c3f287ded1fd6058b1e18422e1a4aa13211bb8d1cb7693", + "attributes": { + "asset_type": "Crypto", + "base": "ZKF", + "description": "ZKFAIR / US DOLLAR", + "display_symbol": "ZKF/USD", + "generic_symbol": "ZKFUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZKF/USD" + } + }, + { + "id": "1af0f30a517dc2b4b40a42f93e1a974a0f1650228433887ee7c8acaeebc588c4", + "attributes": { + "asset_type": "Crypto", + "base": "API3", + "description": "API3 / US DOLLAR", + "display_symbol": "API3/USD", + "generic_symbol": "API3USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.API3/USD" + } + }, + { + "id": "1ba9d60e9e3803fa1e75cbb46b24f1ea98006ffc55933448ab26482283bd1a90", + "attributes": { + "asset_type": "Crypto", + "base": "BGB", + "description": "BITGET TOKEN / US DOLLAR", + "display_symbol": "BGB/USD", + "generic_symbol": "BGBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BGB/USD" + } + }, + { + "id": "b3dc5e81cca9ce9bba72a663af438bfa8ac8ca2c09bf739052bed9567cd1d37f", + "attributes": { + "asset_type": "Crypto", + "base": "CSPR", + "description": "CASPER NETWORK / US DOLLAR", + "display_symbol": "CSPR/USD", + "generic_symbol": "CSPRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CSPR/USD" + } + }, + { + "id": "0dff9bb928c629f0a96392b8ac5be1ab2c585e7bb6b76d7e82c4309f6344ad7e", + "attributes": { + "asset_type": "Crypto", + "base": "DASH", + "description": "DASH / US DOLLAR", + "display_symbol": "DASH/USD", + "generic_symbol": "DASHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DASH/USD" + } + }, + { + "id": "40b976e45171e2a03c1c1d01e655d196d1c5832f95daa3d7a0f3248aa0f5d73d", + "attributes": { + "asset_type": "Crypto", + "base": "ILV", + "description": "ILLUVIUM / US DOLLAR", + "display_symbol": "ILV/USD", + "generic_symbol": "ILVUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ILV/USD" + } + }, + { + "id": "6097593f34a47eeca3bcb0558fdc1f934b58270218b5fe8b6eabe06cc5c72228", + "attributes": { + "asset_type": "Crypto", + "base": "LQTY", + "description": "LIQUITY / US DOLLAR", + "display_symbol": "LQTY/USD", + "generic_symbol": "LQTYUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LQTY/USD" + } + }, + { + "id": "ef4c00c90d7db18382787a4db480b622aa0c526e2802529de0b6ca8c40c9bc56", + "attributes": { + "asset_type": "Crypto", + "base": "QTUM", + "description": "QTUM / US DOLLAR", + "display_symbol": "QTUM/USD", + "generic_symbol": "QTUMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.QTUM/USD" + } + }, + { + "id": "58e1c416f76415b778eafb746ec117afd5b08471a3073650f998a289f9082221", + "attributes": { + "asset_type": "Crypto", + "base": "QUICK", + "description": "QUICKSWAP / US DOLLAR", + "display_symbol": "QUICK/USD", + "generic_symbol": "QUICKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.QUICK/USD" + } + }, + { + "id": "6cfab193cdb5fcdeec20d9518bc0b0cdde91c35ab9e60ddb48d4b59ee8688810", + "attributes": { + "asset_type": "Crypto", + "base": "RSR", + "description": "RESERVE RIGHTS / US DOLLAR", + "display_symbol": "RSR/USD", + "generic_symbol": "RSRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RSR/USD" + } + }, + { + "id": "5738afd664c0d02851d514e291a2a7ef2c17f939670f8a55d7b77985e41c4f28", + "attributes": { + "asset_type": "Crypto", + "base": "SD", + "description": "STADER / US DOLLAR", + "display_symbol": "SD/USD", + "generic_symbol": "SDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SD/USD" + } + }, + { + "id": "041ea9128a746a1f16462f8219a0e2812645906ff4cee59f7908a604618ad75f", + "attributes": { + "asset_type": "Crypto", + "base": "MANEKI", + "description": "MANEKI / US DOLLAR", + "display_symbol": "MANEKI/USD", + "generic_symbol": "MANEKIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MANEKI/USD" + } + }, + { + "id": "9043fdc885ad29256ccc6a74a374753ddc002853c3f12f04a49f58f156be3367", + "attributes": { + "asset_type": "Crypto", + "base": "STG", + "description": "STARGATE / US DOLLAR", + "display_symbol": "STG/USD", + "generic_symbol": "STGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STG/USD" + } + }, + { + "id": "3032a696784e95a00adfff61b8a5570f3fde8b2af1703c5c3de91a00fe7c5706", + "attributes": { + "asset_type": "Crypto", + "base": "SXP", + "description": "SOLAR NETWORK / US DOLLAR", + "display_symbol": "SXP/USD", + "generic_symbol": "SXPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SXP/USD" + } + }, + { + "id": "bae82eff7fd5b50c07aac72f8311a71503217dbb4073aa84437f259575317bb2", + "attributes": { + "asset_type": "Crypto", + "base": "SYN", + "description": "SYNAPSE / US DOLLAR", + "display_symbol": "SYN/USD", + "generic_symbol": "SYNUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SYN/USD" + } + }, + { + "id": "57efa7e2caaf186823e5084384cb36182b9a118200f010fc2ed3c70e39970eaa", + "attributes": { + "asset_type": "Crypto", + "base": "XDC", + "description": "XDC NETWORK / US DOLLAR", + "display_symbol": "XDC/USD", + "generic_symbol": "XDCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XDC/USD" + } + }, + { + "id": "ce5ee7d037701f1be2ff96ddb23015e26197d80344d85b4185ff97e615679128", + "attributes": { + "asset_type": "Crypto", + "base": "XEC", + "description": "ECASH / US DOLLAR", + "display_symbol": "XEC/USD", + "generic_symbol": "XECUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XEC/USD" + } + }, + { + "id": "fb41e26fbcaaed3b2f62dc77ad3db39ed069200cdeb4fc4024177effb99797d0", + "attributes": { + "asset_type": "Crypto", + "base": "WEN", + "description": "WEN / US DOLLAR", + "display_symbol": "WEN/USD", + "generic_symbol": "WENUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WEN/USD" + } + }, + { + "id": "4b41ab30c43c1ae7923f06deb7e77236e5f57be11477d54653c70588329adc63", + "attributes": { + "asset_type": "Crypto", + "base": "EDU", + "description": "OPEN CAMPUS / US DOLLAR", + "display_symbol": "EDU/USD", + "generic_symbol": "EDUUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EDU/USD" + } + }, + { + "id": "d460399983334cc16245439b3229cf50b1e3484c23ab2bb4ab3817d80cf6f2a6", + "attributes": { + "asset_type": "Crypto", + "base": "ONDO", + "description": "ONDO / US DOLLAR", + "display_symbol": "ONDO/USD", + "generic_symbol": "ONDOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ONDO/USD" + } + }, + { + "id": "c1304032f924ebde0d52dd804ff7e7d095f7b4d4eff809cae7f12b7136e089c0", + "attributes": { + "asset_type": "Crypto", + "base": "STONE", + "description": "STAKESTONE ETH / US DOLLAR", + "display_symbol": "STONE/USD", + "generic_symbol": "STONEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STONE/USD" + } + }, + { + "id": "7539c826534cb84d7200d598b4cd3e0064c1bf6d64a0e5240fd92b490db84a61", + "attributes": { + "asset_type": "Crypto", + "base": "DYM", + "description": "DYMENSION / US DOLLAR", + "display_symbol": "DYM/USD", + "generic_symbol": "DYMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DYM/USD" + } + }, + { + "id": "2b86c27685c15e371183b67c29b19865facdd5202cf72a50095041abdefb44db", + "attributes": { + "asset_type": "Crypto", + "base": "S", + "description": "SONIC / US DOLLAR", + "display_symbol": "S/USD", + "generic_symbol": "SUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.S/USD" + } + }, + { + "id": "25479188cef6933d8706b748c2c0d5c0ef43e950be7330f2309854e336e48502", + "attributes": { + "asset_type": "Crypto", + "base": "AEVO", + "description": "AEVO / US DOLLAR", + "display_symbol": "AEVO/USD", + "generic_symbol": "AEVOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AEVO/USD" + } + }, + { + "id": "a31e706b06e181836a458e4585e4cd72bd3cbe3d44dedd5c8783b92d3afc3f2b", + "attributes": { + "asset_type": "Crypto", + "base": "INF", + "description": "SANCTUM INFINITY / US DOLLAR", + "display_symbol": "INF/USD", + "generic_symbol": "INFUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.INF/USD" + } + }, + { + "id": "b7ffd9745161453ca06e4c456c248bb2d7c485bdd56afb924285d25aa5e62905", + "attributes": { + "asset_type": "Crypto", + "base": "PXETH", + "description": "PIREX ETH / US DOLLAR", + "display_symbol": "PXETH/USD", + "generic_symbol": "PXETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PXETH/USD" + } + }, + { + "id": "319dcc3ef64c31266bc7c344a6d260ec21e5670f67e196eb25513d0d0738b3da", + "attributes": { + "asset_type": "Crypto", + "base": "RSWETH", + "description": "RESTAKED SWELL ETH / US DOLLAR", + "display_symbol": "RSWETH/USD", + "generic_symbol": "RSWETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RSWETH/USD" + } + }, + { + "id": "eacabc6304d11fc10a757f63286ef44415d8e91b7a1a525ae94a7ec9398b73f3", + "attributes": { + "asset_type": "Crypto", + "base": "SCA", + "description": "SCALLOP / US DOLLAR", + "display_symbol": "SCA/USD", + "generic_symbol": "SCAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SCA/USD" + } + }, + { + "id": "5c5fa3a9e727abd95e373b3ad98c306cd92e9b56c67157f0a2ff8e7b08a67882", + "attributes": { + "asset_type": "Crypto", + "base": "SLERF", + "description": "SLERF / US DOLLAR", + "display_symbol": "SLERF/USD", + "generic_symbol": "SLERFUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SLERF/USD" + } + }, + { + "id": "963329ad345a5284086dde3f93bb02b708ace7b842e9f6974509dfba26075247", + "attributes": { + "asset_type": "Crypto", + "base": "GHO", + "description": "GHO / US DOLLAR", + "display_symbol": "GHO/USD", + "generic_symbol": "GHOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GHO/USD" + } + }, + { + "id": "3cb013d5c24397514a96a402a39a05fc660df7c1b39b4bf6ca39d5c34ba3e166", + "attributes": { + "asset_type": "Crypto", + "base": "SCRT", + "description": "SECRET / US DOLLAR", + "display_symbol": "SCRT/USD", + "generic_symbol": "SCRTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SCRT/USD" + } + }, + { + "id": "8a426074d644cdae6fad9b639a1f6b0209ff656d06222a2da88c3cfda05c8243", + "attributes": { + "asset_type": "Equity", + "base": "MARA", + "cms_symbol": "MARA", + "country": "US", + "cqs_symbol": "MARA", + "description": "MARATHON DIGITAL HOLDINGS INC / US DOLLAR", + "display_symbol": "MARA/USD", + "nasdaq_symbol": "MARA", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.MARA/USD" + } + }, + { + "id": "1e33535905fdff935af8797e4a0d978e8e3dc939ce81123ba5db2a0dd370fac0", + "attributes": { + "asset_type": "Equity", + "base": "RIOT", + "cms_symbol": "RIOT", + "country": "US", + "cqs_symbol": "RIOT", + "description": "RIOT PLATFORMS INC / US DOLLAR", + "display_symbol": "RIOT/USD", + "nasdaq_symbol": "RIOT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.RIOT/USD" + } + }, + { + "id": "5f7e723b06d1a1ee48a88065f4425d720ebc59a288b849da75befd1ff1c97a72", + "attributes": { + "asset_type": "Crypto", + "base": "EETH", + "description": "ETHER.FI STAKED ETH / US DOLLAR", + "display_symbol": "EETH/USD", + "generic_symbol": "EETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EETH/USD" + } + }, + { + "id": "118dc8b2c6f0ad0add50c7afe42691e0b4550742f6ce5ad78695284de7c241ef", + "attributes": { + "asset_type": "Crypto", + "base": "MBTC", + "description": "MERLIN SEAL BITCOIN / US DOLLAR", + "display_symbol": "MBTC/USD", + "generic_symbol": "MBTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MBTC/USD" + } + }, + { + "id": "1bf21487949a9481cd291b145cceb9fb03548d150d7a3c783eac3c475a20270a", + "attributes": { + "asset_type": "Crypto", + "base": "MOG", + "description": "MOG COIN / US DOLLAR", + "display_symbol": "MOG/USD", + "generic_symbol": "MOGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MOG/USD" + } + }, + { + "id": "2c0978e21abb3009a2ac7bb7a165ea60876d3a80cc693ef24154def076d6ea4d", + "attributes": { + "asset_type": "Crypto", + "base": "POPCAT", + "description": "POPCAT / US DOLLAR", + "display_symbol": "POPCAT/USD", + "generic_symbol": "POPCATUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.POPCAT/USD" + } + }, + { + "id": "af8cadadb1dfa0465daa8b7d6ccbc2c2132d8ede24db47abba7835d099ab40b5", + "attributes": { + "asset_type": "Crypto", + "base": "SUSDE", + "description": "ETHENA STAKED USDE / US DOLLAR", + "display_symbol": "SUSDE/USD", + "generic_symbol": "SUSDEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SUSDE/USD" + } + }, + { + "id": "0ffcf26e35baad1e296f78fc1c83f53dc00faa8ba7910d43fb1dcae7b7bca32f", + "attributes": { + "asset_type": "Crypto", + "base": "TOKEN", + "description": "TOKENFI / US DOLLAR", + "display_symbol": "TOKEN/USD", + "generic_symbol": "TOKENUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TOKEN/USD" + } + }, + { + "id": "3896f9bb1f3a78e4483cde2e5ad3aebcbff9f9f263273a46414c53e857ee926c", + "attributes": { + "asset_type": "Crypto", + "base": "USDA", + "description": "USD ANGLE / US DOLLAR", + "display_symbol": "USDA/USD", + "generic_symbol": "USDAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDA/USD" + } + }, + { + "id": "9bccdc62b87cc23edd91f5d4de018663d7400a07b9c1bb6e2fc14ce5ac2a2a0e", + "attributes": { + "asset_type": "Crypto", + "base": "ENA", + "description": "ETHENA / US DOLLAR", + "display_symbol": "ENA/USD", + "generic_symbol": "ENAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ENA/USD" + } + }, + { + "id": "600696a86f8bb96a0e2a62c75c7749dc2f689dbe7d5ee568bb3af6094d18f41d", + "attributes": { + "asset_type": "Crypto", + "base": "SCETH", + "description": "SONIC ETH / US DOLLAR", + "display_symbol": "SCETH/USD", + "generic_symbol": "SCETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SCETH/USD" + } + }, + { + "id": "87cb94d7ff6c69963c4ac274c9895ca500be2c07c7e42639a34c597293c8a66e", + "attributes": { + "asset_type": "Crypto", + "base": "W", + "description": "WORMHOLE / US DOLLAR", + "display_symbol": "W/USD", + "generic_symbol": "WUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.W/USD" + } + }, + { + "id": "ff2b0c18e7e9e07c8257509b598951c652f2ebccfff824feef507317f3580743", + "attributes": { + "asset_type": "Crypto", + "base": "WEETH", + "description": "WRAPPED EETH / US DOLLAR", + "display_symbol": "WEETH/USD", + "generic_symbol": "WEETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WEETH/USD" + } + }, + { + "id": "6ebee3b25f4f0d76f49c0252e077c2beff3e0208c2df9cb54421369edbf84ce5", + "attributes": { + "asset_type": "Crypto", + "base": "ZEUS", + "description": "ZEUS NETWORK / US DOLLAR", + "display_symbol": "ZEUS/USD", + "generic_symbol": "ZEUSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZEUS/USD" + } + }, + { + "id": "af7c10cb2aa981c02617c1e9d7d50e5b5342d72595ecce6bed20b3a8c5c9dd02", + "attributes": { + "asset_type": "Crypto", + "base": "ZRO", + "description": "LAYER ZERO / US DOLLAR", + "display_symbol": "ZRO/USD", + "generic_symbol": "ZROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZRO/USD" + } + }, + { + "id": "4233e1b4169d30bd17b6149437d1919d2b20ac62fde2a71d576414f95734c5a7", + "attributes": { + "asset_type": "Crypto", + "base": "IOTX", + "description": "IOTEX / US DOLLAR", + "display_symbol": "IOTX/USD", + "generic_symbol": "IOTXUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.IOTX/USD" + } + }, + { + "id": "ad6ded8dd5ec1db096ff7d04d244716169060ccac72f3b788f556ce7fc11282f", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "APXETH", + "contract_id": "eth: 0x9Ba021B0a9b958B5E75cE9f6dff97C7eE52cb3E6", + "description": "DINERO APX ETH / DINERO STAKED ETH REDEMPTION RATE", + "display_symbol": "APXETH/PXETH", + "generic_symbol": "APXETHPXETH", + "quote_currency": "PXETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.APXETH/PXETH.RR" + } + }, + { + "id": "9bc553b3e443fc5900469d0dc0c562b0c664fe6221389c1f875c7a67e17f36de", + "attributes": { + "asset_type": "Crypto", + "base": "BBSOL", + "description": "BYBIT STAKED SOLANA / US DOLLAR", + "display_symbol": "BBSOL/USD", + "generic_symbol": "BBSOLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BBSOL/USD" + } + }, + { + "id": "cdab5332819e763aee470b3090d30b5a72cd0f7a4d8234fd7e59512ce179de89", + "attributes": { + "asset_type": "Crypto", + "base": "BOLD", + "description": "LIQUITY BOLD / US DOLLAR", + "display_symbol": "BOLD/USD", + "generic_symbol": "BOLDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BOLD/USD" + } + }, + { + "id": "6e65b083abfcea9e8f03237c3af7bbd54ab306e74094b9b169b77dff1982487f", + "attributes": { + "asset_type": "Crypto", + "base": "DBR", + "description": "DEBRIDGE / US DOLLAR", + "display_symbol": "DBR/USD", + "generic_symbol": "DBRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DBR/USD" + } + }, + { + "id": "cb182fca89105340a7bb57554aa6d3662282886a7ed4109e94345e73a59dbd90", + "attributes": { + "asset_type": "Crypto", + "base": "MOODENG", + "description": "MOODENG / US DOLLAR", + "display_symbol": "MOODENG/USD", + "generic_symbol": "MOODENGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MOODENG/USD" + } + }, + { + "id": "a29736ec485f4898880af0c504f21b6ef45b3c4ab594120441aa4dd5e05821c4", + "attributes": { + "asset_type": "Crypto", + "base": "USD0++", + "description": "USD0 LIQUID BOND / US DOLLAR", + "display_symbol": "USD0++/USD", + "generic_symbol": "USD0++USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USD0++/USD" + } + }, + { + "id": "40dd8c66a9582c51a1b03a41d6c68ee5c2c04c8b9c054e81d0f95602ffaefe2f", + "attributes": { + "asset_type": "Crypto", + "base": "BERA", + "description": "BERACHAIN / US DOLLAR", + "display_symbol": "BERA/USD", + "generic_symbol": "BERAUSD", + "quote_currency": "USD", + "symbol": "Crypto.BERA/USD", + "weekly_schedule": "America/New_York,O,O,O,O,O,O,O" + } + }, + { + "id": "ef1ebca436c227f537b3cb510a052604b7f616b9f8a54ec206d98b5afcaab1f3", + "attributes": { + "asset_type": "Crypto", + "base": "HONEY", + "description": "HONEY STABLECOIN / US DOLLAR", + "display_symbol": "HONEY/USD", + "generic_symbol": "HONEYUSD", + "quote_currency": "USD", + "symbol": "Crypto.HONEY/USD", + "weekly_schedule": "America/New_York,O,O,O,O,O,O,O" + } + }, + { + "id": "61c0fd031e0da935fce53bdfe18c8fa6ee4a90d9e718d5519fac63cf01452e07", + "attributes": { + "asset_type": "Crypto", + "base": "IBGT", + "description": "INFRARED BERACHAIN GOVERNANCE TOKEN / US DOLLAR", + "display_symbol": "IBGT/USD", + "generic_symbol": "IBGTUSD", + "quote_currency": "USD", + "symbol": "Crypto.IBGT/USD", + "weekly_schedule": "America/New_York,O,O,O,O,O,O,O" + } + }, + { + "id": "5171154fd510fe50bbd2b569679090fe8fa58e330b319167ee02e949df3ac337", + "attributes": { + "asset_type": "Crypto", + "base": "KAIA", + "description": "KAIA / US DOLLAR", + "display_symbol": "KAIA/USD", + "generic_symbol": "KAIAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.KAIA/USD" + } + }, + { + "id": "1505a4d27de7ac925ac89fb1e1e8bbcb834291f8fab1cf1779ad82af140ac350", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "FUSDC", + "contract_id": "eth: 0x9Fb7b4477576Fe5B32be4C1843aFB1e55F251B33", + "description": "FLUID USDC / USD COIN REDEMPTION RATE", + "display_symbol": "FUSDC/USDC", + "generic_symbol": "FUSDCUSDC", + "quote_currency": "USDC", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FUSDC/USDC.RR" + } + }, + { + "id": "b4802ce921ef0b76af8b4fd0349ac8de71eda645f9b8afeb30540b004fd8c713", + "attributes": { + "asset_type": "Crypto", + "base": "GOAT", + "description": "GOATSEUS MAXIMUS / US DOLLAR", + "display_symbol": "GOAT/USD", + "generic_symbol": "GOATUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GOAT/USD" + } + }, + { + "id": "cb909b4d8c475a6ae015b08f3648f924635f88677e1ab5eb62460366b9fe5f52", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "LSETH", + "contract_id": "eth: 0x8c1BEd5b9a0928467c9B1341Da1D7BD5e10b6549", + "description": "LIQUID STAKED ETHEREUM / ETHEREUM REDEMPTION RATE", + "display_symbol": "LSETH/ETH", + "generic_symbol": "LSETHETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LSETH/ETH.RR" + } + }, + { + "id": "b2715ca4f2fbd7984001303bc240b3d9967d558d27a507f9d5d777d2d39c7040", + "attributes": { + "asset_type": "Crypto", + "base": "ORDER", + "description": "ORDERLY NETWORK / US DOLLAR", + "display_symbol": "ORDER/USD", + "generic_symbol": "ORDERUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ORDER/USD" + } + }, + { + "id": "aec401fb010be506ad32a347350d0bc326c69031a46161154a581ae152d4caa6", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "PZETH", + "contract_id": "eth: 0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811", + "description": "RENZO RESTAKED LST / WRAPPED STETH REDEMPTION RATE", + "display_symbol": "PZETH/WSTETH", + "generic_symbol": "PZETHWSTETH", + "quote_currency": "WSTETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PZETH/WSTETH.RR" + } + }, + { + "id": "620508fbf9fff9b65be121d0bc1a883b89f213c0a8f73a69e5c351e7453b2892", + "attributes": { + "asset_type": "Crypto", + "base": "SCR", + "description": "SCROLL / US DOLLAR", + "display_symbol": "SCR/USD", + "generic_symbol": "SCRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SCR/USD" + } + }, + { + "id": "6ad3cc70a29141140b5825c572bedc04483e7f544470ab3f1715af685651f5b4", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SFRAX", + "contract_id": "eth: 0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32", + "description": "STAKED FRAX / FRAX REDEMPTION RATE", + "display_symbol": "SFRAX/FRAX", + "generic_symbol": "SFRAXFRAX", + "quote_currency": "FRAX", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SFRAX/FRAX.RR" + } + }, + { + "id": "79d9a5005864495e406dd896ba4adcee94c31437d2d5555442e0a5cbddd158aa", + "attributes": { + "asset_type": "Crypto", + "base": "SOLVBTC", + "description": "SOLV PROTOCOL BTC / US DOLLAR", + "display_symbol": "SOLVBTC/USD", + "generic_symbol": "SOLVBTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SOLVBTC/USD" + } + }, + { + "id": "ba9c22606f49c77a450fe1e2b54cbfbdbfbe5bb4cb472cf60c9beae51f029a3a", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SUSDS", + "contract_id": "eth: 0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD", + "description": "STAKED USD SKY PROTOCOL / USD SKY PROTOCOL REDEMPTION RATE", + "display_symbol": "SUSDS/USDS", + "generic_symbol": "SUSDSUSDS", + "quote_currency": "USDS", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SUSDS/USDS.RR" + } + }, + { + "id": "30efaf888181d16a27d3b27740d92b6d25e5e3ed138c2ffc0b2fc91d07ac455e", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SYRUPUSDC", + "contract_id": "eth: 0x80ac24aA929eaF5013f6436cdA2a7ba190f5Cc0b", + "description": "SYRUP USDC / USD COIN REDEMPTION RATE", + "display_symbol": "SYRUPUSDC/USDC", + "generic_symbol": "SYRUPUSDCUSDC", + "quote_currency": "USDC", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SYRUPUSDC/USDC.RR" + } + }, + { + "id": "718dee9fd626669f3dfd7bb426d8d986ff82099b2852223dac1bef9c3dec597d", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SYRUPUSDT", + "contract_id": "eth: 0x356B8d89c1e1239Cbbb9dE4815c39A1474d5BA7D", + "description": "SYRUP TETHER / TETHER REDEMPTION RATE", + "display_symbol": "SYRUPUSDT/USDT", + "generic_symbol": "SYRUPUSDTUSDT", + "quote_currency": "USDT", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SYRUPUSDT/USDT.RR" + } + }, + { + "id": "c509e7ebde6c4c59c178f36a08c80eb6312e97adb33b1a78dccc36c186f77995", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "APEETH", + "contract_id": "ape: 0xcF800F4948D16F23333508191B1B1591daF70438", + "description": "APE ETH / ETHEREUM REDEMPTION RATE", + "display_symbol": "APEETH/ETH", + "generic_symbol": "APEETHETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.APEETH/ETH.RR" + } + }, + { + "id": "d215b2dab87b7180ec4f80da36a46038e5ee6a243987a1f88e8a60ab363675dc", + "attributes": { + "asset_type": "Crypto", + "base": "SCUSD", + "description": "SONIC USD / US DOLLAR", + "display_symbol": "SCUSD/USD", + "generic_symbol": "SCUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SCUSD/USD" + } + }, + { + "id": "3881d1850295bf1252ecd185366c0f3e523d9d7bdfaa5949e785af0bab1b1cb0", + "attributes": { + "asset_type": "Crypto", + "base": "BABYDOGE", + "description": "BABY DOGE COIN / US DOLLAR", + "display_symbol": "BABYDOGE/USD", + "generic_symbol": "BABYDOGEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BABYDOGE/USD" + } + }, + { + "id": "468de1a0a95a021099eee4a4228425ca3c04a7a0209d190357e9f49703357eac", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "BBSOL", + "contract_id": "sol: 2aMLkB5p5gVvCwKkdSo5eZAL1WwhZbxezQr1wxiynRhq", + "description": "BYBIT STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "BBSOL/SOL", + "generic_symbol": "BBSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BBSOL/SOL.RR" + } + }, + { + "id": "c171055a63e9b4c09e29cc018129379e0a8581512f6726f5bfe5429985773312", + "attributes": { + "asset_type": "Crypto", + "base": "BLUB", + "description": "BLUB / US DOLLAR", + "display_symbol": "BLUB/USD", + "generic_symbol": "BLUBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BLUB/USD" + } + }, + { + "id": "ed579919b32c486b59e2c6e50770f126320a0fe8bbe625f63f4a0c11fd8b33aa", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "BNSOL", + "contract_id": "sol: Hr9pzexrBge3vgmBNRR8u42CNQgBXdHm4UkUN2DH4a7r", + "description": "BINANCE STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "BNSOL/SOL", + "generic_symbol": "BNSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BNSOL/SOL.RR" + } + }, + { + "id": "fc25f1e02f0217ce41928f7d0edbc14d1ad19715edaa89565b39889fcdfa18aa", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "BSOL", + "contract_id": "sol: stk9ApL5HeVAwPLr3TLhDXdZS8ptVu7zp6ov8HFDuMi", + "description": "BLAZESTAKE STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "BSOL/SOL", + "generic_symbol": "BSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BSOL/SOL.RR" + } + }, + { + "id": "80aaa0a01f380a512cedec5fa5214aef5c1e8fc36d9da4b7cbea6eb514c80301", + "attributes": { + "asset_type": "Crypto", + "base": "CAT", + "description": "SIMON'S CAT / US DOLLAR", + "display_symbol": "CAT/USD", + "generic_symbol": "CATUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CAT/USD" + } + }, + { + "id": "4047cd3d8bc589e2dbed9c6a08cfd2681f3ca0f2867d95f34426f56c9dcd656d", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "CMETH", + "contract_id": "eth: 0x6049bd892f14669a4466e46981eced75d610a2ec", + "description": "COOKED MANTLE ETHER / MANTLE ETHER REDEMPTION RATE", + "display_symbol": "CMETH/METH", + "generic_symbol": "CMETHMETH", + "quote_currency": "METH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CMETH/METH.RR" + } + }, + { + "id": "0b6a5355c0ae694f83e4a66ab697567e0f9b92aedd0d72e17a106f4798a32061", + "attributes": { + "asset_type": "Crypto", + "base": "COOK", + "description": "METH PROTOCOL / US DOLLAR", + "display_symbol": "COOK/USD", + "generic_symbol": "COOKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.COOK/USD" + } + }, + { + "id": "1a57dc6118c0fceef537532588a82e413ae6b7bdc78941e67d7369b9c6c9fcf5", + "attributes": { + "asset_type": "Crypto", + "base": "DOGS", + "description": "DOGS / US DOLLAR", + "display_symbol": "DOGS/USD", + "generic_symbol": "DOGSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DOGS/USD" + } + }, + { + "id": "a4dda231e116e16cd25386b58d48db962a8a0a8c9338ae9049cf8f95a0fdaba1", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "DSOL", + "contract_id": "sol: 9mhGNSPArRMHpLDMSmxAvuoizBqtBGqYdT8WGuqgxNdn", + "description": "DRIFT STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "DSOL/SOL", + "generic_symbol": "DSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DSOL/SOL.RR" + } + }, + { + "id": "e52be8b5eef2d3ad2f1ce00ccb6d0321040192de250593ee533f15553d6b0b40", + "attributes": { + "asset_type": "Crypto", + "base": "FWOG", + "description": "FWOG / US DOLLAR", + "display_symbol": "FWOG/USD", + "generic_symbol": "FWOGUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FWOG/USD" + } + }, + { + "id": "61ecce136413b5e4c4a11670e9bc033c1484a01858ad9cacde9a9b549f984a02", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "GGAVAX", + "contract_id": "avax: 0xA25EaF2906FA1a3a13EdAc9B9657108Af7B703e3", + "description": "GOGOPOOL STAKED AVALANCHE / AVALANCHE REDEMPTION RATE", + "display_symbol": "GGAVAX/AVAX", + "generic_symbol": "GGAVAXAVAX", + "quote_currency": "AVAX", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GGAVAX/AVAX.RR" + } + }, + { + "id": "87c6c0645fec65e73ac4d731a7468b40973a6f0e2a1352d205e004716ab1e7d9", + "attributes": { + "asset_type": "Crypto", + "base": "GRASS", + "description": "GRASS / US DOLLAR", + "display_symbol": "GRASS/USD", + "generic_symbol": "GRASSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GRASS/USD" + } + }, + { + "id": "082736b80698caf1379f0ad10a637668ccd531a96133d1f5053df97bffd2933b", + "attributes": { + "asset_type": "Crypto", + "base": "HIPPO", + "description": "SUDENG / US DOLLAR", + "display_symbol": "HIPPO/USD", + "generic_symbol": "HIPPOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HIPPO/USD" + } + }, + { + "id": "4ffc754629e90be81463c54613709a55f50b1fffb0a45b0cf8138e53a48d99d4", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "HSOL", + "contract_id": "sol: 3wK2g8ZdzAH8FJ7PKr2RcvGh7V9VYson5hrVsJM5Lmws", + "description": "HELIUS STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "HSOL/SOL", + "generic_symbol": "HSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HSOL/SOL.RR" + } + }, + { + "id": "437ead96fa6f26aa3e9d3d405519241818de365c17494a9f18ff2a39b4eebf1a", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "ISEI", + "contract_id": "sei: sei1e3gttzq5e5k49f9f5gzvrl0rltlav65xu6p9xc0aj7e84lantdjqp7cncc", + "description": "SILO STAKED SEI / SEI REDEMPTION RATE", + "display_symbol": "ISEI/SEI", + "generic_symbol": "ISEISEI", + "quote_currency": "SEI", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ISEI/SEI.RR" + } + }, + { + "id": "abc60f52710907f3066de824dc91f7ccadb81ea7df43039728a51bb85d83e496", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "JITOSOL", + "contract_id": "sol: Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb", + "description": "JITO STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "JITOSOL/SOL", + "generic_symbol": "JITOSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JITOSOL/SOL.RR" + } + }, + { + "id": "e65abb0d64e341be2385fe8e1602802650a5453a8535793c5d48af7d8eec466b", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "JLP", + "contract_id": "sol: AVzP2GeRmqGphJsMxWoqjpUifPpCret7LqWhD8NWQK49", + "description": "JUPITER PERPETUAL LIQUIDITY PROVIDER TOKEN / US DOLLAR REDEMPTION RATE", + "display_symbol": "JLP/USD", + "generic_symbol": "JLPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JLP/USD.RR" + } + }, + { + "id": "f39cf45ad68347e5278e202eaae619d18f1b076b181dfc8ae42381c3fb1213dd", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "JUPSOL", + "contract_id": "sol: 8VpRhuxa7sUUepdY3kQiTmX9rS5vx4WgaXiAnXq4KCtr", + "description": "JUPITER STAKED SOLANA/ SOLANA REDEMPTION RATE", + "display_symbol": "JUPSOL/SOL", + "generic_symbol": "JUPSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.JUPSOL/SOL.RR" + } + }, + { + "id": "4dbef5968338ae4f0d3fb72d2eac1c9f5a304f00a0c1b2673169b3dc16e1e023", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "KBTC", + "contract_id": "btc: bc1qqwf6hexnnswmj6yuhz5xyj20frtp8exv7mclck", + "description": "KRAKEN WRAPPED BITCOIN / BITCOIN REDEMPTION RATE", + "display_symbol": "KBTC/BTC", + "generic_symbol": "KBTCBTC", + "quote_currency": "BTC", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.KBTC/BTC.RR" + } + }, + { + "id": "5d9a06d343973a2707c7fcc9a850c2e797ada5d86999cab3af4499f78d648bb0", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "LINEAR", + "contract_id": "near: linear-protocol.near", + "description": "LINEAR PROTOCOL STAKED NEAR / NEAR REDEMPTION RATE", + "display_symbol": "LINEAR/NEAR", + "generic_symbol": "LINEARNEAR", + "quote_currency": "NEAR", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LINEAR/NEAR.RR" + } + }, + { + "id": "d54ab790c9c7f0baf06e388eed8bf8f8c50651a3a5d29068d00c425de1b4276c", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "LST", + "contract_id": "sol: DqhH94PjkZsjAqEze2BEkWhFQJ6EyU6MdtMphMgnXqeK", + "description": "LIQUID STAKING TOKEN / SOLANA REDEMPTION RATE", + "display_symbol": "LST/SOL", + "generic_symbol": "LSTSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LST/SOL.RR" + } + }, + { + "id": "4237ca691b6491fc5cb69ec49705e9084f068132f5984fb01a4a0f0aa576e474", + "attributes": { + "asset_type": "Crypto", + "base": "META", + "description": "METADAO / US DOLLAR", + "display_symbol": "META/USD", + "generic_symbol": "METAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.META/USD" + } + }, + { + "id": "738366ff824695f18899e4cc74b17680a49721119ddeabc76f6afc962a5ef39d", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "MSOL", + "contract_id": "sol: 8szGkuLTAux9XMgZ2vtY39jVSowEcpBfFfD8hXSEqdGC", + "description": "MARINADE STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "MSOL/SOL", + "generic_symbol": "MSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MSOL/SOL.RR" + } + }, + { + "id": "d08d569e449304f107f3765f92289861755195444d97448ac2b17f8fd13db501", + "attributes": { + "asset_type": "Crypto", + "base": "NEIRO", + "description": "NEIRO / US DOLLAR", + "display_symbol": "NEIRO/USD", + "generic_symbol": "NEIROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.NEIRO/USD" + } + }, + { + "id": "974eb051e11757a2b843cac0ea9d032eb2f017d2ac1a4a560fe295c6818ae865", + "attributes": { + "asset_type": "Crypto", + "base": "PNUT", + "description": "PEANUT THE SQUIRREL / US DOLLAR", + "display_symbol": "PNUT/USD", + "generic_symbol": "PNUTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PNUT/USD" + } + }, + { + "id": "d1804aee0885afdf68aec9561c1d7f3c98e779ee386398717e2347fd31919c4a", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SAVAX", + "contract_id": "avax: 0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be", + "description": "BENQI LIQUID STAKED AVALANCHE / AVALANCHE REDEMPTION RATE", + "display_symbol": "SAVAX/AVAX", + "generic_symbol": "SAVAXAVAX", + "quote_currency": "AVAX", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SAVAX/AVAX.RR" + } + }, + { + "id": "e780550f401cd271b47b8fc087dde3eabb74a2979c4cd54ea3a36b3a350f74fa", + "attributes": { + "asset_type": "Crypto", + "base": "OM", + "description": "MANTRA / US DOLLAR", + "display_symbol": "OM/USD", + "generic_symbol": "OMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.OM/USD" + } + }, + { + "id": "5d3214d5142a7704ad36ebbf22fe232d95d22b3bff1061c4e8bae4625bde9ec1", + "attributes": { + "asset_type": "Crypto", + "base": "SPX6900", + "description": "SPX6900 / US DOLLAR", + "display_symbol": "SPX6900/USD", + "generic_symbol": "SPX6900USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SPX6900/USD" + } + }, + { + "id": "9a6c336130ddeea9b288e931e78a21346809e51aaae89ac6d7a44134e87124e5", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SSOL", + "contract_id": "sol: po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2", + "description": "SOLAYER STAKED SOLANA / SOLANA REDEMPTION RATE", + "display_symbol": "SSOL/SOL", + "generic_symbol": "SSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SSOL/SOL.RR" + } + }, + { + "id": "c5dedd7540189d750f51d8b11d0a5e2821e57f4afff0b6e2564a7cdd80aec83e", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "STCORE", + "contract_id": "core: 0xf5fA1728bABc3f8D2a617397faC2696c958C3409", + "description": "CORE DAO STAKED CORE / CORE REDEMPTION RATE", + "display_symbol": "STCORE/CORE", + "generic_symbol": "STCORECORE", + "quote_currency": "CORE", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STCORE/CORE.RR" + } + }, + { + "id": "5db179848795c542d5302d051fb142c0edd1dfa1717cf6d2a8fb642974a1222c", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "STHAPT", + "contract_id": "apt: 0xfaf4e633ae9eb31366c9ca24214231760926576c7b625313b3688b5e900731f6", + "description": "STAKED THALA APTOS / THALA APTOS REDEMPTION RATE", + "display_symbol": "STHAPT/THAPT", + "generic_symbol": "STHAPTTHAPT", + "quote_currency": "THAPT", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STHAPT/THAPT.RR" + } + }, + { + "id": "c4ac706de84b3a9ff0e13af8185c73d1aa09ef5555c06c42994fe1c4195b3fb1", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "STNEAR", + "contract_id": "near: meta-pool.near", + "description": "STAKED NEAR / NEAR REDEMPTION RATE", + "display_symbol": "STNEAR/NEAR", + "generic_symbol": "STNEARNEAR", + "quote_currency": "NEAR", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STNEAR/NEAR.RR" + } + }, + { + "id": "20e95d7a8585b7becf2a3b10cd52dcc5a600506ca6b1174926fdfd65e8acd105", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "STTON", + "contract_id": "ton: EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k", + "description": "BEMO STAKED TON / TON REDEMPTION RATE", + "display_symbol": "STTON/TON", + "generic_symbol": "STTONTON", + "quote_currency": "TON", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STTON/TON.RR" + } + }, + { + "id": "bd7ca6dd16daeb77f1c4231ef554755d12d31a130772e1a22a2bf1157df5eb20", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "TETH", + "contract_id": "0x8c1902A5996978F2628558DD93d309F7e3926dfD", + "description": "ECLIPSE TURBO ETHEREUM / ETHEREUM REDEMPTION RATE", + "display_symbol": "TETH/ETH", + "generic_symbol": "TETHETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TETH/ETH.RR" + } + }, + { + "id": "6049693758bf0247380709688fe724f0065d332fff7c81cfe91bf8ce2366125a", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "THAPT", + "contract_id": "apt: 0xfaf4e633ae9eb31366c9ca24214231760926576c7b625313b3688b5e900731f6", + "description": "THALA APTOS / APTOS REDEMPTION RATE", + "display_symbol": "THAPT/APT", + "generic_symbol": "THAPTAPT", + "quote_currency": "APT", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.THAPT/APT.RR" + } + }, + { + "id": "efd6f853f03f33e734f4ba66c506197ee4c912666771f67809adec97a28311f0", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "TRUAPT", + "contract_id": "apt: 0x6f8ca77dd0a4c65362f475adb1c26ae921b1d75aa6b70e53d0e340efd7d8bc80", + "description": "TRUFIN STAKED APTOS / APTOS REDEMPTION RATE", + "display_symbol": "TRUAPT/APT", + "generic_symbol": "TRUAPTAPT", + "quote_currency": "APT", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TRUAPT/APT.RR" + } + }, + { + "id": "aa7870d18599bca32d48da22387c9ec9387e6d868f41cdd34151ab88dffe98fa", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "TSTON", + "contract_id": "ton: EQCkWxfyhAkim3g2DjKQQg8T5P4g-Q1-K_jErGcDJZ4i-vqR", + "description": "TONSTAKERS STAKED TON / TON REDEMPTION RATE", + "display_symbol": "TSTON/TON", + "generic_symbol": "TSTONTON", + "quote_currency": "TON", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.TSTON/TON.RR" + } + }, + { + "id": "b830deccf8c0013fdc3caccd4a59c4efbaab77f04df371b2bc21c3040ca7d167", + "attributes": { + "asset_type": "Crypto", + "base": "ACT", + "description": "ACT I THE AI PROPHECY / US DOLLAR", + "display_symbol": "ACT/USD", + "generic_symbol": "ACTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ACT/USD" + } + }, + { + "id": "e3fb2e21cf7f34a168c766a412688e29bf443cdc4c6f0debed6cfb602343703c", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "GLBTC", + "contract_id": "bevm: 0x63755D3C05e21A56127EA0c5f4a0d85ca8676bf7", + "description": "GLOBAL LIQUIDITY BITCOIN / WRAPPED BITCOIN REDEMPTION RATE", + "display_symbol": "GLBTC/WBTC", + "generic_symbol": "GLBTCWBTC", + "quote_currency": "WBTC", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GLBTC/WBTC.RR" + } + }, + { + "id": "8208b3a250accb0dd37394f0799a4717e3d664a3bf2342eff47a7cab82258b87", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "HTON", + "contract_id": "ton: EQCLyZHP4Xe8fpchQz76O-_RmUhaVc_9BAoGyJrwJrcbz2eZ", + "description": "HIPO STAKED TON / TON REDEMPTION RATE", + "display_symbol": "HTON/TON", + "generic_symbol": "HTONTON", + "quote_currency": "TON", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HTON/TON.RR" + } + }, + { + "id": "19ff3d1f02dcb92113d5d93ea0792fc1b1ab36b2c0a0086b6ae68cfb301d2a29", + "attributes": { + "asset_type": "Crypto", + "base": "SAVE", + "description": "SAVE / US DOLLAR", + "display_symbol": "SAVE/USD", + "generic_symbol": "SAVEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SAVE/USD" + } + }, + { + "id": "05d7146b85e8ddace543f565e698c62afc1282f6b34da7d0e4dd2a16c0a85934", + "attributes": { + "asset_type": "Crypto", + "base": "RETARDIO", + "description": "RETARDIO / US DOLLAR", + "display_symbol": "RETARDIO/USD", + "generic_symbol": "RETARDIOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RETARDIO/USD" + } + }, + { + "id": "bc365ddaa4b5076695d620592e054880cfc56b9e56dc4766712b7f2f640021ae", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "YUSD", + "contract_id": "eth: 0x1CE7D9942ff78c328A4181b9F3826fEE6D845A97", + "description": "YIELDFI YUSD / TETHER REDEMPTION RATE", + "display_symbol": "YUSD/USDT", + "generic_symbol": "YUSDUSDT", + "quote_currency": "USDT", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.YUSD/USDT.RR" + } + }, + { + "id": "aedc7f72fd5dc1ce33cd3c48b278a66c1890d6f27ad0a4f4a037b732a9c7d020", + "attributes": { + "asset_type": "Crypto", + "base": "BAN", + "description": "COMEDIAN / US DOLLAR", + "display_symbol": "BAN/USD", + "generic_symbol": "BANUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BAN/USD" + } + }, + { + "id": "e6fb68646109b58d8a43b8dfaf1e8a97762cf3e19ae26c5b0dfbf758e91574af", + "attributes": { + "asset_type": "Crypto", + "base": "CLND", + "description": "COLEND / US DOLLAR", + "display_symbol": "CLND/USD", + "generic_symbol": "CLNDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CLND/USD" + } + }, + { + "id": "c52ae731759af0781e8f782bad74d4b171e0966f9e6f5b647aa7905ab5a9348c", + "attributes": { + "asset_type": "Crypto", + "base": "DSOL", + "description": "DRIFT STAKED SOLANA / US DOLLAR", + "display_symbol": "DSOL/USD", + "generic_symbol": "DSOLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.DSOL/USD" + } + }, + { + "id": "b96fba4a200b55e23df1a58256b8e7fbb336b759beaf1d664ad98a439bdf9df1", + "attributes": { + "asset_type": "Crypto", + "base": "HDRO", + "description": "HYDRO PROTOCOL / US DOLLAR", + "display_symbol": "HDRO/USD", + "generic_symbol": "HDROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HDRO/USD" + } + }, + { + "id": "33c2eb214f05d15cbb798fad5e7eda3f695947cffd1a837d143a87f130e57e28", + "attributes": { + "asset_type": "Crypto", + "base": "HYPE", + "description": "HYPERLIQUID / US DOLLAR", + "display_symbol": "HYPE/USD", + "generic_symbol": "HYPEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HYPE/USD" + } + }, + { + "id": "dbeaa726d30daa5101b170fa7dc8ab1ecbd7dc2c36df270636adb2ff202d2b85", + "attributes": { + "asset_type": "Crypto", + "base": "LUCE", + "description": "LUCE / US DOLLAR", + "display_symbol": "LUCE/USD", + "generic_symbol": "LUCEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LUCE/USD" + } + }, + { + "id": "639fe9b4eaddf6ffa13c23d605b7abdc48900711bb49a14bbcabf4168009f7cf", + "attributes": { + "asset_type": "Crypto", + "base": "MORPHO", + "description": "MORPHO / US DOLLAR", + "display_symbol": "MORPHO/USD", + "generic_symbol": "MORPHOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MORPHO/USD" + } + }, + { + "id": "170abee0eaf0ab38cf9f4cc1fed8530c2c7a8a0e9bd9ecae822ae8324dc5aa29", + "attributes": { + "asset_type": "Crypto", + "base": "PONKE", + "description": "PONKE / US DOLLAR", + "display_symbol": "PONKE/USD", + "generic_symbol": "PONKEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PONKE/USD" + } + }, + { + "id": "8ea81a6268d64bcf147af17d44047cb3d455b6ac6b0a516383ff3c2cf4bf095a", + "attributes": { + "asset_type": "Crypto", + "base": "SOL", + "description": "SOLANA / ETH", + "display_symbol": "SOL/ETH", + "generic_symbol": "SOLETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SOL/ETH" + } + }, + { + "id": "494aedc9caa29d9982ee646814edaf3ef9c3e335a2c4f18a52217111bd6e968e", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SUSD", + "contract_id": "sol: susdabGDNbhrnCa6ncrYo81u4s9GM8ecK2UwMyZiq4X", + "description": "SOLAYER US DOLLAR / US DOLLAR REDEMPTION RATE", + "display_symbol": "SUSD/USD", + "generic_symbol": "SUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SUSD/USD.RR" + } + }, + { + "id": "4d4d3ecfda129f81d9145c8545ef2fa4216925b83a2616a2115834638d256560", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SUSDZ", + "contract_id": "eth: 0x547213367cfB08ab418E7b54d7883b2C2AA27Fd7", + "description": "STAKED ANZEN USDZ / ANZEN USDZ REDEMPTION RATE", + "display_symbol": "SUSDZ/USDZ", + "generic_symbol": "SUSDZUSDZ", + "quote_currency": "USDZ", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SUSDZ/USDZ.RR" + } + }, + { + "id": "f5acb470db07777347028d1c795af63345054692dfe9725d87835416901fee6a", + "attributes": { + "asset_type": "Crypto", + "base": "USDZ", + "description": "ANZEN USDZ / US DOLLAR", + "display_symbol": "USDZ/USD", + "generic_symbol": "USDZUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDZ/USD" + } + }, + { + "id": "72659ae077b91352b65e5a9da9dcc3281cf449781e337ffb143543b68a40f903", + "attributes": { + "asset_type": "Crypto", + "base": "ZEREBRO", + "description": "ZEREBRO / US DOLLAR", + "display_symbol": "ZEREBRO/USD", + "generic_symbol": "ZEREBROUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ZEREBRO/USD" + } + }, + { + "id": "57ffdeeb4ef151a372cb74b375be2a6c736743529475ebf14f4ce7328aac79c2", + "attributes": { + "asset_type": "Equity", + "base": "ADBE", + "cms_symbol": "ADBE", + "country": "US", + "cqs_symbol": "ADBE", + "description": "ADOBE INC / US DOLLAR", + "display_symbol": "ADBE/USD", + "nasdaq_symbol": "ADBE", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.ADBE/USD" + } + }, + { + "id": "a4eb624886ed9728bc7f95ee5790e88a879a187b1e7bcb84fe5eb50d702ee06b", + "attributes": { + "asset_type": "Equity", + "base": "AMD", + "cms_symbol": "AMD", + "country": "US", + "cqs_symbol": "AMD", + "description": "ADVANCED MICRO DEVICES INC / US DOLLAR", + "display_symbol": "AMD/USD", + "nasdaq_symbol": "AMD", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.AMD/USD" + } + }, + { + "id": "e5d36ec860d4b89397090300f7215c8472d3c27b57cbce33c6c91b7f79148f38", + "attributes": { + "asset_type": "Equity", + "base": "HOOD", + "cms_symbol": "HOOD", + "country": "US", + "cqs_symbol": "HOOD", + "description": "ROBINHOOD MARKETS INC / US DOLLAR", + "display_symbol": "HOOD/USD", + "nasdaq_symbol": "HOOD", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.HOOD/USD" + } + }, + { + "id": "ed51f142e88fe862f8e8a7d67da9240b79acfc6fadb6b1c22a6982ea32bb488b", + "attributes": { + "asset_type": "Equity", + "base": "PYPL", + "cms_symbol": "PYPL", + "country": "US", + "cqs_symbol": "PYPL", + "description": "PAYPAL HOLDINGS INC / US DOLLAR", + "display_symbol": "PYPL/USD", + "nasdaq_symbol": "PYPL", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.PYPL/USD" + } + }, + { + "id": "4a47282a1d494c1eb6ab9408093c12d8732d0394d4a6670d5d3bfb4c084a8806", + "attributes": { + "asset_type": "Equity", + "base": "RDDT", + "cms_symbol": "RDDT", + "country": "US", + "cqs_symbol": "RDDT", + "description": "REDDIT INC / US DOLLAR", + "display_symbol": "RDDT/USD", + "nasdaq_symbol": "RDDT", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.RDDT/USD" + } + }, + { + "id": "786e9acd291aaa874aefc15ab88123f623378559c0092f6d00816f3c1fd79a87", + "attributes": { + "asset_type": "Equity", + "base": "UBER", + "cms_symbol": "UBER", + "country": "US", + "cqs_symbol": "UBER", + "description": "UBER TECHNOLOGIES INC / US DOLLAR", + "display_symbol": "UBER/USD", + "nasdaq_symbol": "UBER", + "quote_currency": "USD", + "schedule": "America/New_York;0930-1600,0930-1600,0930-1600,0930-1600,0930-1600,C,C;1224/0930-1300,1225/C,0101/C,0109/C,0120/C,0217/C,0418/C,0526/C,0619/C", + "symbol": "Equity.US.UBER/USD" + } + }, + { + "id": "86aa3b87f19d34354026e9188513ed3578db6f7a9013424713cf3965b0a7eecb", + "attributes": { + "asset_type": "Crypto", + "base": "ME", + "description": "MAGIC EDEN / US DOLLAR", + "display_symbol": "ME/USD", + "generic_symbol": "MEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ME/USD" + } + }, + { + "id": "4f2bb30030139bbefd836f88c02910bc1de74a2ec7b46346a0b49a365a522481", + "attributes": { + "asset_type": "Crypto", + "base": "CHILLGUY", + "description": "CHILL GUY / US DOLLAR", + "display_symbol": "CHILLGUY/USD", + "generic_symbol": "CHILLGUYUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CHILLGUY/USD" + } + }, + { + "id": "c2979ce9510106cac0bbe6794b707841564e568bdc1805324f8d93cc18e8632a", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SDEUSD", + "contract_id": "eth: 0x5C5b196aBE0d54485975D1Ec29617D42D9198326", + "description": "STAKED ELIXIR DEUSD / ELIXIR DEUSD REDEMPTION RATE", + "display_symbol": "SDEUSD/DEUSD", + "generic_symbol": "SDEUSDDEUSD", + "quote_currency": "DEUSD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SDEUSD/DEUSD.RR" + } + }, + { + "id": "2edd5dd7519df253208c889b9c46fa0ec684d6bdb1787c5e32e415a6b2f0ae25", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "EBTC", + "contract_id": "eth: 0x657e8C867D8B37dCC18fA4Caead9C45EB088C642", + "description": "ETHER.FI STAKED BITCOIN / LOMBARD STAKED BITCOIN REDEMPTION RATE", + "display_symbol": "EBTC/LBTC", + "generic_symbol": "EBTCLBTC", + "quote_currency": "LBTC", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EBTC/LBTC.RR" + } + }, + { + "id": "3e36c7e10630ecb2bd4350c2520cb6505b5c4127c1d5136ce643c446ef6ff6f6", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "LBTC", + "contract_id": "erc: 0x8236a87084f8b84306f72007f36f2618a5634494", + "description": "LOMBARD STAKED BITCOIN / BITCOIN REDEMPTION RATE", + "display_symbol": "LBTC/BTC", + "generic_symbol": "LBTCBTC", + "quote_currency": "BTC", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LBTC/BTC.RR" + } + }, + { + "id": "2f7d9daf245875b7d2c8892aa576f6dd1d2ae78a37c4d16d00b553e5971c7cc9", + "attributes": { + "asset_type": "Crypto", + "base": "RLP", + "description": "RESOLV RLP / US DOLLAR", + "display_symbol": "RLP/USD", + "generic_symbol": "RLPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RLP/USD" + } + }, + { + "id": "431c72884571045b102d7006bd8f4be40396d0a3aa9364dc1f07ad147ab7e5e5", + "attributes": { + "asset_type": "Crypto", + "base": "USR", + "description": "RESOLV USR / US DOLLAR", + "display_symbol": "USR/USD", + "generic_symbol": "USRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USR/USD" + } + }, + { + "id": "c440f9d7835c2d306e601007d2456dc1d07f447daff207961e12db6cf6c50864", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "WSTUSR", + "contract_id": "eth: 0x1202F5C7b4B9E47a1A484E8B270be34dbbC75055", + "description": "WRAPPED STAKED RESOLV USR / RESOLV USR REDEMPTION RATE", + "display_symbol": "WSTUSR/USR", + "generic_symbol": "WSTUSRUSR", + "quote_currency": "USR", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WSTUSR/USR.RR" + } + }, + { + "id": "8665ba68406e83e3f8fa4de23a5cc7eeb4e4a04ad15502134c69b20465d83445", + "attributes": { + "asset_type": "Commodities", + "description": "BRENT CRUDE OIL CFD", + "display_symbol": "UKOILSPOT/USD", + "generic_symbol": "UKOILSPOT", + "quote_currency": "USD", + "schedule": "GMT;0100-2200,0100-2200,0100-2200,0100-2200,0100-2145,C,C;1224/0100-1900,1225/C,1226/0600-2200,1231/0100-2000,0101/C,0102/0600-2200", + "symbol": "Commodities.UKOILSPOT" + } + }, + { + "id": "9fcd465b2535b80f3a9de49f3869467242aa1677559b9943ac3c84aa24e2d506", + "attributes": { + "asset_type": "Crypto", + "base": "AAA", + "description": "AAA CAT / US DOLLAR", + "display_symbol": "AAA/USD", + "generic_symbol": "AAAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AAA/USD" + } + }, + { + "id": "64559fcff99ed360543d7f4778f4712d2dc5c303ec1ac98f084c88c647ff7689", + "attributes": { + "asset_type": "Crypto", + "base": "BLUE", + "description": "BLUEFIN / US DOLLAR", + "display_symbol": "BLUE/USD", + "generic_symbol": "BLUEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BLUE/USD" + } + }, + { + "id": "43e969f2dde77e765180795138101095bda3f359c356160c3f5cc815b5412fcc", + "attributes": { + "asset_type": "Crypto", + "base": "F", + "description": "SYNFUTURES / US DOLLAR", + "display_symbol": "F/USD", + "generic_symbol": "FUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.F/USD" + } + }, + { + "id": "39b74c4ff2b4f7d69343f090d0c42a9c6ceaab796ab9f624e6f7d24df7babfad", + "attributes": { + "asset_type": "Crypto", + "base": "ION", + "description": "IONIC PROTOCOL / US DOLLAR", + "display_symbol": "ION/USD", + "generic_symbol": "IONUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ION/USD" + } + }, + { + "id": "20bd8424c3a88b8159b555474c9675602822ff8eb08eb134975ed08972d4163f", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SCFX", + "contract_id": "cfx: 0x1858a8d367e69cd9e23d0da4169885a47f05f1be", + "description": "SHUI STAKED CONFLUX / CONFLUX REDEMPTION RATE", + "display_symbol": "SCFX/CFX", + "generic_symbol": "SCFXCFX", + "quote_currency": "CFX", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SCFX/CFX.RR" + } + }, + { + "id": "a10095ccc2eda27177e6b731fb5d72c876949315cae8075247843f5c1d09be38", + "attributes": { + "asset_type": "Crypto", + "base": "SEND", + "description": "SUILEND / US DOLLAR", + "display_symbol": "SEND/USD", + "generic_symbol": "SENDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SEND/USD" + } + }, + { + "id": "3b704f570fe52c37f68f0aa97536c58b98b3be2302cd8b6c416577e7095424de", + "attributes": { + "asset_type": "Crypto", + "base": "SEND2", + "description": "SENDCOIN / US DOLLAR", + "display_symbol": "SEND/USD", + "generic_symbol": "SEND2USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SENDCOIN.SEND/USD" + } + }, + { + "id": "df444de7d0d3daebbf72bc104290bf5791115f96735cf2dd7845f06191d25f40", + "attributes": { + "asset_type": "Crypto", + "base": "UNIBTC", + "description": "UNIVERSAL BITCOIN / US DOLLAR", + "display_symbol": "UNIBTC/USD", + "generic_symbol": "UNIBTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.UNIBTC/USD" + } + }, + { + "id": "458bd5b657e3018094f1d3141d06c968b4d3c766418a50d949113b3dc5ffe87f", + "attributes": { + "asset_type": "Crypto", + "base": "USDL", + "description": "LIFT DOLLAR / US DOLLAR", + "display_symbol": "USDL/USD", + "generic_symbol": "USDLUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDL/USD" + } + }, + { + "id": "01f0c8e81a25334d0a01f483b14cfac85d0e84675b307f751c576ee8cbce6aee", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "XCFX", + "contract_id": "cfx: 0x808F81acC4618a05c8253a7b41240468c08cD64C", + "description": "NUCLEON STAKED CONFLUX / CONFLUX REDEMPTION RATE", + "display_symbol": "XCFX/CFX", + "generic_symbol": "XCFXCFX", + "quote_currency": "CFX", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XCFX/CFX.RR" + } + }, + { + "id": "a447ea6a6a1e5aff7096aa248be6fef3cc55a91e27b5d377109aae8936d2173c", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "YNETH", + "contract_id": "eth: 0x09db87A538BD693E9d08544577d5cCfAA6373A48", + "description": "YIELDNEST RESTAKED ETHEREUM / ETHEREUM REDEMPTION RATE", + "display_symbol": "YNETH/ETH", + "generic_symbol": "YNETHETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.YNETH/ETH.RR" + } + }, + { + "id": "49edd8af4da23d742f78f9b51f7ea094fe22faf55a4a4a38f01a8595fd9cf02a", + "attributes": { + "asset_type": "Crypto", + "base": "ALPHA", + "description": "ALPHA FI / US DOLLAR", + "display_symbol": "ALPHA/USD", + "generic_symbol": "ALPHAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ALPHA/USD" + } + }, + { + "id": "c9fc16e32ed7f906849de3f2d9870e886b254994442a740e03d6376a14dc3d39", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "BOBAETH", + "contract_id": "eth: 0x78cba912751dB70CBd77C1111A4d1aDD077AD99A", + "description": "BOBA DEFAULT ETHEREUM / ETHEREUM REDEMPTION RATE", + "display_symbol": "BOBAETH/ETH", + "generic_symbol": "BOBAETHETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BOBAETH/ETH.RR" + } + }, + { + "id": "8878f93812d2dc98ff9e86605095aae0d1de4bdea1ac1566024124f906706b61", + "attributes": { + "asset_type": "Crypto", + "base": "CDXUSD", + "description": "COD3X US DOLLAR / US DOLLAR", + "display_symbol": "CDXUSD/USD", + "generic_symbol": "CDXUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CDXUSD/USD" + } + }, + { + "id": "36f14199000c6087ae1c3a015e4adeb1f10ddd8cbdf5a0d5ec64b6e5da45f7c1", + "attributes": { + "asset_type": "Crypto", + "base": "CROAK", + "description": "CROAK / US DOLLAR", + "display_symbol": "CROAK/USD", + "generic_symbol": "CROAKUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.CROAK/USD" + } + }, + { + "id": "e790e59871a6281e7cd63ea132f160d1a55387ffafcd208c3c9b3a797d69565f", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "EAPT", + "contract_id": "apt: 0xa0281660ff6ca6c1b68b55fcb9b213c2276f90ad007ad27fd003cf2f3478e96e", + "description": "ECHO STAKED APTOS / APTOS REDEMPTION RATE", + "display_symbol": "EAPT/APT", + "generic_symbol": "EAPTAPT", + "quote_currency": "APT", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EAPT/APT.RR" + } + }, + { + "id": "121c7db74e28653b9e15c39574fe2c0b6fb46dc6dc6c9249fcbc9ee35d0ed34f", + "attributes": { + "asset_type": "Crypto", + "base": "FOXY", + "description": "FOXY / US DOLLAR", + "display_symbol": "FOXY/USD", + "generic_symbol": "FOXYUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FOXY/USD" + } + }, + { + "id": "5568dc00cb2f10d0031e7a2890f5a7a6a4674b628d7f142f890956c5d24cf30c", + "attributes": { + "asset_type": "Crypto", + "base": "MSETH", + "description": "METRONOME SYNTHETIC ETHEREUM / US DOLLAR", + "display_symbol": "MSETH/USD", + "generic_symbol": "MSETHUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MSETH/USD" + } + }, + { + "id": "7ff7b2c24c5ae1f822b00c8928779ea91b663d4da1d3aa1d0bebeedf807720ae", + "attributes": { + "asset_type": "Crypto", + "base": "MSUSD", + "description": "METRONOME SYNTHETIC US DOLLAR / US DOLLAR", + "display_symbol": "MSUSD/USD", + "generic_symbol": "MSUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MSUSD/USD" + } + }, + { + "id": "e1bda16416a057a705e21967a5686d34da60f4ff448e528b1c53908d6a5bd995", + "attributes": { + "asset_type": "Crypto", + "base": "AI16Z", + "description": "AI16Z / US DOLLAR", + "display_symbol": "AI16Z/USD", + "generic_symbol": "AI16ZUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AI16Z/USD" + } + }, + { + "id": "89fa109abd89f62776032713216d8692e4c33b446ec405a8252c8975345c1788", + "attributes": { + "asset_type": "Crypto", + "base": "FARTCOIN", + "description": "FARTCOIN / US DOLLAR", + "display_symbol": "FARTCOIN/USD", + "generic_symbol": "FARTCOINUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FARTCOIN/USD" + } + }, + { + "id": "c85acfee2a3dce4c1ee2ad04899c2fa1e856d4ef2c2ce7e2939916f32fbba177", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "FRUSDT", + "contract_id": "arb: 0x7378292384751b208BD8609ca8D45F027539FA5c", + "description": "FRACTALITY LR TETHER / TETHER REDEMPTION RATE", + "display_symbol": "FRUSDT/USDT", + "generic_symbol": "FRUSDTUSDT", + "quote_currency": "USDT", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FRUSDT/USDT.RR" + } + }, + { + "id": "edbbe22824a55972b54c1efa361db0c989dd56b5ab747be8aa0121264fb8efc5", + "attributes": { + "asset_type": "Crypto", + "base": "FUEL", + "description": "FUEL / US DOLLAR", + "display_symbol": "FUEL/USD", + "generic_symbol": "FUELUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FUEL/USD" + } + }, + { + "id": "29448db25efe8c72afe3a3c0c0631337408bd3cbc5f09d3dab0754460a965dae", + "attributes": { + "asset_type": "Crypto", + "base": "LBTC", + "description": "LOMBARD STAKED BITCOIN / US DOLLAR", + "display_symbol": "LBTC/USD", + "generic_symbol": "LBTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LBTC/USD" + } + }, + { + "id": "4eb57e55ebb46e7fab85a5022a312fe786bd37d10712141882429604309d3900", + "attributes": { + "asset_type": "Crypto", + "base": "PUPS", + "description": "PUPS WORLD PEACE / US DOLLAR", + "display_symbol": "PUPS/USD", + "generic_symbol": "PUPSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PUPS/USD" + } + }, + { + "id": "ee73d7026bed517d5d418a0dae286345142d4ed21a465eb5968a49e32a41a07e", + "attributes": { + "asset_type": "Crypto", + "base": "RLUSD", + "description": "RIPPLE US DOLLAR / US DOLLAR", + "display_symbol": "RLUSD/USD", + "generic_symbol": "RLUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.RLUSD/USD" + } + }, + { + "id": "e15e7ee64e69e05ba4e8572ae06a26408fabfcfdf71189f5d7a03389b7120d1f", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SCRVUSD", + "contract_id": "eth: 0x0655977FEb2f289A4aB78af67BAB0d17aAb84367", + "description": "SAVINGS CURVE US DOLLAR / CURVE US DOLLAR REDEMPTION RATE", + "display_symbol": "SCRVUSD/CRVUSD", + "generic_symbol": "SCRVUSDCRVUSD", + "quote_currency": "CRVUSD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SCRVUSD/CRVUSD.RR" + } + }, + { + "id": "2390047a8ea64f8ea52058d00ceca098c4009f55a6ba1240dcee750aa43d94a3", + "attributes": { + "asset_type": "Crypto", + "base": "SONIC", + "description": "SONIC SVM / US DOLLAR", + "display_symbol": "SONIC/USD", + "generic_symbol": "SONICUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SONIC/USD" + } + }, + { + "id": "d9e71734362ef56c175a1c67573c1a30bebed43f810cae5d5312b7fa2cb17f29", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SONICSOL", + "contract_id": "spl: po1osKDWYF9oiVEGmzKA4eTs8eMveFRMox3bUKazGN2", + "description": "SONIC AVS TOKEN / SOLANA REDEMPTION RATE", + "display_symbol": "SONICSOL/SOL", + "generic_symbol": "SONICSOLSOL", + "quote_currency": "SOL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SONICSOL/SOL.RR" + } + }, + { + "id": "9aa005cd4865bdd90ff939f4bca56b6974f67cacdf8ee0be79fed6f02a026d69", + "attributes": { + "asset_type": "Crypto", + "base": "STREAM", + "description": "STREAMFLOW / US DOLLAR", + "display_symbol": "STREAM/USD", + "generic_symbol": "STREAMUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STREAM/USD" + } + }, + { + "id": "97d41659948033fe7589aa5d03d19d2b3df1690e660c62dbac199c43fa6af712", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "WM", + "contract_id": "eth: 0x437cc33344a0B27A429f795ff6B469C72698B291", + "description": "WRAPPED M / M REDEMPTION RATE", + "display_symbol": "WM/M", + "generic_symbol": "WMM", + "quote_currency": "M", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WM/M.RR" + } + }, + { + "id": "931eb1e072017e328b9acf8427da401a054c44ed264a2bbc95ba5b6716ee5702", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "WUSDL", + "contract_id": "eth: 0x7751E2F4b8ae93EF6B79d86419d42FE3295A4559", + "description": "WRAPPED LIFT DOLLAR / LIFT DOLLAR REDEMPTION RATE", + "display_symbol": "WUSDL/USDL", + "generic_symbol": "WUSDLUSDL", + "quote_currency": "USDL", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WUSDL/USDL.RR" + } + }, + { + "id": "163c1c3aefe197f26b4772162a781e4903ed0274d415d0e8c88f7abd5999b59e", + "attributes": { + "asset_type": "Crypto", + "base": "XION", + "description": "XION / US DOLLAR", + "display_symbol": "XION/USD", + "generic_symbol": "XIONUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.XION/USD" + } + }, + { + "id": "4e7d63c8de0ef90ee98eb49523a0f97665074b77926bf5a3ba8e84b29e9e0daa", + "attributes": { + "asset_type": "Crypto", + "base": "EBTC", + "description": "ETHER.FI STAKED BITCOIN / US DOLLAR", + "display_symbol": "EBTC/USD", + "generic_symbol": "EBTCUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.EBTC/USD" + } + }, + { + "id": "b042d7ee7ac90a90beb96530382880818b9ffc46b334d5715465a6467e90f0bd", + "attributes": { + "asset_type": "Crypto", + "base": "HAI", + "description": "HAI INDEX TOKEN / US DOLLAR", + "display_symbol": "HAI/USD", + "generic_symbol": "HAIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HAI/USD" + } + }, + { + "id": "de70689fb3aef09d4fa0a3bb9f27f47409a137762145bd8d23987bcac20b053d", + "attributes": { + "asset_type": "Crypto", + "base": "HFUN", + "description": "HYPURR FUN / US DOLLAR", + "display_symbol": "HFUN/USD", + "generic_symbol": "HFUNUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.HFUN/USD" + } + }, + { + "id": "24962ee7e8bfb09b2c67ac5da58d0ebf6c1bfe8aaf7b1661829a478f5c5716f9", + "attributes": { + "asset_type": "Crypto", + "base": "LOFI", + "description": "LOFI THE YETI / US DOLLAR", + "display_symbol": "LOFI/USD", + "generic_symbol": "LOFIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.LOFI/USD" + } + }, + { + "id": "b15350a1d00d8fff6892fbe568184a39e3dc554923395c0415883f5b83c3237f", + "attributes": { + "asset_type": "Crypto", + "base": "MONKY", + "description": "WISE MONKY / US DOLLAR", + "display_symbol": "MONKY/USD", + "generic_symbol": "MONKYUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.MONKY/USD" + } + }, + { + "id": "6218119a1a852aacd395b1dea66f3f7d391ce77b03b1b9a88c0ec745f46f47d6", + "attributes": { + "asset_type": "Crypto", + "base": "ODOS", + "description": "ODOS / US DOLLAR", + "display_symbol": "ODOS/USD", + "generic_symbol": "ODOSUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.ODOS/USD" + } + }, + { + "id": "7dbe576fe2b652adbed69d5549341870f4618d0afc170eca7e1e2083a5b951ca", + "attributes": { + "asset_type": "Crypto", + "base": "PIP", + "description": "PIP / US DOLLAR", + "display_symbol": "PIP/USD", + "generic_symbol": "PIPUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PIP/USD" + } + }, + { + "id": "605bd71cea3666c2e9ecfb435f69e4410fc3b64618bd6ca7070bb57aa58fee76", + "attributes": { + "asset_type": "Crypto", + "base": "PURR", + "description": "PURR / US DOLLAR", + "display_symbol": "PURR/USD", + "generic_symbol": "PURRUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.PURR/USD" + } + }, + { + "id": "da703fbee4d7ee09aba630ef809efd79d162202bdf976ae8258875207ebd5557", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "STSUI", + "contract_id": "sui: 0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55", + "description": "ALPHAFI STAKED SUI / SUI REDEMPTION RATE", + "display_symbol": "STSUI/SUI", + "generic_symbol": "STSUISUI", + "quote_currency": "STSUI", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.STSUI/SUI.RR" + } + }, + { + "id": "c9c850843e79e09afdeea11f35287dc949f4aef1b6245ebea4ab6df3e75ab7f5", + "attributes": { + "asset_type": "Crypto", + "base": "USDTB", + "description": "ETHENA USDTB / US DOLLAR", + "display_symbol": "USDTB/USD", + "generic_symbol": "USDTBUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USDTB/USD" + } + }, + { + "id": "b2b0fe82636d7b8d2198680300ef9d7ef786b63f7452fb1273739bb6a893ab43", + "attributes": { + "asset_type": "Crypto", + "base": "USUAL", + "description": "USUAL MONEY / US DOLLAR", + "display_symbol": "USUAL/USD", + "generic_symbol": "USUALUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.USUAL/USD" + } + }, + { + "id": "107303380ab2fe3031ee410ce39491d63b49195db5c64a82cd5b62623c7c1f89", + "attributes": { + "asset_type": "Crypto", + "base": "VANA", + "description": "VANA / US DOLLAR", + "display_symbol": "VANA/USD", + "generic_symbol": "VANAUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.VANA/USD" + } + }, + { + "id": "5132c446424f863feb315a51453268ed30404db46abd57c4ecf186980d1c6b10", + "attributes": { + "asset_type": "Crypto", + "base": "VELO", + "description": "VELODROME / US DOLLAR", + "display_symbol": "VELO/USD", + "generic_symbol": "VELOUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.VELO/USD" + } + }, + { + "id": "e227516d19f7aea46e7865b727715f108622cbc8b51f09af77f444b52f7153d5", + "attributes": { + "asset_type": "Crypto", + "base": "WAGMI", + "description": "WAGMI / US DOLLAR", + "display_symbol": "WAGMI/USD", + "generic_symbol": "WAGMIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.WAGMI/USD" + } + }, + { + "id": "5b0ff700e34dcd29f0f5cfb430fcf3d630bdb7aa96f8a5d683cb2ba121f58ef1", + "attributes": { + "asset_type": "Crypto", + "base": "AIXBT", + "description": "AIXBT BY VIRTUALS / US DOLLAR", + "display_symbol": "AIXBT/USD", + "generic_symbol": "AIXBTUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AIXBT/USD" + } + }, + { + "id": "f60bfb7e6d268ac2a2e58c7fcc6a8e93c33ec6e21f504980d723294110c4ee2c", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "APEUSD", + "contract_id": "ape: 0xA2235d059F80e176D931Ef76b6C51953Eb3fBEf4", + "description": "APE USD / DAI REDEMPTION RATE", + "display_symbol": "APEUSD/DAI", + "generic_symbol": "APEUSDDAI", + "quote_currency": "DAI", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.APEUSD/DAI.RR" + } + }, + { + "id": "835b7cec7c974fa3c8844a1289999687d7987f4b316fe6a6c8f7313a386ac6b7", + "attributes": { + "asset_type": "Crypto", + "base": "USDA2", + "description": "USD AVALON / US DOLLAR", + "display_symbol": "USDA/USD", + "generic_symbol": "USDA2USD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.AVALON.USDA/USD" + } + }, + { + "id": "71ac209c5ea5a7f1f75128da53ac4d59986ebf4cd0e8954c14e7ba65b6b86ebf", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "BERASTONE", + "contract_id": "eth: 0x8f88aE3798E8fF3D0e0DE7465A0863C9bbB577f0", + "description": "BERACHAIN STAKESTONE ETHEREUM / ETHEREUM REDEMPTION RATE", + "display_symbol": "BERASTONE/ETH", + "generic_symbol": "BERASTONEETH", + "quote_currency": "ETH", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.BERASTONE/ETH.RR" + } + }, + { + "id": "7d16b98f14162b93db75cbf9b60870aa3bda234f2be536f14c5149a474d4460c", + "attributes": { + "asset_type": "Crypto", + "base": "FAI", + "description": "FREYSA / US DOLLAR", + "display_symbol": "FAI/USD", + "generic_symbol": "FAIUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FAI/USD" + } + }, + { + "id": "ca5bf8f35856aefdb0eadfef6912e03385bd647c0118ae1c04a1289f33fa5d37", + "attributes": { + "asset_type": "Crypto", + "base": "FET", + "description": "ARTIFICIAL SUPERINTELLIGENCE ALLIANCE / US DOLLAR", + "display_symbol": "FET/USD", + "generic_symbol": "FETUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.FET/USD" + } + }, + { + "id": "937b9ecc8f5fc1e2b28d7b5e63a5af169c3169c7143129ee936c15d7866d4a6c", + "attributes": { + "asset_type": "Crypto", + "base": "GRIFFAIN", + "description": "GRIFFAIN / US DOLLAR", + "display_symbol": "GRIFFAIN/USD", + "generic_symbol": "GRIFFAINUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.GRIFFAIN/USD" + } + }, + { + "id": "bdca32d09123bbd2fb3fdd48d38bd80284071f38e031376a4ea95ee54086bb95", + "attributes": { + "asset_type": "Crypto Redemption Rate", + "base": "SLVLUSD", + "contract_id": "eth: 0x4737D9b4592B40d51e110b94c9C043c6654067Ae", + "description": "STAKED LEVEL US DOLLAR / US DOLLAR REDEMPTION RATE", + "display_symbol": "SLVLUSD/USD", + "generic_symbol": "SLVLUSDUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.SLVLUSD/USD.RR" + } + }, + { + "id": "b563fa10ac9886778ca73f802152a049e70f591f5f20996f37a9ecc13074c54a", + "attributes": { + "asset_type": "Crypto", + "base": "THE", + "description": "THENA / US DOLLAR", + "display_symbol": "THE/USD", + "generic_symbol": "THEUSD", + "quote_currency": "USD", + "schedule": "America/New_York;O,O,O,O,O,O,O;", + "symbol": "Crypto.THE/USD" + } + } +] \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/price_feeds/schema.json b/packages/plugin-pyth-data/src/price_feeds/schema.json new file mode 100644 index 0000000000..a036280f02 --- /dev/null +++ b/packages/plugin-pyth-data/src/price_feeds/schema.json @@ -0,0 +1 @@ +{"openapi":"3.0.3","info":{"title":"hermes","description":"Hermes is an agent that provides Verified Prices from the Pythnet Pyth Oracle.","license":{"name":""},"version":"0.8.1"},"paths":{"/api/get_price_feed":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/{publish_time} instead**","description":"**Deprecated: use /v2/updates/price/{publish_time} instead**\n\nGet a price update for a price feed with a specific timestamp\n\nGiven a price feed id and timestamp, retrieve the Pyth price update closest to that timestamp.","operationId":"get_price_feed","parameters":[{"name":"id","in":"query","description":"The id of the price feed to get an update for.","required":true,"schema":{"$ref":"#/components/schemas/PriceIdInput"}},{"name":"publish_time","in":"query","description":"The unix timestamp in seconds. This endpoint will return the first update whose\npublish_time is >= the provided value.","required":true,"schema":{"type":"integer","format":"int64"},"example":1717632000},{"name":"verbose","in":"query","description":"If true, include the `metadata` field in the response with additional metadata about the\nprice update.","required":false,"schema":{"type":"boolean"}},{"name":"binary","in":"query","description":"If true, include the binary price update in the `vaa` field of each returned feed. This\nbinary data can be submitted to Pyth contracts to update the on-chain price.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price update retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcPriceFeed"}}}}},"deprecated":true}},"/api/get_vaa":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/{publish_time} instead**","description":"**Deprecated: use /v2/updates/price/{publish_time} instead**\n\nGet a VAA for a price feed with a specific timestamp\n\nGiven a price feed id and timestamp, retrieve the Pyth price update closest to that timestamp.","operationId":"get_vaa","parameters":[{"name":"id","in":"query","description":"The ID of the price feed to get an update for.","required":true,"schema":{"$ref":"#/components/schemas/PriceIdInput"}},{"name":"publish_time","in":"query","description":"The unix timestamp in seconds. This endpoint will return the first update whose\npublish_time is >= the provided value.","required":true,"schema":{"type":"integer","format":"int64"},"example":1690576641}],"responses":{"200":{"description":"Price update retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVaaResponse"}}}},"404":{"description":"Price update not found","content":{"text/plain":{"schema":{"type":"string"}}}}},"deprecated":true}},"/api/get_vaa_ccip":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/{publish_time} instead**","description":"**Deprecated: use /v2/updates/price/{publish_time} instead**\n\nGet a VAA for a price feed using CCIP\n\nThis endpoint accepts a single argument which is a hex-encoded byte string of the following form:\n` `","operationId":"get_vaa_ccip","parameters":[{"name":"data","in":"query","required":true,"schema":{"$ref":"#/components/schemas/GetVaaCcipInput"}}],"responses":{"200":{"description":"Price update retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVaaCcipResponse"}}}}},"deprecated":true}},"/api/latest_price_feeds":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/latest instead**","description":"**Deprecated: use /v2/updates/price/latest instead**\n\nGet the latest price updates by price feed id.\n\nGiven a collection of price feed ids, retrieve the latest Pyth price for each price feed.","operationId":"latest_price_feeds","parameters":[{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"verbose","in":"query","description":"If true, include the `metadata` field in the response with additional metadata about\nthe price update.","required":false,"schema":{"type":"boolean"}},{"name":"binary","in":"query","description":"If true, include the binary price update in the `vaa` field of each returned feed.\nThis binary data can be submitted to Pyth contracts to update the on-chain price.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RpcPriceFeed"}}}}}},"deprecated":true}},"/api/latest_vaas":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/updates/price/latest instead**","description":"**Deprecated: use /v2/updates/price/latest instead**\n\nGet VAAs for a set of price feed ids.\n\nGiven a collection of price feed ids, retrieve the latest VAA for each. The returned VAA(s) can\nbe submitted to the Pyth contract to update the on-chain price. If VAAs are not found for every\nprovided price ID the call will fail.","operationId":"latest_vaas","parameters":[{"name":"ids[]","in":"query","description":"Get the VAAs for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"}],"responses":{"200":{"description":"VAAs retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}},"example":["UE5BVQEAAAADuAEAAAADDQC1H7meY5fTed0FsykIb8dt+7nKpbuzfvU2DplDi+dcUl8MC+UIkS65+rkiq+zmNBxE2gaxkBkjdIicZ/fBo+X7AAEqp+WtlWb84np8jJfLpuQ2W+l5KXTigsdAhz5DyVgU3xs+EnaIZxBwcE7EKzjMam+V9rlRy0CGsiQ1kjqqLzfAAQLsoVO0Vu5gVmgc8XGQ7xYhoz36rsBgMjG+e3l/B01esQi/KzPuBf/Ar8Sg5aSEOvEU0muSDb+KIr6d8eEC+FtcAAPZEaBSt4ysXVL84LUcJemQD3SiG30kOfUpF8o7/wI2M2Jf/LyCsbKEQUyLtLbZqnJBSfZJR5AMsrnHDqngMLEGAAY4UDG9GCpRuPvg8hOlsrXuPP3zq7yVPqyG0SG+bNo8rEhP5b1vXlHdG4bZsutX47d5VZ6xnFROKudx3T3/fnWUAQgAU1+kUFc3e0ZZeX1dLRVEryNIVyxMQIcxWwdey+jlIAYowHRM0fJX3Scs80OnT/CERwh5LMlFyU1w578NqxW+AQl2E/9fxjgUTi8crOfDpwsUsmOWw0+Q5OUGhELv/2UZoHAjsaw9OinWUggKACo4SdpPlHYldoWF+J2yGWOW+F4iAQre4c+ocb6a9uSWOnTldFkioqhd9lhmV542+VonCvuy4Tu214NP+2UNd/4Kk3KJCf3iziQJrCBeLi1cLHdLUikgAQtvRFR/nepcF9legl+DywAkUHi5/1MNjlEQvlHyh2XbMiS85yu7/9LgM6Sr+0ukfZY5mSkOcvUkpHn+T+Nw/IrQAQ7lty5luvKUmBpI3ITxSmojJ1aJ0kj/dc0ZcQk+/qo0l0l3/eRLkYjw5j+MZKA8jEubrHzUCke98eSoj8l08+PGAA+DAKNtCwNZe4p6J1Ucod8Lo5RKFfA84CPLVyEzEPQFZ25U9grUK6ilF4GhEia/ndYXLBt3PGW3qa6CBBPM7rH3ABGAyYEtUwzB4CeVedA5o6cKpjRkIebqDNSOqltsr+w7kXdfFVtsK2FMGFZNt5rbpIR+ppztoJ6eOKHmKmi9nQ99ARKkTxRErOs9wJXNHaAuIRV38o1pxRrlQRzGsRuKBqxcQEpC8OPFpyKYcp6iD5l7cO/gRDTamLFyhiUBwKKMP07FAWTEJv8AAAAAABrhAfrtrFhR4yubI7X5QRqMK6xKrj7U3XuBHdGnLqSqcQAAAAAAGp0GAUFVV1YAAAAAAAUYUmIAACcQBsfKUtr4PgZbIXRxRESU79PjE4IBAFUA5i32yLSoX+GmfbRNwS3l2zMPesZrctxliv7fD0pBW0MAAAKqqMJFwAAAAAAqE/NX////+AAAAABkxCb7AAAAAGTEJvoAAAKqIcWxYAAAAAAlR5m4CP/mPsh1IezjYpDlJ4GRb5q4fTs2LjtyO6M0XgVimrIQ4kSh1qg7JKW4gbGkyRntVFR9JO/GNd3FPDit0BK6M+JzXh/h12YNCz9wxlZTvXrNtWNbzqT+91pvl5cphhSPMfAHyEzTPaGR9tKDy9KNu56pmhaY32d2vfEWQmKo22guegeR98oDxs67MmnUraco46a3zEnac2Bm80pasUgMO24="]}}}},"deprecated":true}},"/api/price_feed_ids":{"get":{"tags":["rest"],"summary":"**Deprecated: use /v2/price_feeds instead**","description":"**Deprecated: use /v2/price_feeds instead**\n\nGet the set of price feed IDs.\n\nThis endpoint fetches all of the price feed IDs for which price updates can be retrieved.","operationId":"price_feed_ids","responses":{"200":{"description":"Price feed ids retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RpcPriceIdentifier"}}}}}},"deprecated":true}},"/v2/price_feeds":{"get":{"tags":["rest"],"summary":"Get the set of price feeds.","description":"Get the set of price feeds.\n\nThis endpoint fetches all price feeds from the Pyth network. It can be filtered by asset type\nand query string.","operationId":"price_feeds_metadata","parameters":[{"name":"query","in":"query","description":"Optional query parameter. If provided, the results will be filtered to all price feeds whose symbol contains the query string. Query string is case insensitive.","required":false,"schema":{"type":"string","nullable":true},"example":"bitcoin"},{"name":"asset_type","in":"query","description":"Optional query parameter. If provided, the results will be filtered by asset type. Possible values are crypto, equity, fx, metal, rates. Filter string is case insensitive.","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/AssetType"}],"nullable":true},"example":"crypto"}],"responses":{"200":{"description":"Price feeds metadata retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceFeedMetadata"}}}}}}}},"/v2/updates/price/latest":{"get":{"tags":["rest"],"summary":"Get the latest price updates by price feed id.","description":"Get the latest price updates by price feed id.\n\nGiven a collection of price feed ids, retrieve the latest Pyth price for each price feed.","operationId":"latest_price_updates","parameters":[{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the price update in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed price update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdate"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v2/updates/price/stream":{"get":{"tags":["rest"],"summary":"SSE route handler for streaming price updates.","description":"SSE route handler for streaming price updates.","operationId":"price_stream_sse_handler","parameters":[{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the price update in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed price update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"allow_unordered","in":"query","description":"If true, allows unordered price updates to be included in the stream.","required":false,"schema":{"type":"boolean"}},{"name":"benchmarks_only","in":"query","description":"If true, only include benchmark prices that are the initial price updates at a given timestamp (i.e., prevPubTime != pubTime).","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdate"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v2/updates/price/{publish_time}":{"get":{"tags":["rest"],"summary":"Get the latest price updates by price feed id.","description":"Get the latest price updates by price feed id.\n\nGiven a collection of price feed ids, retrieve the latest Pyth price for each price feed.","operationId":"timestamp_price_updates","parameters":[{"name":"publish_time","in":"path","description":"The unix timestamp in seconds. This endpoint will return the first update whose\npublish_time is >= the provided value.","required":true,"schema":{"type":"integer","format":"int64"},"example":1717632000},{"name":"ids[]","in":"query","description":"Get the most recent price update for this set of price feed ids.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the price update in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed price update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Price updates retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdate"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v2/updates/publisher_stake_caps/latest":{"get":{"tags":["rest"],"summary":"Get the most recent publisher stake caps update data.","description":"Get the most recent publisher stake caps update data.","operationId":"latest_publisher_stake_caps","parameters":[{"name":"encoding","in":"query","description":"Get the most recent publisher stake caps update data.\nOptional encoding type. If true, return the message in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the parsed update in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Publisher stake caps update data retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestPublisherStakeCapsUpdateDataResponse"}}}}}}},"/v2/updates/twap/{window_seconds}/latest":{"get":{"tags":["rest"],"summary":"Get the latest TWAP by price feed id with a custom time window.","description":"Get the latest TWAP by price feed id with a custom time window.\n\nGiven a collection of price feed ids, retrieve the latest Pyth TWAP price for each price feed.","operationId":"latest_twaps","parameters":[{"name":"window_seconds","in":"path","description":"The time window in seconds over which to calculate the TWAP, ending at the current time.\nFor example, a value of 300 would return the most recent 5 minute TWAP.\nMust be greater than 0 and less than or equal to 600 seconds (10 minutes).","required":true,"schema":{"type":"integer","format":"int64","minimum":0},"example":"300"},{"name":"ids[]","in":"query","description":"Get the most recent TWAP (time weighted average price) for this set of price feed ids.\nThe `binary` data contains the signed start & end cumulative price updates needed to calculate\nthe TWAPs on-chain. The `parsed` data contains the calculated TWAPs.\n\nThis parameter can be provided multiple times to retrieve multiple price updates,\nfor example see the following query string:\n\n```\n?ids[]=a12...&ids[]=b4c...\n```","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/PriceIdInput"}},"example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},{"name":"encoding","in":"query","description":"Optional encoding type. If true, return the cumulative price updates in the encoding specified by the encoding parameter. Default is `hex`.","required":false,"schema":{"$ref":"#/components/schemas/EncodingType"}},{"name":"parsed","in":"query","description":"If true, include the calculated TWAP in the `parsed` field of each returned feed. Default is `true`.","required":false,"schema":{"type":"boolean"}},{"name":"ignore_invalid_price_ids","in":"query","description":"If true, invalid price IDs in the `ids` parameter are ignored. Only applicable to the v2 APIs. Default is `false`.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"TWAPs retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwapsResponse"}}}},"404":{"description":"Price ids not found","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AssetType":{"type":"string","enum":["crypto","fx","equity","metal","rates","crypto_redemption_rate"]},"BinaryUpdate":{"type":"object","required":["encoding","data"],"properties":{"data":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/EncodingType"}}},"EncodingType":{"type":"string","enum":["hex","base64"]},"GetVaaCcipInput":{"type":"string","format":"binary"},"GetVaaCcipResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"string"}}},"GetVaaResponse":{"type":"object","required":["vaa","publishTime"],"properties":{"publishTime":{"type":"integer","format":"int64","example":1690576641},"vaa":{"type":"string","description":"The VAA binary represented as a base64 string.","example":"UE5BVQEAAAADuAEAAAADDQC1H7meY5fTed0FsykIb8dt+7nKpbuzfvU2DplDi+dcUl8MC+UIkS65+rkiq+zmNBxE2gaxkBkjdIicZ/fBo+X7AAEqp+WtlWb84np8jJfLpuQ2W+l5KXTigsdAhz5DyVgU3xs+EnaIZxBwcE7EKzjMam+V9rlRy0CGsiQ1kjqqLzfAAQLsoVO0Vu5gVmgc8XGQ7xYhoz36rsBgMjG+e3l/B01esQi/KzPuBf/Ar8Sg5aSEOvEU0muSDb+KIr6d8eEC+FtcAAPZEaBSt4ysXVL84LUcJemQD3SiG30kOfUpF8o7/wI2M2Jf/LyCsbKEQUyLtLbZqnJBSfZJR5AMsrnHDqngMLEGAAY4UDG9GCpRuPvg8hOlsrXuPP3zq7yVPqyG0SG+bNo8rEhP5b1vXlHdG4bZsutX47d5VZ6xnFROKudx3T3/fnWUAQgAU1+kUFc3e0ZZeX1dLRVEryNIVyxMQIcxWwdey+jlIAYowHRM0fJX3Scs80OnT/CERwh5LMlFyU1w578NqxW+AQl2E/9fxjgUTi8crOfDpwsUsmOWw0+Q5OUGhELv/2UZoHAjsaw9OinWUggKACo4SdpPlHYldoWF+J2yGWOW+F4iAQre4c+ocb6a9uSWOnTldFkioqhd9lhmV542+VonCvuy4Tu214NP+2UNd/4Kk3KJCf3iziQJrCBeLi1cLHdLUikgAQtvRFR/nepcF9legl+DywAkUHi5/1MNjlEQvlHyh2XbMiS85yu7/9LgM6Sr+0ukfZY5mSkOcvUkpHn+T+Nw/IrQAQ7lty5luvKUmBpI3ITxSmojJ1aJ0kj/dc0ZcQk+/qo0l0l3/eRLkYjw5j+MZKA8jEubrHzUCke98eSoj8l08+PGAA+DAKNtCwNZe4p6J1Ucod8Lo5RKFfA84CPLVyEzEPQFZ25U9grUK6ilF4GhEia/ndYXLBt3PGW3qa6CBBPM7rH3ABGAyYEtUwzB4CeVedA5o6cKpjRkIebqDNSOqltsr+w7kXdfFVtsK2FMGFZNt5rbpIR+ppztoJ6eOKHmKmi9nQ99ARKkTxRErOs9wJXNHaAuIRV38o1pxRrlQRzGsRuKBqxcQEpC8OPFpyKYcp6iD5l7cO/gRDTamLFyhiUBwKKMP07FAWTEJv8AAAAAABrhAfrtrFhR4yubI7X5QRqMK6xKrj7U3XuBHdGnLqSqcQAAAAAAGp0GAUFVV1YAAAAAAAUYUmIAACcQBsfKUtr4PgZbIXRxRESU79PjE4IBAFUA5i32yLSoX+GmfbRNwS3l2zMPesZrctxliv7fD0pBW0MAAAKqqMJFwAAAAAAqE/NX////+AAAAABkxCb7AAAAAGTEJvoAAAKqIcWxYAAAAAAlR5m4CP/mPsh1IezjYpDlJ4GRb5q4fTs2LjtyO6M0XgVimrIQ4kSh1qg7JKW4gbGkyRntVFR9JO/GNd3FPDit0BK6M+JzXh/h12YNCz9wxlZTvXrNtWNbzqT+91pvl5cphhSPMfAHyEzTPaGR9tKDy9KNu56pmhaY32d2vfEWQmKo22guegeR98oDxs67MmnUraco46a3zEnac2Bm80pasUgMO24="}}},"LatestPublisherStakeCapsUpdateDataResponse":{"type":"object","required":["binary"],"properties":{"binary":{"$ref":"#/components/schemas/BinaryUpdate"},"parsed":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPublisherStakeCapsUpdate"},"nullable":true}}},"ParsedPriceFeedTwap":{"type":"object","required":["id","start_timestamp","end_timestamp","twap","down_slots_ratio"],"properties":{"down_slots_ratio":{"type":"string","description":"The % of slots where the network was down over the TWAP window.\nA value of zero indicates no slots were missed over the window, and\na value of one indicates that every slot was missed over the window.\nThis is a float value stored as a string to avoid precision loss."},"end_timestamp":{"type":"integer","format":"int64","description":"The end unix timestamp of the window"},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"},"start_timestamp":{"type":"integer","format":"int64","description":"The start unix timestamp of the window"},"twap":{"$ref":"#/components/schemas/RpcPrice"}}},"ParsedPriceUpdate":{"type":"object","required":["id","price","ema_price","metadata"],"properties":{"ema_price":{"$ref":"#/components/schemas/RpcPrice"},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"},"metadata":{"$ref":"#/components/schemas/RpcPriceFeedMetadataV2"},"price":{"$ref":"#/components/schemas/RpcPrice"}}},"ParsedPublisherStakeCap":{"type":"object","required":["publisher","cap"],"properties":{"cap":{"type":"integer","format":"int64","minimum":0},"publisher":{"type":"string"}}},"ParsedPublisherStakeCapsUpdate":{"type":"object","required":["publisher_stake_caps"],"properties":{"publisher_stake_caps":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPublisherStakeCap"}}}},"PriceFeedMetadata":{"type":"object","required":["id","attributes"],"properties":{"attributes":{"type":"object","additionalProperties":{"type":"string"}},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"}}},"PriceIdInput":{"type":"string","description":"A price id is a 32-byte hex string, optionally prefixed with \"0x\".\nPrice ids are case insensitive.\n\nExamples:\n* 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43\n* e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43\n\nSee https://pyth.network/developers/price-feed-ids for a list of all price feed ids.","example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},"PriceUpdate":{"type":"object","required":["binary"],"properties":{"binary":{"$ref":"#/components/schemas/BinaryUpdate"},"parsed":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPriceUpdate"},"nullable":true}}},"RpcPrice":{"type":"object","description":"A price with a degree of uncertainty at a certain time, represented as a price +- a confidence\ninterval.\n\nThe confidence interval roughly corresponds to the standard error of a normal distribution.\nBoth the price and confidence are stored in a fixed-point numeric representation, `x *\n10^expo`, where `expo` is the exponent. For example:","required":["price","conf","expo","publish_time"],"properties":{"conf":{"type":"string","description":"The confidence interval associated with the price, stored as a string to avoid precision loss","example":"509500001"},"expo":{"type":"integer","format":"int32","description":"The exponent associated with both the price and confidence interval. Multiply those values\nby `10^expo` to get the real value.","example":-8},"price":{"type":"string","description":"The price itself, stored as a string to avoid precision loss","example":"2920679499999"},"publish_time":{"type":"integer","format":"int64","description":"When the price was published. The `publish_time` is a unix timestamp, i.e., the number of\nseconds since the Unix epoch (00:00:00 UTC on 1 Jan 1970).","example":1717632000}}},"RpcPriceFeed":{"type":"object","required":["id","price","ema_price"],"properties":{"ema_price":{"$ref":"#/components/schemas/RpcPrice"},"id":{"$ref":"#/components/schemas/RpcPriceIdentifier"},"metadata":{"allOf":[{"$ref":"#/components/schemas/RpcPriceFeedMetadata"}],"nullable":true},"price":{"$ref":"#/components/schemas/RpcPrice"},"vaa":{"type":"string","description":"The VAA binary represented as a base64 string.","example":"UE5BVQEAAAADuAEAAAADDQC1H7meY5fTed0FsykIb8dt+7nKpbuzfvU2DplDi+dcUl8MC+UIkS65+rkiq+zmNBxE2gaxkBkjdIicZ/fBo+X7AAEqp+WtlWb84np8jJfLpuQ2W+l5KXTigsdAhz5DyVgU3xs+EnaIZxBwcE7EKzjMam+V9rlRy0CGsiQ1kjqqLzfAAQLsoVO0Vu5gVmgc8XGQ7xYhoz36rsBgMjG+e3l/B01esQi/KzPuBf/Ar8Sg5aSEOvEU0muSDb+KIr6d8eEC+FtcAAPZEaBSt4ysXVL84LUcJemQD3SiG30kOfUpF8o7/wI2M2Jf/LyCsbKEQUyLtLbZqnJBSfZJR5AMsrnHDqngMLEGAAY4UDG9GCpRuPvg8hOlsrXuPP3zq7yVPqyG0SG+bNo8rEhP5b1vXlHdG4bZsutX47d5VZ6xnFROKudx3T3/fnWUAQgAU1+kUFc3e0ZZeX1dLRVEryNIVyxMQIcxWwdey+jlIAYowHRM0fJX3Scs80OnT/CERwh5LMlFyU1w578NqxW+AQl2E/9fxjgUTi8crOfDpwsUsmOWw0+Q5OUGhELv/2UZoHAjsaw9OinWUggKACo4SdpPlHYldoWF+J2yGWOW+F4iAQre4c+ocb6a9uSWOnTldFkioqhd9lhmV542+VonCvuy4Tu214NP+2UNd/4Kk3KJCf3iziQJrCBeLi1cLHdLUikgAQtvRFR/nepcF9legl+DywAkUHi5/1MNjlEQvlHyh2XbMiS85yu7/9LgM6Sr+0ukfZY5mSkOcvUkpHn+T+Nw/IrQAQ7lty5luvKUmBpI3ITxSmojJ1aJ0kj/dc0ZcQk+/qo0l0l3/eRLkYjw5j+MZKA8jEubrHzUCke98eSoj8l08+PGAA+DAKNtCwNZe4p6J1Ucod8Lo5RKFfA84CPLVyEzEPQFZ25U9grUK6ilF4GhEia/ndYXLBt3PGW3qa6CBBPM7rH3ABGAyYEtUwzB4CeVedA5o6cKpjRkIebqDNSOqltsr+w7kXdfFVtsK2FMGFZNt5rbpIR+ppztoJ6eOKHmKmi9nQ99ARKkTxRErOs9wJXNHaAuIRV38o1pxRrlQRzGsRuKBqxcQEpC8OPFpyKYcp6iD5l7cO/gRDTamLFyhiUBwKKMP07FAWTEJv8AAAAAABrhAfrtrFhR4yubI7X5QRqMK6xKrj7U3XuBHdGnLqSqcQAAAAAAGp0GAUFVV1YAAAAAAAUYUmIAACcQBsfKUtr4PgZbIXRxRESU79PjE4IBAFUA5i32yLSoX+GmfbRNwS3l2zMPesZrctxliv7fD0pBW0MAAAKqqMJFwAAAAAAqE/NX////+AAAAABkxCb7AAAAAGTEJvoAAAKqIcWxYAAAAAAlR5m4CP/mPsh1IezjYpDlJ4GRb5q4fTs2LjtyO6M0XgVimrIQ4kSh1qg7JKW4gbGkyRntVFR9JO/GNd3FPDit0BK6M+JzXh/h12YNCz9wxlZTvXrNtWNbzqT+91pvl5cphhSPMfAHyEzTPaGR9tKDy9KNu56pmhaY32d2vfEWQmKo22guegeR98oDxs67MmnUraco46a3zEnac2Bm80pasUgMO24=","nullable":true}}},"RpcPriceFeedMetadata":{"type":"object","required":["emitter_chain"],"properties":{"emitter_chain":{"type":"integer","format":"int32","example":26,"minimum":0},"prev_publish_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"price_service_receive_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"slot":{"type":"integer","format":"int64","example":85480034,"nullable":true,"minimum":0}}},"RpcPriceFeedMetadataV2":{"type":"object","properties":{"prev_publish_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"proof_available_time":{"type":"integer","format":"int64","example":1717632000,"nullable":true},"slot":{"type":"integer","format":"int64","example":85480034,"nullable":true,"minimum":0}}},"RpcPriceIdentifier":{"type":"string","example":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"},"TwapsResponse":{"type":"object","required":["binary"],"properties":{"binary":{"$ref":"#/components/schemas/BinaryUpdate"},"parsed":{"type":"array","items":{"$ref":"#/components/schemas/ParsedPriceFeedTwap"},"description":"The calculated TWAPs for each price ID","nullable":true}}}}},"tags":[{"name":"hermes","description":"Pyth Real-Time Pricing API"}]} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/types/eventsource.d.ts b/packages/plugin-pyth-data/src/types/eventsource.d.ts new file mode 100644 index 0000000000..5e9432809a --- /dev/null +++ b/packages/plugin-pyth-data/src/types/eventsource.d.ts @@ -0,0 +1,41 @@ +declare module 'eventsource' { + interface EventSourceInit { + headers?: HeadersInit; + https?: { + rejectUnauthorized?: boolean; + ca?: string | Buffer | Array; + cert?: string | Buffer; + key?: string | Buffer; + passphrase?: string; + }; + withCredentials?: boolean; + proxy?: string; + } + + interface EventSourceStatic { + new(url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource; + readonly prototype: EventSource; + readonly CONNECTING: 0; + readonly OPEN: 1; + readonly CLOSED: 2; + } + + interface EventSource { + readonly CONNECTING: 0; + readonly OPEN: 1; + readonly CLOSED: 2; + readonly readyState: 0 | 1 | 2; + readonly url: string; + readonly withCredentials: boolean; + onopen: ((event: Event) => void) | null; + onmessage: ((event: MessageEvent) => void) | null; + onerror: ((event: Event) => void) | null; + addEventListener(type: string, listener: EventListener): void; + removeEventListener(type: string, listener: EventListener): void; + dispatchEvent(event: Event): boolean; + close(): void; + } + + const EventSource: EventSourceStatic; + export = EventSource; +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/types/jstat.d.ts b/packages/plugin-pyth-data/src/types/jstat.d.ts new file mode 100644 index 0000000000..48cdeea5f8 --- /dev/null +++ b/packages/plugin-pyth-data/src/types/jstat.d.ts @@ -0,0 +1,8 @@ +declare module 'jstat' { + const jStat: { + normal: { + inv: (p: number, mean: number, std: number) => number; + }; + }; + export default jStat; +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/types/zodSchemas.ts b/packages/plugin-pyth-data/src/types/zodSchemas.ts new file mode 100644 index 0000000000..e570156d5e --- /dev/null +++ b/packages/plugin-pyth-data/src/types/zodSchemas.ts @@ -0,0 +1,323 @@ +import { makeApi, Zodios, type ZodiosOptions } from "@zodios/core"; +import { z } from "zod"; + +const AssetType = z.enum([ + "crypto", + "fx", + "equity", + "metal", + "rates", + "crypto_redemption_rate", +]); +const asset_type = AssetType.nullish(); +const RpcPriceIdentifier = z.string(); +const PriceFeedMetadata = z + .object({ attributes: z.record(z.string()), id: RpcPriceIdentifier }) + .passthrough(); +const PriceIdInput = z.string(); +const EncodingType = z.enum(["hex", "base64"]); +const BinaryUpdate = z + .object({ data: z.array(z.string()), encoding: EncodingType }) + .passthrough(); +const RpcPrice = z + .object({ + conf: z.string(), + expo: z.number().int(), + price: z.string(), + publish_time: z.number().int(), + }) + .passthrough(); +const RpcPriceFeedMetadataV2 = z + .object({ + prev_publish_time: z.number().int().nullable(), + proof_available_time: z.number().int().nullable(), + slot: z.number().int().gte(0).nullable(), + }) + .partial() + .passthrough(); +const ParsedPriceUpdate = z + .object({ + ema_price: RpcPrice, + id: RpcPriceIdentifier, + metadata: RpcPriceFeedMetadataV2, + price: RpcPrice, + }) + .passthrough(); +const PriceUpdate = z + .object({ + binary: BinaryUpdate, + parsed: z.array(ParsedPriceUpdate).nullish(), + }) + .passthrough(); +const ParsedPublisherStakeCap = z + .object({ cap: z.number().int().gte(0), publisher: z.string() }) + .passthrough(); +const ParsedPublisherStakeCapsUpdate = z + .object({ publisher_stake_caps: z.array(ParsedPublisherStakeCap) }) + .passthrough(); +const LatestPublisherStakeCapsUpdateDataResponse = z + .object({ + binary: BinaryUpdate, + parsed: z.array(ParsedPublisherStakeCapsUpdate).nullish(), + }) + .passthrough(); +const ParsedPriceFeedTwap = z + .object({ + down_slots_ratio: z.string(), + end_timestamp: z.number().int(), + id: RpcPriceIdentifier, + start_timestamp: z.number().int(), + twap: RpcPrice, + }) + .passthrough(); +const TwapsResponse = z + .object({ + binary: BinaryUpdate, + parsed: z.array(ParsedPriceFeedTwap).nullish(), + }) + .passthrough(); + +export const schemas = { + AssetType, + asset_type, + RpcPriceIdentifier, + PriceFeedMetadata, + PriceIdInput, + EncodingType, + BinaryUpdate, + RpcPrice, + RpcPriceFeedMetadataV2, + ParsedPriceUpdate, + PriceUpdate, + ParsedPublisherStakeCap, + ParsedPublisherStakeCapsUpdate, + LatestPublisherStakeCapsUpdateDataResponse, + ParsedPriceFeedTwap, + TwapsResponse, +}; + +const endpoints = makeApi([ + { + method: "get", + path: "/v2/price_feeds", + alias: "price_feeds_metadata", + description: `Get the set of price feeds. + +This endpoint fetches all price feeds from the Pyth network. It can be filtered by asset type +and query string.`, + requestFormat: "json", + parameters: [ + { + name: "query", + type: "Query", + schema: z.string().nullish(), + }, + { + name: "asset_type", + type: "Query", + schema: asset_type, + }, + ], + response: z.array(PriceFeedMetadata), + }, + { + method: "get", + path: "/v2/updates/price/:publish_time", + alias: "timestamp_price_updates", + description: `Get the latest price updates by price feed id. + +Given a collection of price feed ids, retrieve the latest Pyth price for each price feed.`, + requestFormat: "json", + parameters: [ + { + name: "publish_time", + type: "Path", + schema: z.number().int(), + }, + { + name: "ids[]", + type: "Query", + schema: z.array(PriceIdInput), + }, + { + name: "encoding", + type: "Query", + schema: z.enum(["hex", "base64"]).optional(), + }, + { + name: "parsed", + type: "Query", + schema: z.boolean().optional(), + }, + { + name: "ignore_invalid_price_ids", + type: "Query", + schema: z.boolean().optional(), + }, + ], + response: PriceUpdate, + errors: [ + { + status: 404, + description: `Price ids not found`, + schema: z.void(), + }, + ], + }, + { + method: "get", + path: "/v2/updates/price/latest", + alias: "latest_price_updates", + description: `Get the latest price updates by price feed id. + +Given a collection of price feed ids, retrieve the latest Pyth price for each price feed.`, + requestFormat: "json", + parameters: [ + { + name: "ids[]", + type: "Query", + schema: z.array(PriceIdInput), + }, + { + name: "encoding", + type: "Query", + schema: z.enum(["hex", "base64"]).optional(), + }, + { + name: "parsed", + type: "Query", + schema: z.boolean().optional(), + }, + { + name: "ignore_invalid_price_ids", + type: "Query", + schema: z.boolean().optional(), + }, + ], + response: PriceUpdate, + errors: [ + { + status: 404, + description: `Price ids not found`, + schema: z.void(), + }, + ], + }, + { + method: "get", + path: "/v2/updates/price/stream", + alias: "price_stream_sse_handler", + description: `SSE route handler for streaming price updates.`, + requestFormat: "json", + parameters: [ + { + name: "ids[]", + type: "Query", + schema: z.array(PriceIdInput), + }, + { + name: "encoding", + type: "Query", + schema: z.enum(["hex", "base64"]).optional(), + }, + { + name: "parsed", + type: "Query", + schema: z.boolean().optional(), + }, + { + name: "allow_unordered", + type: "Query", + schema: z.boolean().optional(), + }, + { + name: "benchmarks_only", + type: "Query", + schema: z.boolean().optional(), + }, + { + name: "ignore_invalid_price_ids", + type: "Query", + schema: z.boolean().optional(), + }, + ], + response: PriceUpdate, + errors: [ + { + status: 404, + description: `Price ids not found`, + schema: z.void(), + }, + ], + }, + { + method: "get", + path: "/v2/updates/publisher_stake_caps/latest", + alias: "latest_publisher_stake_caps", + description: `Get the most recent publisher stake caps update data.`, + requestFormat: "json", + parameters: [ + { + name: "encoding", + type: "Query", + schema: z.enum(["hex", "base64"]).optional(), + }, + { + name: "parsed", + type: "Query", + schema: z.boolean().optional(), + }, + ], + response: LatestPublisherStakeCapsUpdateDataResponse, + }, + { + method: "get", + path: "/v2/updates/twap/:window_seconds/latest", + alias: "latest_twaps", + description: `Get the latest TWAP by price feed id with a custom time window. + +Given a collection of price feed ids, retrieve the latest Pyth TWAP price for each price feed.`, + requestFormat: "json", + parameters: [ + { + name: "window_seconds", + type: "Path", + schema: z.number().int().gte(0), + }, + { + name: "ids[]", + type: "Query", + schema: z.array(PriceIdInput), + }, + { + name: "encoding", + type: "Query", + schema: z.enum(["hex", "base64"]).optional(), + }, + { + name: "parsed", + type: "Query", + schema: z.boolean().optional(), + }, + { + name: "ignore_invalid_price_ids", + type: "Query", + schema: z.boolean().optional(), + }, + ], + response: TwapsResponse, + errors: [ + { + status: 404, + description: `Price ids not found`, + schema: z.void(), + }, + ], + }, +]); + +export const api = new Zodios(endpoints); + +export function createApiClient(baseUrl: string, options?: ZodiosOptions) { + return new Zodios(baseUrl, endpoints, options); +} diff --git a/packages/plugin-pyth-data/src/utils/priceFeedsValidation.ts b/packages/plugin-pyth-data/src/utils/priceFeedsValidation.ts new file mode 100644 index 0000000000..59dc00a483 --- /dev/null +++ b/packages/plugin-pyth-data/src/utils/priceFeedsValidation.ts @@ -0,0 +1,54 @@ +import { z } from 'zod'; +import { DataError, ErrorSeverity, DataErrorCode } from '../error'; +import { elizaLogger } from '@elizaos/core'; + +// Schema for price feed attributes +const priceFeedAttributesSchema = z.object({ + asset_type: z.string(), + base: z.string(), + description: z.string(), + display_symbol: z.string(), + quote_currency: z.string(), + schedule: z.string(), + symbol: z.string(), + generic_symbol: z.string().optional(), + cms_symbol: z.string().optional(), + country: z.string().optional(), + cqs_symbol: z.string().optional(), + nasdaq_symbol: z.string().optional(), + contract_id: z.string().optional() +}); + +// Schema for price feeds request +export const priceFeedsSchema = z.object({ + text: z.string(), + query: z.string().optional(), + filter: z.string().optional(), + success: z.boolean().optional(), + data: z.object({ + feeds: z.array(z.object({ + id: z.string(), + attributes: priceFeedAttributesSchema + })), + count: z.number(), + responseType: z.string(), + isArray: z.boolean(), + error: z.string().optional() + }).optional() +}); + +export async function validatePriceFeedsData(content: unknown): Promise { + try { + const result = await priceFeedsSchema.parseAsync(content); + elizaLogger.debug('Price feeds validation passed', { result }); + return true; + } catch (error) { + elizaLogger.error('Price feeds validation failed', { error }); + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + 'Price feeds validation failed', + ErrorSeverity.HIGH, + { error } + ); + } +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/utils/priceUpdateStreamValidation.ts b/packages/plugin-pyth-data/src/utils/priceUpdateStreamValidation.ts new file mode 100644 index 0000000000..1bee09ce89 --- /dev/null +++ b/packages/plugin-pyth-data/src/utils/priceUpdateStreamValidation.ts @@ -0,0 +1,71 @@ +import { z } from 'zod'; +import { DataError, ErrorSeverity, DataErrorCode } from '../error'; +import { elizaLogger } from '@elizaos/core'; + +// Schema for price update stream options +const streamOptionsSchema = z.object({ + encoding: z.enum(['hex', 'base64']).optional(), + parsed: z.boolean().optional(), + allowUnordered: z.boolean().optional(), + benchmarksOnly: z.boolean().optional() +}); + +// Schema for price metadata +const priceMetadataSchema = z.object({ + slot: z.number(), + proof_available_time: z.number(), + prev_publish_time: z.number() +}); + +// Schema for price data +const priceDataSchema = z.object({ + price: z.string(), + conf: z.string(), + expo: z.number(), + publish_time: z.number() +}); + +// Schema for parsed price update +const parsedPriceUpdateSchema = z.object({ + id: z.string(), + price: priceDataSchema, + ema_price: priceDataSchema, + metadata: priceMetadataSchema.optional() +}); + +// Schema for binary data +const binaryDataSchema = z.object({ + encoding: z.string(), + data: z.array(z.string()) +}); + +// Schema for price updates stream request +export const priceUpdateStreamSchema = z.object({ + text: z.string(), + priceIds: z.array(z.string().regex(/^0x[0-9a-fA-F]{64}$/)), + options: streamOptionsSchema.optional(), + success: z.boolean().optional(), + data: z.object({ + streamId: z.string(), + status: z.enum(['connected', 'disconnected', 'error']), + binary: binaryDataSchema.optional(), + parsed: z.array(parsedPriceUpdateSchema).optional(), + error: z.string().optional() + }).optional() +}); + +export async function validatePriceUpdateStreamData(content: unknown): Promise { + try { + const result = await priceUpdateStreamSchema.parseAsync(content); + elizaLogger.debug('Price update stream validation passed', { result }); + return true; + } catch (error) { + elizaLogger.error('Price update stream validation failed', { error }); + throw new DataError( + DataErrorCode.VALIDATION_FAILED, + 'Price update stream validation failed', + ErrorSeverity.HIGH, + { error } + ); + } +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/utils/priceUpdatesValidation.ts b/packages/plugin-pyth-data/src/utils/priceUpdatesValidation.ts new file mode 100644 index 0000000000..d6ba25ae06 --- /dev/null +++ b/packages/plugin-pyth-data/src/utils/priceUpdatesValidation.ts @@ -0,0 +1,107 @@ +import { elizaLogger } from "@elizaos/core"; +import { DataError, PythErrorCode, ErrorSeverity } from "../error"; +import Ajv, { ErrorObject } from "ajv"; + +const ajv = new Ajv({ + allErrors: true, + verbose: true, + coerceTypes: true, + useDefaults: true +}); + +// Price updates schema +export const priceUpdatesSchema = { + type: 'object', + required: ['priceIds'], + properties: { + text: { type: 'string' }, + priceIds: { + type: 'array', + items: { + type: 'string', + pattern: '^(0x)?[0-9a-fA-F]+$' + }, + minItems: 1, + description: 'Array of price feed IDs to fetch updates for' + }, + options: { + type: 'object', + properties: { + encoding: { + type: 'string', + enum: ['hex', 'base64'], + description: 'Encoding format for the price updates' + }, + parsed: { + type: 'boolean', + description: 'Whether to return parsed price updates' + } + } + } + } +}; + +/** + * Validates price updates data against the schema + * @param data Data to validate + * @returns Promise True if validation succeeds + * @throws DataError if validation fails + */ +export async function validatePriceUpdatesData(data: unknown): Promise { + try { + const validate = ajv.compile(priceUpdatesSchema); + const valid = validate(data); + + if (!valid) { + const errors = validate.errors || []; + elizaLogger.error("Price updates validation failed", { + errors, + data + }); + + throw new DataError( + PythErrorCode.DATA_VALIDATION_FAILED, + "Price updates validation failed", + ErrorSeverity.HIGH, + { + errors: errors.map((err: ErrorObject) => ({ + path: err.schemaPath, + message: err.message, + params: err.params + })), + data + } + ); + } + + return true; + } catch (error) { + if (error instanceof DataError) { + throw error; + } + + elizaLogger.error("Price updates validation error", { + error: error instanceof Error ? error.message : String(error), + data + }); + + throw new DataError( + PythErrorCode.DATA_SCHEMA_ERROR, + "Price updates validation error", + ErrorSeverity.HIGH, + { + error: error instanceof Error ? error.message : String(error), + data + } + ); + } +} + +/** + * Validates a price ID format + * @param priceId Price ID to validate + * @returns boolean True if price ID is valid + */ +export function validatePriceId(priceId: string): boolean { + return /^(0x)?[0-9a-fA-F]+$/.test(priceId); +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/src/utils/publisherCapsValidation.ts b/packages/plugin-pyth-data/src/utils/publisherCapsValidation.ts new file mode 100644 index 0000000000..338b69aad3 --- /dev/null +++ b/packages/plugin-pyth-data/src/utils/publisherCapsValidation.ts @@ -0,0 +1,120 @@ +import { elizaLogger } from "@elizaos/core"; +import { DataError, PythErrorCode, ErrorSeverity } from "../error"; +import Ajv, { ErrorObject } from "ajv"; + +const ajv = new Ajv({ + allErrors: true, + verbose: true, + coerceTypes: true, + useDefaults: true +}); + +// Publisher caps schema +export const publisherCapsSchema = { + type: 'object', + properties: { + text: { type: 'string' }, + success: { type: 'boolean' }, + data: { + type: 'object', + properties: { + caps: { + type: 'array', + items: { + type: 'object', + required: ['publisher', 'cap', 'timestamp'], + properties: { + publisher: { + type: 'string', + pattern: '^0x[a-fA-F0-9]{40}$' // Ethereum address format + }, + cap: { + type: 'number', + minimum: 0 + }, + timestamp: { + type: 'number', + minimum: 0 + } + } + } + }, + error: { type: 'string' } + } + } + } +}; + +/** + * Validates publisher caps data against the schema + * @param data Data to validate + * @returns Promise True if validation succeeds + * @throws DataError if validation fails + */ +export async function validatePublisherCapsData(data: unknown): Promise { + try { + const validate = ajv.compile(publisherCapsSchema); + const valid = validate(data); + + if (!valid) { + const errors = validate.errors || []; + elizaLogger.error("Publisher caps validation failed", { + errors, + data + }); + + throw new DataError( + PythErrorCode.DATA_VALIDATION_FAILED, + "Publisher caps validation failed", + ErrorSeverity.HIGH, + { + errors: errors.map((err: ErrorObject) => ({ + path: err.schemaPath, + message: err.message, + params: err.params + })), + data + } + ); + } + + return true; + } catch (error) { + if (error instanceof DataError) { + throw error; + } + + elizaLogger.error("Publisher caps validation error", { + error: error instanceof Error ? error.message : String(error), + data + }); + + throw new DataError( + PythErrorCode.DATA_SCHEMA_ERROR, + "Publisher caps validation error", + ErrorSeverity.HIGH, + { + error: error instanceof Error ? error.message : String(error), + data + } + ); + } +} + +/** + * Validates a publisher address format + * @param publisher Publisher address to validate + * @returns boolean True if address is valid + */ +export function validatePublisherAddress(publisher: string): boolean { + return /^0x[a-fA-F0-9]{40}$/.test(publisher); +} + +/** + * Validates a cap value + * @param cap Cap value to validate + * @returns boolean True if cap is valid + */ +export function validateCap(cap: number): boolean { + return !isNaN(cap) && cap >= 0; +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/tsconfig.json b/packages/plugin-pyth-data/tsconfig.json new file mode 100644 index 0000000000..89b1ffc64c --- /dev/null +++ b/packages/plugin-pyth-data/tsconfig.json @@ -0,0 +1,38 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "module": "ESNext", + "target": "ESNext", + "lib": [ + "ESNext", + "DOM" + ], + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "esModuleInterop": true, + "skipLibCheck": true, + "strict": true, + "declaration": true, + "sourceMap": true, + "types": [ + "vitest/globals", + "node" + ], + "baseUrl": ".", + "preserveSymlinks": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*", + ], + "exclude": [ + "node_modules", + "dist", + "test", + "../../packages/core/**/*", + "src/examples/**/*" + ] +} \ No newline at end of file diff --git a/packages/plugin-pyth-data/tsup.config.ts b/packages/plugin-pyth-data/tsup.config.ts new file mode 100644 index 0000000000..4727abcefd --- /dev/null +++ b/packages/plugin-pyth-data/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm"], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + treeshake: true, + minify: true +}); diff --git a/packages/plugin-pyth-data/vitest.config.ts b/packages/plugin-pyth-data/vitest.config.ts new file mode 100644 index 0000000000..2b76c16878 --- /dev/null +++ b/packages/plugin-pyth-data/vitest.config.ts @@ -0,0 +1,27 @@ +import { defineConfig } from 'vitest/config'; +import path from 'path'; + +export default defineConfig({ + test: { + globals: true, + environment: 'node', + include: ['test/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + exclude: ['node_modules', 'dist', '.idea', '.git', '.cache'], + root: '.', + reporters: ['verbose'], + coverage: { + reporter: ['text', 'json', 'html'], + exclude: [ + 'node_modules/', + 'test/fixtures/', + 'test/setup/' + ] + }, + setupFiles: ['./test/setup/vitest.setup.ts'] + }, + resolve: { + alias: { + '@': path.resolve(__dirname, './src') + } + } +}); \ No newline at end of file diff --git a/packages/plugin-rabbi-trader/package.json b/packages/plugin-rabbi-trader/package.json index 4eaeb0f817..0f672fec24 100644 --- a/packages/plugin-rabbi-trader/package.json +++ b/packages/plugin-rabbi-trader/package.json @@ -9,7 +9,7 @@ "@elizaos/client-twitter": "workspace:*", "@elizaos/plugin-solana": "workspace:*", "@elizaos/plugin-trustdb": "workspace:*", - "@solana/web3.js": "^1.87.6", + "@solana/web3.js": "1.95.8", "zod": "3.23.8", "@goat-sdk/core": "0.3.8", "@goat-sdk/plugin-erc20": "0.1.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47a685fef1..e67e610d28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,7 +84,7 @@ importers: version: 9.1.7 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + version: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) lerna: specifier: 8.1.5 version: 8.1.5(@swc/core@1.10.7(@swc/helpers@0.5.15))(babel-plugin-macros@3.1.0)(encoding@0.1.13) @@ -316,6 +316,9 @@ importers: '@elizaos/plugin-primus': specifier: workspace:* version: link:../packages/plugin-primus + '@elizaos/plugin-pyth-data': + specifier: workspace:* + version: link:../packages/plugin-pyth-data '@elizaos/plugin-quai': specifier: workspace:* version: link:../packages/plugin-quai @@ -388,13 +391,13 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + version: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.2)(jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3) + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.2)(jest@29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)))(typescript@5.7.3) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3) + version: 10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.7(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.1)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0) @@ -463,10 +466,10 @@ importers: version: 19.0.0(react@19.0.0) react-router: specifier: ^7.1.1 - version: 7.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router-dom: specifier: ^7.1.1 - version: 7.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) semver: specifier: ^7.6.3 version: 7.6.3 @@ -1060,7 +1063,7 @@ importers: version: 0.0.3(zod@3.23.8) '@ai-sdk/mistral': specifier: ^1.0.8 - version: 1.0.9(zod@3.23.8) + version: 1.0.8(zod@3.23.8) '@ai-sdk/openai': specifier: 1.0.5 version: 1.0.5(zod@3.23.8) @@ -1731,7 +1734,7 @@ importers: dependencies: '@chain-registry/utils': specifier: ^1.51.41 - version: 1.51.51 + version: 1.51.50 '@cosmjs/cosmwasm-stargate': specifier: ^0.32.4 version: 0.32.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -1749,7 +1752,7 @@ importers: version: 9.1.2 chain-registry: specifier: ^1.69.68 - version: 1.69.95 + version: 1.69.94 interchain: specifier: ^1.10.4 version: 1.10.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -1762,7 +1765,7 @@ importers: devDependencies: '@chain-registry/types': specifier: ^0.50.44 - version: 0.50.51 + version: 0.50.50 packages/plugin-cronoszkevm: dependencies: @@ -1967,7 +1970,7 @@ importers: version: link:../core '@goat-sdk/adapter-vercel-ai': specifier: 0.2.0 - version: 0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.39(react@19.0.0)(zod@3.23.8)) + version: 0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.38(react@19.0.0)(zod@3.23.8)) '@goat-sdk/core': specifier: 0.4.0 version: 0.4.0 @@ -2051,7 +2054,7 @@ importers: version: 29.5.14 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + version: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.7(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.1)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.7.0) @@ -2109,7 +2112,7 @@ importers: version: 9.16.0(jiti@2.4.2) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + version: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) prettier: specifier: 3.4.1 version: 3.4.1 @@ -2118,7 +2121,7 @@ importers: version: 19.0.2 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.2)(jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3) + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0))(typescript@5.7.3) typescript: specifier: ^5.7.2 version: 5.7.3 @@ -2147,7 +2150,7 @@ importers: specifier: workspace:* version: link:../core '@solana/web3.js': - specifier: 1.95.8 + specifier: ^1.95.8 version: 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) devDependencies: '@types/node': @@ -2383,7 +2386,7 @@ importers: version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.2 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(encoding@0.1.13) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(encoding@0.1.13) '@openzeppelin/contracts': specifier: ^5.1.0 version: 5.2.0 @@ -2391,8 +2394,8 @@ importers: specifier: ^2.5.6 version: 2.5.6(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) '@solana/web3.js': - specifier: 1.95.5 - version: 1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + specifier: 1.95.8 + version: 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) axios: specifier: ^1.7.9 version: 1.7.9(debug@4.4.0) @@ -2422,10 +2425,10 @@ importers: dependencies: '@aws-sdk/client-s3': specifier: ^3.705.0 - version: 3.730.0 + version: 3.729.0 '@aws-sdk/s3-request-presigner': specifier: ^3.705.0 - version: 3.730.0 + version: 3.729.0 '@cliqz/adblocker-playwright': specifier: 1.34.0 version: 1.34.0(playwright@1.48.2) @@ -2654,6 +2657,79 @@ importers: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.7(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.1)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0) + packages/plugin-pyth-data: + dependencies: + '@elizaos/core': + specifier: ^0.1.7 + version: 0.1.8(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(@langchain/core@0.3.30(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(@langchain/groq@0.1.3(@langchain/core@0.3.30(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13))(axios@1.7.9)(encoding@0.1.13)(react@19.0.0)(sswr@2.1.0(svelte@5.18.0))(svelte@5.18.0) + '@pythnetwork/client': + specifier: ^2.22.0 + version: 2.22.0(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@pythnetwork/hermes-client': + specifier: ^1.3.0 + version: 1.3.0(axios@1.7.9) + '@solana/web3.js': + specifier: 1.95.8 + version: 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@zodios/core': + specifier: ^10.9.6 + version: 10.9.6(axios@1.7.9)(zod@3.23.8) + ajv: + specifier: ^8.12.0 + version: 8.17.1 + buffer: + specifier: 6.0.3 + version: 6.0.3 + chalk: + specifier: ^5.4.1 + version: 5.4.1 + cli-table3: + specifier: ^0.6.5 + version: 0.6.5 + cross-fetch: + specifier: ^4.0.0 + version: 4.1.0(encoding@0.1.13) + eventsource: + specifier: ^3.0.2 + version: 3.0.2 + jstat: + specifier: ^1.9.6 + version: 1.9.6 + ora: + specifier: ^8.1.1 + version: 8.1.1 + zod: + specifier: ^3.23.8 + version: 3.23.8 + devDependencies: + '@types/node': + specifier: ^20.8.2 + version: 20.17.9 + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.4 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': + specifier: ^6.7.4 + version: 6.21.0(eslint@8.57.1)(typescript@5.6.3) + eslint: + specifier: ^8.50.0 + version: 8.57.1 + openapi-zod-client: + specifier: ^1.18.1 + version: 1.18.2(react@19.0.0) + rimraf: + specifier: ^5.0.5 + version: 5.0.10 + tsup: + specifier: ^8.0.0 + version: 8.3.5(@swc/core@1.10.7(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.1)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.7.0) + typescript: + specifier: ^5.2.2 + version: 5.6.3 + vitest: + specifier: ^1.0.0 + version: 1.2.1(@types/node@20.17.9)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) + packages/plugin-quai: dependencies: '@avnu/avnu-sdk': @@ -2705,7 +2781,7 @@ importers: specifier: 0.1.3 version: 0.1.3(@goat-sdk/core@0.3.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(viem@2.21.58(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) '@solana/web3.js': - specifier: ^1.87.6 + specifier: 1.95.8 version: 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) bignumber: specifier: 1.1.0 @@ -2967,7 +3043,7 @@ importers: version: link:../core '@mysten/sui': specifier: ^1.16.0 - version: 1.20.0(typescript@5.7.3) + version: 1.19.0(typescript@5.7.3) bignumber.js: specifier: 9.1.2 version: 9.1.2 @@ -3339,14 +3415,14 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/mistral@1.0.9': - resolution: {integrity: sha512-PzKbgkRKT63khz7QOlpej40dEuYc04WQrW4RhqPkSoBO/BPXDRlrQtTVwBs6BRLjyKvihIRDrc5NenbO/b8HlQ==} + '@ai-sdk/mistral@1.0.8': + resolution: {integrity: sha512-jWH4HHK4cYvXaac9UprMiSUBwOVb3e0hpbiL1wPb+2bF75pqQQKFQWQyfmoLFrh1oXlMOGn+B6IzwUDSFHLanA==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai@1.0.20': - resolution: {integrity: sha512-824Eyqn83GxjUiErX9J0S8ffSVw1JKh8iYJNVSFxPvOVzA02KNEIakOhcQHWxb65aTOYxytD+6YR7m/ppHY6IQ==} + '@ai-sdk/openai@1.0.19': + resolution: {integrity: sha512-7qmLgppWpGUhSgrH0a6CtgD9hZeRh2hARppl1B7fNhVbekYftSMucsdCiVlKbQzSKPxox0vkNMmwjKa/7xf8bQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -3384,8 +3460,8 @@ packages: zod: optional: true - '@ai-sdk/provider-utils@2.0.8': - resolution: {integrity: sha512-R/wsIqx7Lwhq+ogzkqSOek8foj2wOnyBSGW/CH8IPBla0agbisIE9Ug7R9HDTNiBbIIKVhduB54qQSMPFw0MZA==} + '@ai-sdk/provider-utils@2.0.7': + resolution: {integrity: sha512-4sfPlKEALHPXLmMFcPlYksst3sWBJXmCDZpIBJisRrmwGG6Nn3mq0N1Zu/nZaGcrWZoOY+HT2Wbxla1oTElYHQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -3421,8 +3497,8 @@ packages: zod: optional: true - '@ai-sdk/react@1.0.12': - resolution: {integrity: sha512-vh4CVgZWNYECK49eV2NJpWL7Am9DlMAYD8Z2kauXYmTT2Ktjng0rLQFtUGYyyJqgYUqXTODOGg6t8w8liWhsbw==} + '@ai-sdk/react@1.0.11': + resolution: {integrity: sha512-ndBPA7dx2DqUr7s4zO1cRAPkFGS+wWvSri6OWfCuhfyTAADQ4vdd56vFP9zdTZl4cyL27Vh0hKLfFJMGx83MUQ==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -3460,8 +3536,8 @@ packages: zod: optional: true - '@ai-sdk/ui-utils@1.0.11': - resolution: {integrity: sha512-hbC3eSw42zbl+sRUxuvxGr9Tzx4MY7Ln3s2FTU2t4s4rcl546Xdq36pzM7k8ZQUDFMzfVfjLYqtM4Gfnno2MlQ==} + '@ai-sdk/ui-utils@1.0.10': + resolution: {integrity: sha512-wZfZNH2IloTx5b1O8CU7/R/icm8EsmURElPckYwNYj2YZrKk9X5XeYSDBF/1/J83obzsn0i7VKkIf40qhRzVVA==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -3608,6 +3684,22 @@ packages: resolution: {integrity: sha512-+JfuYFmjh2Yz3E3tPgoCXJAz5LoRUGq30eJOiCQBvXWwz3agjS2pwX4L4T+uvcWNFlRCjUHsmbsqKVDa7kf3Rw==} hasBin: true + '@apidevtools/json-schema-ref-parser@11.7.2': + resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==} + engines: {node: '>= 16'} + + '@apidevtools/openapi-schemas@2.1.0': + resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} + engines: {node: '>=10'} + + '@apidevtools/swagger-methods@3.0.2': + resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} + + '@apidevtools/swagger-parser@10.1.1': + resolution: {integrity: sha512-u/kozRnsPO/x8QtKYJOqoGtC4kH6yg1lfYkB9Au0WhYB0FNLpyFusttQtvhlwjtG3rOwiRz4D8DnnXa8iEpIKA==} + peerDependencies: + openapi-types: '>=7' + '@apollo/client@3.12.6': resolution: {integrity: sha512-MOEtkojZagMKB7nxlwQ426eaBYwEs/Xfn+JeLOd81wv6j7toKo57eEGAbJdZwyXGRgtiqDkX5gx3EzE7qtarXA==} peerDependencies: @@ -3675,53 +3767,67 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-polly@3.730.0': - resolution: {integrity: sha512-Mfp5a+OWHpTOlkeE5+4bjg5NBWSQo4BxGRKdj3BIyPbCAAniuIcnX3ZAJPoAsRO8fuSU8lv0LImi9TfJwHiJ7Q==} + '@aws-sdk/client-polly@3.726.1': + resolution: {integrity: sha512-Q4ZoSmCXskIQ3T5AdO0OyH3vCeoKCed9AjqNIZ5Bxo7T1aBLaIb0VmjKOEubsYrfl+0Ot++FRmy7G45UUHSs4Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-s3@3.729.0': + resolution: {integrity: sha512-hpagpazcfOYtxE4nDlR/6JcaIdZ3T2BUt2Ev11Zyz2B5G8eC1dWJgvFsW7ws35252Nb6HTLkJajtnM3v9KtXGw==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-s3@3.730.0': - resolution: {integrity: sha512-45RAzBWCR3E2p9Oale1TqIHPxqcbJoNmLDU+z/5kqnLml32Ntkvioe3BRMq+eaSmiFtOyviF1snfuxPUkRrUWA==} + '@aws-sdk/client-sso-oidc@3.726.0': + resolution: {integrity: sha512-5JzTX9jwev7+y2Jkzjz0pd1wobB5JQfPOQF3N2DrJ5Pao0/k6uRYwE4NqB0p0HlGrMTDm7xNq7OSPPIPG575Jw==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.726.0 + + '@aws-sdk/client-sso@3.726.0': + resolution: {integrity: sha512-NM5pjv2qglEc4XN3nnDqtqGsSGv1k5YTmzDo3W3pObItHmpS8grSeNfX9zSH+aVl0Q8hE4ZIgvTPNZ+GzwVlqg==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.730.0': - resolution: {integrity: sha512-mI8kqkSuVlZklewEmN7jcbBMyVODBld3MsTjCKSl5ztduuPX69JD7nXLnWWPkw1PX4aGTO24AEoRMGNxntoXUg==} + '@aws-sdk/client-sts@3.726.1': + resolution: {integrity: sha512-qh9Q9Vu1hrM/wMBOBIaskwnE4GTFaZu26Q6WHwyWNfj7J8a40vBxpW16c2vYXHLBtwRKM1be8uRLkmDwghpiNw==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-transcribe-streaming@3.730.0': - resolution: {integrity: sha512-405p9flBP/GtCtnZhO4Z27VhKg48BJn5Veg3C4KWlDHhVCusPL8UF/mhfAC68QLHcd2/I+11PADforRhMF0tvA==} + '@aws-sdk/client-transcribe-streaming@3.726.1': + resolution: {integrity: sha512-A1FtcvFi0SnY193SEnhHVEGB8xaMKHJdioE6/TcW0oka2ezvfZkl6EsmKEP30vLov+NRRzzoHUjitdiYKOpVzg==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.730.0': - resolution: {integrity: sha512-jonKyR+2GcqbZj2WDICZS0c633keLc9qwXnePu83DfAoFXMMIMyoR/7FOGf8F3OrIdGh8KzE9VvST+nZCK9EJA==} + '@aws-sdk/core@3.723.0': + resolution: {integrity: sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.730.0': - resolution: {integrity: sha512-fFXgo3jBXLWqu8I07Hd96mS7RjrtpDgm3bZShm0F3lKtqDQF+hObFWq9A013SOE+RjMLVfbABhToXAYct3FcBw==} + '@aws-sdk/credential-provider-env@3.723.0': + resolution: {integrity: sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.730.0': - resolution: {integrity: sha512-1aF3elbCzpVhWLAuV63iFElfLOqLGGTp4fkf2VAFIDO3hjshpXUQssTgIWiBwwtJYJdOSxaFrCU7u8frjr/5aQ==} + '@aws-sdk/credential-provider-http@3.723.0': + resolution: {integrity: sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.730.0': - resolution: {integrity: sha512-zwsxkBuQuPp06o45ATAnznHzj3+ibop/EaTytNzSv0O87Q59K/jnS/bdtv1n6bhe99XCieRNTihvtS7YklzK7A==} + '@aws-sdk/credential-provider-ini@3.726.0': + resolution: {integrity: sha512-seTtcKL2+gZX6yK1QRPr5mDJIBOatrpoyrO8D5b8plYtV/PDbDW3mtDJSWFHet29G61ZmlNElyXRqQCXn9WX+A==} engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.726.0 - '@aws-sdk/credential-provider-node@3.730.0': - resolution: {integrity: sha512-ztRjh1edY7ut2wwrj1XqHtqPY/NXEYIk5fYf04KKsp8zBi81ScVqP7C+Cst6PFKixjgLSG6RsqMx9GSAalVv0Q==} + '@aws-sdk/credential-provider-node@3.726.0': + resolution: {integrity: sha512-jjsewBcw/uLi24x8JbnuDjJad4VA9ROCE94uVRbEnGmUEsds75FWOKp3fWZLQlmjLtzsIbJOZLALkZP86liPaw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.730.0': - resolution: {integrity: sha512-cNKUQ81eptfZN8MlSqwUq3+5ln8u/PcY57UmLZ+npxUHanqO1akpgcpNsLpmsIkoXGbtSQrLuDUgH86lS/SWOw==} + '@aws-sdk/credential-provider-process@3.723.0': + resolution: {integrity: sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.730.0': - resolution: {integrity: sha512-SdI2xrTbquJLMxUh5LpSwB8zfiKq3/jso53xWRgrVfeDlrSzZuyV6QghaMs3KEEjcNzwEnTfSIjGQyRXG9VrEw==} + '@aws-sdk/credential-provider-sso@3.726.0': + resolution: {integrity: sha512-WxkN76WeB08j2yw7jUH9yCMPxmT9eBFd9ZA/aACG7yzOIlsz7gvG3P2FQ0tVg25GHM0E4PdU3p/ByTOawzcOAg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.730.0': - resolution: {integrity: sha512-l5vdPmvF/d890pbvv5g1GZrdjaSQkyPH/Bc8dO/ZqkWxkIP8JNgl48S2zgf4DkP3ik9K2axWO828L5RsMDQzdA==} + '@aws-sdk/credential-provider-web-identity@3.723.0': + resolution: {integrity: sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==} engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.723.0 '@aws-sdk/eventstream-handler-node@3.723.0': resolution: {integrity: sha512-CekxhxMH1GQe/kuoZsNFE8eonvmHVifyDK1MWfePyEp82/XvqPFWSnKlhT+SqoC6JfsMLmhsyCP/qqr9Du0SbQ==} @@ -3739,8 +3845,8 @@ packages: resolution: {integrity: sha512-w/O0EkIzkiqvGu7U8Ke7tue0V0HYM5dZQrz6nVU+R8T2LddWJ+njEIHU4Wh8aHPLQXdZA5NQumv0xLPdEutykw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.730.0': - resolution: {integrity: sha512-D0YfQWJ32xo3DvFKcTuM5Aq0IxVr8N++ChVeK3ENYcdelUpxWA9xplZH3QTSbbM1iH3qs2maeAAnLyAns26aGg==} + '@aws-sdk/middleware-flexible-checksums@3.729.0': + resolution: {integrity: sha512-GY92MQ7Pr8hK2rwKmOYSGMmfPQRCWRJ3s1aAIyJBpOHUejWdaNAi78vxeUzVkmGdVjUfF6hRTRAxqV7MnHwe/g==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-host-header@3.723.0': @@ -3759,8 +3865,8 @@ packages: resolution: {integrity: sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.730.0': - resolution: {integrity: sha512-5EJWF8cV5SWqGQfQWDd1sklawm5grUa6H/QHGAhmCdcw+isz675qg/+c970I5rBsSEky83ialjBQIirrBo7DYQ==} + '@aws-sdk/middleware-sdk-s3@3.723.0': + resolution: {integrity: sha512-wfjOvNJVp8LDWhq4wO5jtSMb8Vgf4tNlR7QTEQfoYc6AGU3WlK5xyUQcpfcpwytEhQTN9u0cJLQpSyXDO+qSCw==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-sdk-transcribe-streaming@3.723.0': @@ -3771,33 +3877,31 @@ packages: resolution: {integrity: sha512-Bs+8RAeSMik6ZYCGSDJzJieGsDDh2fRbh1HQG94T8kpwBXVxMYihm6e9Xp2cyl+w9fyyCnh0IdCKChP/DvrdhA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.730.0': - resolution: {integrity: sha512-aPMZvNmf2a42B41au3bA3ODU4HfHka2nYT/SAIhhVXH1ENYfAmZo7FraFPxetKepFMCtL7j4QE6/LDucK6liIw==} + '@aws-sdk/middleware-user-agent@3.726.0': + resolution: {integrity: sha512-hZvzuE5S0JmFie1r68K2wQvJbzyxJFdzltj9skgnnwdvLe8F/tz7MqLkm28uV0m4jeHk0LpiBo6eZaPkQiwsZQ==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-websocket@3.723.0': resolution: {integrity: sha512-dmp1miRv3baZgRKRlgsfpghUMFx1bHDVPW39caKVVOQLxMWtDt8a6JKGnYm19ew2JmSe+p9h/khdq073bPFslw==} engines: {node: '>= 14.0.0'} - '@aws-sdk/nested-clients@3.730.0': - resolution: {integrity: sha512-vilIgf1/7kre8DdE5zAQkDOwHFb/TahMn/6j2RZwFLlK7cDk91r19deSiVYnKQkupDMtOfNceNqnorM4I3PDzw==} - engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.723.0': resolution: {integrity: sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==} engines: {node: '>=18.0.0'} - '@aws-sdk/s3-request-presigner@3.730.0': - resolution: {integrity: sha512-+YG3tu4AUlnpD4draEAvK/VFZTkzSl0EMxbbhgYS0A7vx3tVnHjkvK4OnQagzg6PgmBK+UaAm91MQ2B8kXUwEw==} + '@aws-sdk/s3-request-presigner@3.729.0': + resolution: {integrity: sha512-5jfIFi/rygbUzyCY3PjcehXJRxwqqP3SS3klKxxR3p+fbZcKoV5sknn8hhYnfSPteCmOLqELNP+EG/9I+F3a2w==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.730.0': - resolution: {integrity: sha512-/a6ndc+oNnFwolBdB4QgAK7iO4cge0vm9hEp7ZeFQCviX64UmsWH/UdIhsi7wvKEXdIo1XR9v3O4o6UwcQngXg==} + '@aws-sdk/signature-v4-multi-region@3.723.0': + resolution: {integrity: sha512-lJlVAa5Sl589qO8lwMLVUtnlF1Q7I+6k1Iomv2goY9d1bRl4q2N5Pit2qJVr2AMW0sceQXeh23i2a/CKOqVAdg==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.730.0': - resolution: {integrity: sha512-BSPssGj54B/AABWXARIPOT/1ybFahM1ldlfmXy9gRmZi/afe9geWJGlFYCCt3PmqR+1Ny5XIjSfue+kMd//drQ==} + '@aws-sdk/token-providers@3.723.0': + resolution: {integrity: sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==} engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.723.0 '@aws-sdk/types@3.723.0': resolution: {integrity: sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA==} @@ -3807,8 +3911,8 @@ packages: resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.730.0': - resolution: {integrity: sha512-1KTFuVnk+YtLgWr6TwDiggcDqtPpOY2Cszt3r2lkXfaEAX6kHyOZi1vdvxXjPU5LsOBJem8HZ7KlkmrEi+xowg==} + '@aws-sdk/util-endpoints@3.726.0': + resolution: {integrity: sha512-sLd30ASsPMoPn3XBK50oe/bkpJ4N8Bpb7SbhoxcY3Lk+fSASaWxbbXE81nbvCnkxrZCvkPOiDHzJCp1E2im71A==} engines: {node: '>=18.0.0'} '@aws-sdk/util-format-url@3.723.0': @@ -3822,8 +3926,8 @@ packages: '@aws-sdk/util-user-agent-browser@3.723.0': resolution: {integrity: sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==} - '@aws-sdk/util-user-agent-node@3.730.0': - resolution: {integrity: sha512-yBvkOAjqsDEl1va4eHNOhnFBk0iCY/DBFNyhvtTMqPF4NO+MITWpFs3J9JtZKzJlQ6x0Yb9TLQ8NhDjEISz5Ug==} + '@aws-sdk/util-user-agent-node@3.726.0': + resolution: {integrity: sha512-iEj6KX9o6IQf23oziorveRqyzyclWai95oZHDJtYav3fvLJKStwSjygO4xSF7ycHcTYeCHSLO1FFOHgGVs4Viw==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -4522,11 +4626,11 @@ packages: '@cfworker/json-schema@4.1.0': resolution: {integrity: sha512-/vYKi/qMxwNsuIJ9WGWwM2rflY40ZenK3Kh4uR5vB9/Nz12Y7IUN/Xf4wDA7vzPfw0VNh3b/jz4+MjcVgARKJg==} - '@chain-registry/types@0.50.51': - resolution: {integrity: sha512-ychIe0Pvl4fJjYlPJTwxwLFqQ7XVFczTlcdJASUEhLq/sBgKzisw2B+YHGjM+8xs2HACOSs05GHmYTi6OvxTIg==} + '@chain-registry/types@0.50.50': + resolution: {integrity: sha512-H+sGuL8HTr0iFO4PJlBC9MLfrFR+NsD6sFSoFh2+4+obBCVuc3tp5tz/CSfLy04tIySgLlbmqMxkMNkgv1ZpXg==} - '@chain-registry/utils@1.51.51': - resolution: {integrity: sha512-SVQ3ZeueIIWD927cxlyVHtJgOxuRmLO3SgyyuPq+rtoUbaIbzbL0Nw5nwaE7tii5l6qeBNl/3l72cmoDdCfKcw==} + '@chain-registry/utils@1.51.50': + resolution: {integrity: sha512-IkJKGelpCQko20KVXT4iTslF54iUSmcnJTM2cByvTRPN8q9/oeSVHSyYcAWVI2iiUAwbMZJhNeUQxu+i0+OPow==} '@chevrotain/cst-dts-gen@11.0.3': resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} @@ -5436,6 +5540,9 @@ packages: '@elizaos/core@0.1.7-alpha.2': resolution: {integrity: sha512-gNvFw/Xnv4dlcfmmKxRa+baKq6en4TitAjUGvo8LgAUkSk156A0fffJ0lAsc1rX8zMB5NsIqdvMCbwKxDd54OQ==} + '@elizaos/core@0.1.8': + resolution: {integrity: sha512-nQT5uQTQVTZJ3CrhVkK4dRdP/RuBMiOv/u3JZvMJGhY45z0Gy0gY27NEn/BBlJ4Ymt/SmqtXOul/x2hOeQen4Q==} + '@emnapi/core@1.3.1': resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} @@ -6986,6 +7093,9 @@ packages: '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@jspm/core@2.1.0': resolution: {integrity: sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg==} @@ -7190,6 +7300,9 @@ packages: '@lit/reactive-element@1.6.3': resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + '@liuli-util/fs-extra@0.1.0': + resolution: {integrity: sha512-eaAyDyMGT23QuRGbITVY3SOJff3G9ekAAyGqB9joAnTBmqvFN+9a1FazOdO70G6IUqgpKV451eBHYSRcOJ/FNQ==} + '@lukeed/csprng@1.1.0': resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} @@ -7402,8 +7515,8 @@ packages: '@mysten/bcs@1.2.1': resolution: {integrity: sha512-RMSaUsNb8oR0rTRVIOOcyoEVJqQi6DLvMXN+7mvDcki12FJFQ0lF89zQa7AV7cIurWlDQfJ8VIbCuRDyK+955A==} - '@mysten/sui@1.20.0': - resolution: {integrity: sha512-/XLogwOYaSP31lPt377fj5b+8sRIyt2Opi/Ssos5dssPqol9vgvN/ZzV5Y5qVl4VquhATJHRpwV33B5rIVi7Ow==} + '@mysten/sui@1.19.0': + resolution: {integrity: sha512-hjNCArz7upZaGZNNmMeQRKSlQK73eN+p8MlKJvlZpx/6gorK0WWFWWjEcIyJndkIDbLb06nbQbWIWZ8KoI036Q==} engines: {node: '>=18'} '@napi-rs/wasm-runtime@0.2.4': @@ -7990,8 +8103,8 @@ packages: resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} engines: {node: '>= 18'} - '@octokit/request@9.2.0': - resolution: {integrity: sha512-kXLfcxhC4ozCnAXy2ff+cSxpcF0A1UqxjvYMqNuPIeOAzJbVWQ+dy5G2fTylofB/gTbObT8O6JORab+5XtA1Kw==} + '@octokit/request@9.1.4': + resolution: {integrity: sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==} engines: {node: '>= 18'} '@octokit/rest@19.0.11': @@ -10381,6 +10494,9 @@ packages: '@types/fluent-ffmpeg@2.1.27': resolution: {integrity: sha512-QiDWjihpUhriISNoBi2hJBRUUmoj/BMTYcfz+F+ZM9hHWBYABFAE6hjP/TbCZC0GWwlpa3FzvHH9RzFeRusZ7A==} + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + '@types/geojson@7946.0.15': resolution: {integrity: sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==} @@ -10484,8 +10600,8 @@ packages: '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} '@types/multer@1.4.12': resolution: {integrity: sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==} @@ -11430,8 +11546,8 @@ packages: zod: optional: true - ai@4.0.39: - resolution: {integrity: sha512-Iari2vMHROKs/ul3PToaza4JEIE56oecbJdS8mFFVrB5uOxNqJY1CHfRBX24HNiXYA+nXJunZujCSOzfcwBqbg==} + ai@4.0.38: + resolution: {integrity: sha512-Lqo39GY8YlfUHgQdYb8qzaz+vfAu/8c8eIDck7NNKrdmwOAr8f4SuDgPVbISn1/4F9gR6WEXnD2f552ZEVT31Q==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -11442,6 +11558,14 @@ packages: zod: optional: true + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -12362,6 +12486,9 @@ packages: resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} + call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -12427,8 +12554,8 @@ packages: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} - chain-registry@1.69.95: - resolution: {integrity: sha512-FW4tNblqlO6iMhgDkH474jL3L5GBPywecGPqaqTDgy3mWPn+9TWQMmeuXY0XcuBNWGyz1BNxH5QMVhjC7rQQAg==} + chain-registry@1.69.94: + resolution: {integrity: sha512-8WpEM0BRtvhe6MBek0Jx41xaNH8E3I76yqebr0q5RohIs+Rmjt+aCzmi9T8AOceyJw7cOzIBhJjD1pi2agfd1w==} chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} @@ -12811,8 +12938,8 @@ packages: resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} engines: {node: '>= 0.8.0'} - compromise@14.14.4: - resolution: {integrity: sha512-QdbJwronwxeqb7a5KFK/+Y5YieZ4PE1f7ai0vU58Pp4jih+soDCBMuKVbhDEPQ+6+vI3vSiG4UAAjTAXLJw1Qw==} + compromise@14.14.3: + resolution: {integrity: sha512-nR/3bJJ/Q2LZF9is66s9zhwhm63zcZ+/EaZWUJ8PgEO40ROctfrKdYQmO+UbwVsrp1/crDhCrsMJu0rgo/JirQ==} engines: {node: '>=12.0.0'} concat-map@0.0.1: @@ -13781,8 +13908,8 @@ packages: discord-api-types@0.37.100: resolution: {integrity: sha512-a8zvUI0GYYwDtScfRd/TtaNBDTXwP5DiDVX7K5OmE+DRT57gBqKnwtOC5Ol8z0mRW8KQfETIgiB8U0YZ9NXiCA==} - discord-api-types@0.37.116: - resolution: {integrity: sha512-g+BH/m0hyS/JzL+e0aM+z2o9UtwfyUZ0hqeyc+6sNwdMx+NtQkqULRV/oj9ynAefpRb+cpOjmWaYec4B1I0Hqg==} + discord-api-types@0.37.115: + resolution: {integrity: sha512-ivPnJotSMrXW8HLjFu+0iCVs8zP6KSliMelhr7HgcB2ki1QzpORkb26m71l1pzSnnGfm7gb5n/VtRTtpw8kXFA==} discord-api-types@0.37.83: resolution: {integrity: sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==} @@ -14436,6 +14563,9 @@ packages: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} engines: {node: '>=6.5.0', npm: '>=3'} + eval-estree-expression@2.0.3: + resolution: {integrity: sha512-6zXgUV+NHvx6PwHxPsIQ8T4cCUgsnhaH6ZyYF1OSKZIrkcAzvSvZgHAbdj72GlNm8eH6c8FI8ywcwqm42Xq1aQ==} + eval@0.1.8: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} @@ -14488,6 +14618,10 @@ packages: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} + eventsource@3.0.2: + resolution: {integrity: sha512-YolzkJNxsTL3tCJMWFxpxtG2sCjbZ4LQUBUrkdaJK0ub0p6lmJt+2+1SwhKjLc652lpH9L/79Ptez972H9tphw==} + engines: {node: '>=18.0.0'} + evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -14634,8 +14768,8 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -16563,6 +16697,9 @@ packages: jssha@3.2.0: resolution: {integrity: sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==} + jstat@1.9.6: + resolution: {integrity: sha512-rPBkJbK2TnA8pzs93QcDDPlKcrtZWuuCo2dVR0TFLOJSxhqfWOVCSp8aV3/oSbn+4uY4yw1URtLpHQedtmXfug==} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -18225,8 +18362,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@2.1.0: - resolution: {integrity: sha512-Iq/949c5IueVC5gQR7OYXs0uHsDIePcgZFlVRIVGfQcWwbKG+nsyWfthswdytShlRdkZADY+bWSi+BRyUL81gA==} + oniguruma-to-es@2.0.0: + resolution: {integrity: sha512-pE7+9jQgomy10aK6BJKRNHj1Nth0YLOzb3iRuhlz4gRzNSBSd7hga6U8BE6o0SoSuSkqv+PPtt511Msd1Hkl0w==} only-allow@1.2.1: resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} @@ -18273,6 +18410,13 @@ packages: openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + openapi-zod-client@1.18.2: + resolution: {integrity: sha512-mfqBxwnGbnfK1CwQb6TBmu8CqVUlHD013Aw82JhDf0iGZsd5oemlPzO8QtteLAaAE6cmLNmSG/tQeBjQV0vB9g==} + hasBin: true + + openapi3-ts@3.1.0: + resolution: {integrity: sha512-1qKTvCCVoV0rkwUh1zq5o8QyghmwYPuhdvtjv1rFjuOnJToXhQyF8eGjNETQ8QmGjr9Jz/tkAKLITIl2s7dw3A==} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -18535,6 +18679,18 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + pastable@2.2.1: + resolution: {integrity: sha512-K4ClMxRKpgN4sXj6VIPPrvor/TMp2yPNCGtfhvV106C73SwefQ3FuegURsH7AQHpqu0WwbvKXRl1HQxF6qax9w==} + engines: {node: '>=14.x'} + peerDependencies: + react: '>=17' + xstate: '>=4.32.1' + peerDependenciesMeta: + react: + optional: true + xstate: + optional: true + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -19961,8 +20117,8 @@ packages: react: '>=16.8' react-dom: '>=16.8' - react-router-dom@7.1.2: - resolution: {integrity: sha512-kE7JdrDfeWO/2d6RPucLmqp2UL8Isv1VWtI5MQyYNA99KtncqxWDL6550+0rH4fboJKJbXRcyjRnIRT/gkxTcA==} + react-router-dom@7.1.1: + resolution: {integrity: sha512-vSrQHWlJ5DCfyrhgo0k6zViOe9ToK8uT5XGSmnuC2R3/g261IdIMpZVqfjD6vWSXdnf5Czs4VA/V60oVR6/jnA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -19979,8 +20135,8 @@ packages: peerDependencies: react: '>=16.8' - react-router@7.1.2: - resolution: {integrity: sha512-KeallSO30KLpIe/ZZqfk6pCJ1c+5JhMxl3SCS3Zx1LgaGuQbgLDmjuNi6KZ5LnAV9sWjbmBWGRw8Um/Pw6BExg==} + react-router@7.1.1: + resolution: {integrity: sha512-39sXJkftkKWRZ2oJtHhCxmoCrBCULr/HAH4IT5DHlgu/Q0FCPV0S4Lx+abjDTx/74xoZzNYDYbOZWlJjruyuDQ==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -20141,9 +20297,6 @@ packages: reflect-metadata@0.1.13: resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} - reflect-metadata@0.1.14: - resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} - reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -21362,6 +21515,9 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tanu@0.1.13: + resolution: {integrity: sha512-UbRmX7ccZ4wMVOY/Uw+7ji4VOkEYSYJG1+I4qzbnn4qh/jtvVbrm6BFnF12NQQ4+jGv21wKmjb1iFyUSVnBWcQ==} + tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -21822,6 +21978,12 @@ packages: '@swc/wasm': optional: true + ts-pattern@5.6.0: + resolution: {integrity: sha512-SL8u60X5+LoEy9tmQHWCdPc2hhb2pKI6I1tU5Jue3v8+iRqZdcT3mWPwKKJy1fMfky6uha82c8ByHAE8PMhKHw==} + + ts-toolbelt@9.6.0: + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + ts-xor@1.3.0: resolution: {integrity: sha512-RLXVjliCzc1gfKQFLRpfeD0rrWmjnSTgj7+RFhoq3KRkUYa8LE/TIidYOzM5h+IdFBDSjjSgk9Lto9sdMfDFEA==} @@ -23162,6 +23324,10 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + whence@2.0.1: + resolution: {integrity: sha512-VtcCE1Pe3BKofF/k+P5xcpuoqQ0f1NJY6TmdUw5kInl9/pEr1ZEFD9+ZOUicf52tvpTbhMS93aWXriu2IQYTTw==} + engines: {node: '>=14'} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -23632,16 +23798,16 @@ snapshots: '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) zod: 3.23.8 - '@ai-sdk/mistral@1.0.9(zod@3.23.8)': + '@ai-sdk/mistral@1.0.8(zod@3.23.8)': dependencies: '@ai-sdk/provider': 1.0.4 - '@ai-sdk/provider-utils': 2.0.8(zod@3.23.8) + '@ai-sdk/provider-utils': 2.0.7(zod@3.23.8) zod: 3.23.8 - '@ai-sdk/openai@1.0.20(zod@3.24.1)': + '@ai-sdk/openai@1.0.19(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.4 - '@ai-sdk/provider-utils': 2.0.8(zod@3.24.1) + '@ai-sdk/provider-utils': 2.0.7(zod@3.24.1) zod: 3.24.1 '@ai-sdk/openai@1.0.5(zod@3.23.8)': @@ -23686,7 +23852,7 @@ snapshots: optionalDependencies: zod: 3.23.8 - '@ai-sdk/provider-utils@2.0.8(zod@3.23.8)': + '@ai-sdk/provider-utils@2.0.7(zod@3.23.8)': dependencies: '@ai-sdk/provider': 1.0.4 eventsource-parser: 3.0.0 @@ -23695,7 +23861,7 @@ snapshots: optionalDependencies: zod: 3.23.8 - '@ai-sdk/provider-utils@2.0.8(zod@3.24.1)': + '@ai-sdk/provider-utils@2.0.7(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.4 eventsource-parser: 3.0.0 @@ -23730,20 +23896,20 @@ snapshots: react: 19.0.0 zod: 3.23.8 - '@ai-sdk/react@1.0.12(react@19.0.0)(zod@3.23.8)': + '@ai-sdk/react@1.0.11(react@19.0.0)(zod@3.23.8)': dependencies: - '@ai-sdk/provider-utils': 2.0.8(zod@3.23.8) - '@ai-sdk/ui-utils': 1.0.11(zod@3.23.8) + '@ai-sdk/provider-utils': 2.0.7(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.10(zod@3.23.8) swr: 2.3.0(react@19.0.0) throttleit: 2.1.0 optionalDependencies: react: 19.0.0 zod: 3.23.8 - '@ai-sdk/react@1.0.12(react@19.0.0)(zod@3.24.1)': + '@ai-sdk/react@1.0.11(react@19.0.0)(zod@3.24.1)': dependencies: - '@ai-sdk/provider-utils': 2.0.8(zod@3.24.1) - '@ai-sdk/ui-utils': 1.0.11(zod@3.24.1) + '@ai-sdk/provider-utils': 2.0.7(zod@3.24.1) + '@ai-sdk/ui-utils': 1.0.10(zod@3.24.1) swr: 2.3.0(react@19.0.0) throttleit: 2.1.0 optionalDependencies: @@ -23777,18 +23943,18 @@ snapshots: optionalDependencies: zod: 3.23.8 - '@ai-sdk/ui-utils@1.0.11(zod@3.23.8)': + '@ai-sdk/ui-utils@1.0.10(zod@3.23.8)': dependencies: '@ai-sdk/provider': 1.0.4 - '@ai-sdk/provider-utils': 2.0.8(zod@3.23.8) + '@ai-sdk/provider-utils': 2.0.7(zod@3.23.8) zod-to-json-schema: 3.24.1(zod@3.23.8) optionalDependencies: zod: 3.23.8 - '@ai-sdk/ui-utils@1.0.11(zod@3.24.1)': + '@ai-sdk/ui-utils@1.0.10(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.4 - '@ai-sdk/provider-utils': 2.0.8(zod@3.24.1) + '@ai-sdk/provider-utils': 2.0.7(zod@3.24.1) zod-to-json-schema: 3.24.1(zod@3.24.1) optionalDependencies: zod: 3.24.1 @@ -24004,6 +24170,27 @@ snapshots: - debug - supports-color + '@apidevtools/json-schema-ref-parser@11.7.2': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@apidevtools/swagger-parser@10.1.1(openapi-types@12.1.3)': + dependencies: + '@apidevtools/json-schema-ref-parser': 11.7.2 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + '@apollo/client@3.12.6(@types/react@19.0.7)(graphql@16.10.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) @@ -24122,21 +24309,23 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-polly@3.730.0': + '@aws-sdk/client-polly@3.726.1': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.730.0 - '@aws-sdk/credential-provider-node': 3.730.0 + '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) + '@aws-sdk/client-sts': 3.726.1 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) '@aws-sdk/middleware-host-header': 3.723.0 '@aws-sdk/middleware-logger': 3.723.0 '@aws-sdk/middleware-recursion-detection': 3.723.0 - '@aws-sdk/middleware-user-agent': 3.730.0 + '@aws-sdk/middleware-user-agent': 3.726.0 '@aws-sdk/region-config-resolver': 3.723.0 '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.730.0 + '@aws-sdk/util-endpoints': 3.726.0 '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.730.0 + '@aws-sdk/util-user-agent-node': 3.726.0 '@smithy/config-resolver': 4.0.1 '@smithy/core': 3.1.1 '@smithy/fetch-http-handler': 5.0.1 @@ -24167,29 +24356,31 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-s3@3.730.0': + '@aws-sdk/client-s3@3.729.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.730.0 - '@aws-sdk/credential-provider-node': 3.730.0 + '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) + '@aws-sdk/client-sts': 3.726.1 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) '@aws-sdk/middleware-bucket-endpoint': 3.726.0 '@aws-sdk/middleware-expect-continue': 3.723.0 - '@aws-sdk/middleware-flexible-checksums': 3.730.0 + '@aws-sdk/middleware-flexible-checksums': 3.729.0 '@aws-sdk/middleware-host-header': 3.723.0 '@aws-sdk/middleware-location-constraint': 3.723.0 '@aws-sdk/middleware-logger': 3.723.0 '@aws-sdk/middleware-recursion-detection': 3.723.0 - '@aws-sdk/middleware-sdk-s3': 3.730.0 + '@aws-sdk/middleware-sdk-s3': 3.723.0 '@aws-sdk/middleware-ssec': 3.723.0 - '@aws-sdk/middleware-user-agent': 3.730.0 + '@aws-sdk/middleware-user-agent': 3.726.0 '@aws-sdk/region-config-resolver': 3.723.0 - '@aws-sdk/signature-v4-multi-region': 3.730.0 + '@aws-sdk/signature-v4-multi-region': 3.723.0 '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.730.0 + '@aws-sdk/util-endpoints': 3.726.0 '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.730.0 + '@aws-sdk/util-user-agent-node': 3.726.0 '@aws-sdk/xml-builder': 3.723.0 '@smithy/config-resolver': 4.0.1 '@smithy/core': 3.1.1 @@ -24228,20 +24419,110 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.730.0': + '@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.726.1 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) + '@aws-sdk/middleware-host-header': 3.723.0 + '@aws-sdk/middleware-logger': 3.723.0 + '@aws-sdk/middleware-recursion-detection': 3.723.0 + '@aws-sdk/middleware-user-agent': 3.726.0 + '@aws-sdk/region-config-resolver': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-endpoints': 3.726.0 + '@aws-sdk/util-user-agent-browser': 3.723.0 + '@aws-sdk/util-user-agent-node': 3.726.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/middleware-retry': 4.0.3 + '@smithy/middleware-serde': 4.0.1 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.3 + '@smithy/util-defaults-mode-node': 4.0.3 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.726.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/middleware-host-header': 3.723.0 + '@aws-sdk/middleware-logger': 3.723.0 + '@aws-sdk/middleware-recursion-detection': 3.723.0 + '@aws-sdk/middleware-user-agent': 3.726.0 + '@aws-sdk/region-config-resolver': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-endpoints': 3.726.0 + '@aws-sdk/util-user-agent-browser': 3.723.0 + '@aws-sdk/util-user-agent-node': 3.726.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/middleware-retry': 4.0.3 + '@smithy/middleware-serde': 4.0.1 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.3 + '@smithy/util-defaults-mode-node': 4.0.3 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.726.1': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.730.0 + '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) '@aws-sdk/middleware-host-header': 3.723.0 '@aws-sdk/middleware-logger': 3.723.0 '@aws-sdk/middleware-recursion-detection': 3.723.0 - '@aws-sdk/middleware-user-agent': 3.730.0 + '@aws-sdk/middleware-user-agent': 3.726.0 '@aws-sdk/region-config-resolver': 3.723.0 '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.730.0 + '@aws-sdk/util-endpoints': 3.726.0 '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.730.0 + '@aws-sdk/util-user-agent-node': 3.726.0 '@smithy/config-resolver': 4.0.1 '@smithy/core': 3.1.1 '@smithy/fetch-http-handler': 5.0.1 @@ -24271,25 +24552,27 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-transcribe-streaming@3.730.0': + '@aws-sdk/client-transcribe-streaming@3.726.1': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.730.0 - '@aws-sdk/credential-provider-node': 3.730.0 + '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) + '@aws-sdk/client-sts': 3.726.1 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) '@aws-sdk/eventstream-handler-node': 3.723.0 '@aws-sdk/middleware-eventstream': 3.723.0 '@aws-sdk/middleware-host-header': 3.723.0 '@aws-sdk/middleware-logger': 3.723.0 '@aws-sdk/middleware-recursion-detection': 3.723.0 '@aws-sdk/middleware-sdk-transcribe-streaming': 3.723.0 - '@aws-sdk/middleware-user-agent': 3.730.0 + '@aws-sdk/middleware-user-agent': 3.726.0 '@aws-sdk/middleware-websocket': 3.723.0 '@aws-sdk/region-config-resolver': 3.723.0 '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.730.0 + '@aws-sdk/util-endpoints': 3.726.0 '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.730.0 + '@aws-sdk/util-user-agent-node': 3.726.0 '@smithy/config-resolver': 4.0.1 '@smithy/core': 3.1.1 '@smithy/eventstream-serde-browser': 4.0.1 @@ -24322,7 +24605,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.730.0': + '@aws-sdk/core@3.723.0': dependencies: '@aws-sdk/types': 3.723.0 '@smithy/core': 3.1.1 @@ -24336,17 +24619,17 @@ snapshots: fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.730.0': + '@aws-sdk/credential-provider-env@3.723.0': dependencies: - '@aws-sdk/core': 3.730.0 + '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.730.0': + '@aws-sdk/credential-provider-http@3.723.0': dependencies: - '@aws-sdk/core': 3.730.0 + '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/fetch-http-handler': 5.0.1 '@smithy/node-http-handler': 4.0.2 @@ -24357,15 +24640,15 @@ snapshots: '@smithy/util-stream': 4.0.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.730.0': + '@aws-sdk/credential-provider-ini@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)': dependencies: - '@aws-sdk/core': 3.730.0 - '@aws-sdk/credential-provider-env': 3.730.0 - '@aws-sdk/credential-provider-http': 3.730.0 - '@aws-sdk/credential-provider-process': 3.730.0 - '@aws-sdk/credential-provider-sso': 3.730.0 - '@aws-sdk/credential-provider-web-identity': 3.730.0 - '@aws-sdk/nested-clients': 3.730.0 + '@aws-sdk/client-sts': 3.726.1 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-env': 3.723.0 + '@aws-sdk/credential-provider-http': 3.723.0 + '@aws-sdk/credential-provider-process': 3.723.0 + '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)) + '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1) '@aws-sdk/types': 3.723.0 '@smithy/credential-provider-imds': 4.0.1 '@smithy/property-provider': 4.0.1 @@ -24373,16 +24656,17 @@ snapshots: '@smithy/types': 4.1.0 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.730.0': + '@aws-sdk/credential-provider-node@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)': dependencies: - '@aws-sdk/credential-provider-env': 3.730.0 - '@aws-sdk/credential-provider-http': 3.730.0 - '@aws-sdk/credential-provider-ini': 3.730.0 - '@aws-sdk/credential-provider-process': 3.730.0 - '@aws-sdk/credential-provider-sso': 3.730.0 - '@aws-sdk/credential-provider-web-identity': 3.730.0 + '@aws-sdk/credential-provider-env': 3.723.0 + '@aws-sdk/credential-provider-http': 3.723.0 + '@aws-sdk/credential-provider-ini': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) + '@aws-sdk/credential-provider-process': 3.723.0 + '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)) + '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1) '@aws-sdk/types': 3.723.0 '@smithy/credential-provider-imds': 4.0.1 '@smithy/property-provider': 4.0.1 @@ -24390,40 +24674,41 @@ snapshots: '@smithy/types': 4.1.0 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-process@3.730.0': + '@aws-sdk/credential-provider-process@3.723.0': dependencies: - '@aws-sdk/core': 3.730.0 + '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 '@smithy/shared-ini-file-loader': 4.0.1 '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.730.0': + '@aws-sdk/credential-provider-sso@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))': dependencies: - '@aws-sdk/client-sso': 3.730.0 - '@aws-sdk/core': 3.730.0 - '@aws-sdk/token-providers': 3.730.0 + '@aws-sdk/client-sso': 3.726.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/token-providers': 3.723.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)) '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 '@smithy/shared-ini-file-loader': 4.0.1 '@smithy/types': 4.1.0 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.730.0': + '@aws-sdk/credential-provider-web-identity@3.723.0(@aws-sdk/client-sts@3.726.1)': dependencies: - '@aws-sdk/core': 3.730.0 - '@aws-sdk/nested-clients': 3.730.0 + '@aws-sdk/client-sts': 3.726.1 + '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 '@smithy/types': 4.1.0 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt '@aws-sdk/eventstream-handler-node@3.723.0': dependencies: @@ -24456,12 +24741,12 @@ snapshots: '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.730.0': + '@aws-sdk/middleware-flexible-checksums@3.729.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.730.0 + '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/is-array-buffer': 4.0.0 '@smithy/node-config-provider': 4.0.1 @@ -24498,9 +24783,9 @@ snapshots: '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.730.0': + '@aws-sdk/middleware-sdk-s3@3.723.0': dependencies: - '@aws-sdk/core': 3.730.0 + '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@aws-sdk/util-arn-parser': 3.723.0 '@smithy/core': 3.1.1 @@ -24532,11 +24817,11 @@ snapshots: '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.730.0': + '@aws-sdk/middleware-user-agent@3.726.0': dependencies: - '@aws-sdk/core': 3.730.0 + '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.730.0 + '@aws-sdk/util-endpoints': 3.726.0 '@smithy/core': 3.1.1 '@smithy/protocol-http': 5.0.1 '@smithy/types': 4.1.0 @@ -24555,49 +24840,6 @@ snapshots: '@smithy/util-hex-encoding': 4.0.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.730.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.730.0 - '@aws-sdk/middleware-host-header': 3.723.0 - '@aws-sdk/middleware-logger': 3.723.0 - '@aws-sdk/middleware-recursion-detection': 3.723.0 - '@aws-sdk/middleware-user-agent': 3.730.0 - '@aws-sdk/region-config-resolver': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.730.0 - '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.730.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.1 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.2 - '@smithy/middleware-retry': 4.0.3 - '@smithy/middleware-serde': 4.0.1 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.2 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.2 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.3 - '@smithy/util-defaults-mode-node': 4.0.3 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/region-config-resolver@3.723.0': dependencies: '@aws-sdk/types': 3.723.0 @@ -24607,9 +24849,9 @@ snapshots: '@smithy/util-middleware': 4.0.1 tslib: 2.8.1 - '@aws-sdk/s3-request-presigner@3.730.0': + '@aws-sdk/s3-request-presigner@3.729.0': dependencies: - '@aws-sdk/signature-v4-multi-region': 3.730.0 + '@aws-sdk/signature-v4-multi-region': 3.723.0 '@aws-sdk/types': 3.723.0 '@aws-sdk/util-format-url': 3.723.0 '@smithy/middleware-endpoint': 4.0.2 @@ -24618,25 +24860,23 @@ snapshots: '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.730.0': + '@aws-sdk/signature-v4-multi-region@3.723.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.730.0 + '@aws-sdk/middleware-sdk-s3': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/protocol-http': 5.0.1 '@smithy/signature-v4': 5.0.1 '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.730.0': + '@aws-sdk/token-providers@3.723.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))': dependencies: - '@aws-sdk/nested-clients': 3.730.0 + '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) '@aws-sdk/types': 3.723.0 '@smithy/property-provider': 4.0.1 '@smithy/shared-ini-file-loader': 4.0.1 '@smithy/types': 4.1.0 tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt '@aws-sdk/types@3.723.0': dependencies: @@ -24647,7 +24887,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.730.0': + '@aws-sdk/util-endpoints@3.726.0': dependencies: '@aws-sdk/types': 3.723.0 '@smithy/types': 4.1.0 @@ -24672,9 +24912,9 @@ snapshots: bowser: 2.11.0 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.730.0': + '@aws-sdk/util-user-agent-node@3.726.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.730.0 + '@aws-sdk/middleware-user-agent': 3.726.0 '@aws-sdk/types': 3.723.0 '@smithy/node-config-provider': 4.0.1 '@smithy/types': 4.1.0 @@ -25588,11 +25828,11 @@ snapshots: '@cfworker/json-schema@4.1.0': {} - '@chain-registry/types@0.50.51': {} + '@chain-registry/types@0.50.50': {} - '@chain-registry/utils@1.51.51': + '@chain-registry/utils@1.51.50': dependencies: - '@chain-registry/types': 0.50.51 + '@chain-registry/types': 0.50.50 bignumber.js: 9.1.2 sha.js: 2.4.11 @@ -25743,7 +25983,7 @@ snapshots: '@coinbase/wallet-sdk@4.2.4': dependencies: - '@noble/hashes': 1.6.1 + '@noble/hashes': 1.7.0 clsx: 1.2.1 eventemitter3: 5.0.1 preact: 10.25.4 @@ -25939,9 +26179,9 @@ snapshots: '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@noble/hashes': 1.7.0 - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 @@ -25961,9 +26201,9 @@ snapshots: '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5)': dependencies: '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5)) + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5)) '@noble/hashes': 1.7.0 - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5) + '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5) bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 @@ -26010,9 +26250,15 @@ snapshots: bn.js: 5.2.1 buffer-layout: 1.2.2 - '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5))': + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5) + '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5))': + dependencies: + '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5) bn.js: 5.2.1 buffer-layout: 1.2.2 @@ -26703,7 +26949,7 @@ snapshots: '@discordjs/formatters': 0.6.0 '@discordjs/util': 1.1.1 '@sapphire/shapeshift': 4.0.0 - discord-api-types: 0.37.116 + discord-api-types: 0.37.115 fast-deep-equal: 3.1.3 ts-mixer: 6.0.4 tslib: 2.8.1 @@ -26718,7 +26964,7 @@ snapshots: '@discordjs/formatters@0.6.0': dependencies: - discord-api-types: 0.37.116 + discord-api-types: 0.37.115 '@discordjs/node-pre-gyp@0.4.5(encoding@0.1.13)': dependencies: @@ -27775,6 +28021,57 @@ snapshots: - typeorm - vue + '@elizaos/core@0.1.8(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(@langchain/core@0.3.30(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(@langchain/groq@0.1.3(@langchain/core@0.3.30(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13))(axios@1.7.9)(encoding@0.1.13)(react@19.0.0)(sswr@2.1.0(svelte@5.18.0))(svelte@5.18.0)': + dependencies: + '@ai-sdk/anthropic': 0.0.56(zod@3.23.8) + '@ai-sdk/google': 0.0.55(zod@3.23.8) + '@ai-sdk/google-vertex': 0.0.43(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(zod@3.23.8) + '@ai-sdk/groq': 0.0.3(zod@3.23.8) + '@ai-sdk/mistral': 1.0.8(zod@3.23.8) + '@ai-sdk/openai': 1.0.5(zod@3.23.8) + '@anthropic-ai/sdk': 0.30.1(encoding@0.1.13) + '@fal-ai/client': 1.2.0 + '@types/uuid': 10.0.0 + ai: 3.4.33(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))(react@19.0.0)(sswr@2.1.0(svelte@5.18.0))(svelte@5.18.0)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) + anthropic-vertex-ai: 1.0.2(encoding@0.1.13)(zod@3.23.8) + fastembed: 1.14.1 + fastestsmallesttextencoderdecoder: 1.0.22 + gaxios: 6.7.1(encoding@0.1.13) + glob: 11.0.0 + handlebars: 4.7.8 + js-sha1: 0.7.0 + js-tiktoken: 1.0.15 + langchain: 0.3.6(@langchain/core@0.3.30(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(@langchain/groq@0.1.3(@langchain/core@0.3.30(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13))(axios@1.7.9)(encoding@0.1.13)(handlebars@4.7.8)(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) + ollama-ai-provider: 0.16.1(zod@3.23.8) + openai: 4.73.0(encoding@0.1.13)(zod@3.23.8) + tinyld: 1.3.4 + together-ai: 0.7.0(encoding@0.1.13) + unique-names-generator: 4.7.1 + uuid: 11.0.3 + zod: 3.23.8 + transitivePeerDependencies: + - '@google-cloud/vertexai' + - '@langchain/anthropic' + - '@langchain/aws' + - '@langchain/cohere' + - '@langchain/core' + - '@langchain/google-genai' + - '@langchain/google-vertexai' + - '@langchain/groq' + - '@langchain/mistralai' + - '@langchain/ollama' + - axios + - cheerio + - encoding + - peggy + - react + - solid-js + - sswr + - supports-color + - svelte + - typeorm + - vue + '@emnapi/core@1.3.1': dependencies: '@emnapi/wasi-threads': 1.0.1 @@ -28850,10 +29147,10 @@ snapshots: '@shikijs/types': 1.27.2 '@shikijs/vscode-textmate': 10.0.1 - '@goat-sdk/adapter-vercel-ai@0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.39(react@19.0.0)(zod@3.23.8))': + '@goat-sdk/adapter-vercel-ai@0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.38(react@19.0.0)(zod@3.23.8))': dependencies: '@goat-sdk/core': 0.4.0 - ai: 4.0.39(react@19.0.0)(zod@3.23.8) + ai: 4.0.38(react@19.0.0)(zod@3.23.8) zod: 3.23.8 '@goat-sdk/core@0.3.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)': @@ -29573,27 +29870,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -29621,14 +29918,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) + jest-config: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -29653,7 +29950,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -29671,7 +29968,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.10.7 + '@types/node': 20.17.9 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -29693,7 +29990,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.10.7 + '@types/node': 20.17.9 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -29763,7 +30060,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -29796,6 +30093,8 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} + '@jsdevtools/ono@7.1.3': {} + '@jspm/core@2.1.0': {} '@kikobeats/time-span@1.0.5': {} @@ -30399,6 +30698,11 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 + '@liuli-util/fs-extra@0.1.0': + dependencies: + '@types/fs-extra': 9.0.13 + fs-extra: 10.1.0 + '@lukeed/csprng@1.1.0': {} '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': @@ -30645,18 +30949,18 @@ snapshots: - supports-color - utf-8-validate - '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(encoding@0.1.13)': + '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(encoding@0.1.13)': dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2)(encoding@0.1.13) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: - encoding @@ -30679,12 +30983,12 @@ snapshots: dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@noble/curves': 1.8.0 - '@solana/web3.js': 1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: @@ -30714,11 +31018,11 @@ snapshots: dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: @@ -30748,11 +31052,11 @@ snapshots: '@metaplex-foundation/umi-serializers-encodings': 0.8.9 '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: @@ -30760,10 +31064,10 @@ snapshots: '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': + '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.5(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) buffer: 6.0.3 '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': @@ -30864,7 +31168,7 @@ snapshots: dependencies: bs58: 6.0.0 - '@mysten/sui@1.20.0(typescript@5.7.3)': + '@mysten/sui@1.19.0(typescript@5.7.3)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) '@mysten/bcs': 1.2.1 @@ -31435,7 +31739,7 @@ snapshots: dependencies: '@octokit/auth-oauth-app': 8.1.2 '@octokit/auth-oauth-user': 5.1.2 - '@octokit/request': 9.2.0 + '@octokit/request': 9.1.4 '@octokit/request-error': 6.1.6 '@octokit/types': 13.7.0 toad-cache: 3.7.0 @@ -31446,14 +31750,14 @@ snapshots: dependencies: '@octokit/auth-oauth-device': 7.1.2 '@octokit/auth-oauth-user': 5.1.2 - '@octokit/request': 9.2.0 + '@octokit/request': 9.1.4 '@octokit/types': 13.7.0 universal-user-agent: 7.0.2 '@octokit/auth-oauth-device@7.1.2': dependencies: '@octokit/oauth-methods': 5.1.3 - '@octokit/request': 9.2.0 + '@octokit/request': 9.1.4 '@octokit/types': 13.7.0 universal-user-agent: 7.0.2 @@ -31461,7 +31765,7 @@ snapshots: dependencies: '@octokit/auth-oauth-device': 7.1.2 '@octokit/oauth-methods': 5.1.3 - '@octokit/request': 9.2.0 + '@octokit/request': 9.1.4 '@octokit/types': 13.7.0 universal-user-agent: 7.0.2 @@ -31502,7 +31806,7 @@ snapshots: dependencies: '@octokit/auth-token': 5.1.1 '@octokit/graphql': 8.1.2 - '@octokit/request': 9.2.0 + '@octokit/request': 9.1.4 '@octokit/request-error': 6.1.6 '@octokit/types': 13.7.0 before-after-hook: 3.0.2 @@ -31540,7 +31844,7 @@ snapshots: '@octokit/graphql@8.1.2': dependencies: - '@octokit/request': 9.2.0 + '@octokit/request': 9.1.4 '@octokit/types': 13.7.0 universal-user-agent: 7.0.2 @@ -31560,7 +31864,7 @@ snapshots: '@octokit/oauth-methods@5.1.3': dependencies: '@octokit/oauth-authorization-url': 7.1.1 - '@octokit/request': 9.2.0 + '@octokit/request': 9.1.4 '@octokit/request-error': 6.1.6 '@octokit/types': 13.7.0 @@ -31664,7 +31968,7 @@ snapshots: '@octokit/types': 13.7.0 universal-user-agent: 6.0.1 - '@octokit/request@9.2.0': + '@octokit/request@9.1.4': dependencies: '@octokit/endpoint': 10.1.2 '@octokit/request-error': 6.1.6 @@ -33424,7 +33728,7 @@ snapshots: dependencies: '@shikijs/types': 1.27.2 '@shikijs/vscode-textmate': 10.0.1 - oniguruma-to-es: 2.1.0 + oniguruma-to-es: 2.0.0 '@shikijs/engine-oniguruma@1.27.2': dependencies: @@ -33537,7 +33841,7 @@ snapshots: '@slack/logger@3.0.0': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@slack/types@2.14.0': {} @@ -33546,7 +33850,7 @@ snapshots: '@slack/logger': 3.0.0 '@slack/types': 2.14.0 '@types/is-stream': 1.1.0 - '@types/node': 22.10.7 + '@types/node': 20.17.9 axios: 1.7.9(debug@4.4.0) eventemitter3: 3.1.2 form-data: 2.5.2 @@ -34159,14 +34463,6 @@ snapshots: - supports-color - utf-8-validate - '@solana/spl-token-group@0.0.4(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': - dependencies: - '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/spl-token-group@0.0.4(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) @@ -34273,21 +34569,6 @@ snapshots: - typescript - utf-8-validate - '@solana/spl-token@0.4.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10)': - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/spl-token-group': 0.0.4(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - '@solana/spl-token@0.4.6(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 @@ -34431,28 +34712,6 @@ snapshots: - encoding - utf-8-validate - '@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5)': - dependencies: - '@babel/runtime': 7.26.0 - '@noble/curves': 1.8.0 - '@noble/hashes': 1.7.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.6.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) - node-fetch: 2.7.0(encoding@0.1.13) - rpc-websockets: 9.0.4 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - '@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.26.0 @@ -35043,7 +35302,7 @@ snapshots: '@types/better-sqlite3@7.6.12': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/big.js@6.2.2': {} @@ -35051,26 +35310,26 @@ snapshots: '@types/bn.js@4.11.6': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/responselike': 1.0.3 '@types/caseless@0.12.5': {} @@ -35095,17 +35354,17 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.5 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/connect@3.4.38': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/cookie@0.6.0': {} '@types/cors@2.8.17': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/d3-array@3.2.1': {} @@ -35226,7 +35485,7 @@ snapshots: '@types/debug@4.1.12': dependencies: - '@types/ms': 2.1.0 + '@types/ms': 0.7.34 '@types/deep-eql@4.0.2': {} @@ -35264,14 +35523,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.5': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -35300,18 +35559,22 @@ snapshots: '@types/fluent-ffmpeg@2.1.27': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 + + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 20.17.9 '@types/geojson@7946.0.15': {} '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/gtag.js@0.0.12': {} @@ -35335,7 +35598,7 @@ snapshots: '@types/http-proxy@1.17.15': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/ioredis@5.0.0': dependencies: @@ -35345,7 +35608,7 @@ snapshots: '@types/is-stream@1.1.0': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/istanbul-lib-coverage@2.0.6': {} @@ -35370,11 +35633,11 @@ snapshots: '@types/jsonwebtoken@9.0.7': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/keyv@3.1.4': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/lodash.isstring@4.0.9': dependencies: @@ -35404,7 +35667,7 @@ snapshots: '@types/mocha@10.0.10': {} - '@types/ms@2.1.0': {} + '@types/ms@0.7.34': {} '@types/multer@1.4.12': dependencies: @@ -35412,12 +35675,12 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 form-data: 4.0.1 '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/node@10.17.60': {} @@ -35457,7 +35720,7 @@ snapshots: '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/pdfjs-dist@2.10.378(encoding@0.1.13)': dependencies: @@ -35468,7 +35731,7 @@ snapshots: '@types/pg@8.11.10': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 pg-protocol: 1.7.0 pg-types: 4.0.2 @@ -35517,7 +35780,7 @@ snapshots: '@types/request@2.48.12': dependencies: '@types/caseless': 0.12.5 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/tough-cookie': 4.0.5 form-data: 2.5.2 @@ -35525,7 +35788,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/retry@0.12.0': {} @@ -35533,18 +35796,18 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/secp256k1@4.0.6': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/semver@7.5.8': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/serve-index@1.9.4': dependencies: @@ -35553,7 +35816,7 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/send': 0.17.4 '@types/sharp@0.32.0': @@ -35568,18 +35831,18 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/sql.js@1.4.9': dependencies: '@types/emscripten': 1.39.13 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/stack-utils@2.0.3': {} '@types/tar@6.1.13': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 minipass: 4.2.8 '@types/tough-cookie@4.0.5': {} @@ -35592,7 +35855,7 @@ snapshots: '@types/unzipper@0.10.10': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/uuid@10.0.0': {} @@ -35604,15 +35867,15 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/ws@8.5.13': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/ws@8.5.3': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@types/yargs-parser@21.0.3': {} @@ -35626,9 +35889,29 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 optional: true + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0(supports-color@5.5.0) + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.6.3 + ts-api-utils: 1.4.3(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -35720,6 +36003,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0(supports-color@5.5.0) + eslint: 8.57.1 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@6.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 @@ -35799,6 +36095,18 @@ snapshots: '@typescript-eslint/types': 8.20.0 '@typescript-eslint/visitor-keys': 8.20.0 + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.4.0(supports-color@5.5.0) + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@6.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) @@ -35923,6 +36231,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) + eslint: 8.57.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/utils@6.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.2)) @@ -37328,30 +37650,34 @@ snapshots: - solid-js - vue - ai@4.0.39(react@19.0.0)(zod@3.23.8): + ai@4.0.38(react@19.0.0)(zod@3.23.8): dependencies: '@ai-sdk/provider': 1.0.4 - '@ai-sdk/provider-utils': 2.0.8(zod@3.23.8) - '@ai-sdk/react': 1.0.12(react@19.0.0)(zod@3.23.8) - '@ai-sdk/ui-utils': 1.0.11(zod@3.23.8) + '@ai-sdk/provider-utils': 2.0.7(zod@3.23.8) + '@ai-sdk/react': 1.0.11(react@19.0.0)(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.10(zod@3.23.8) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 optionalDependencies: react: 19.0.0 zod: 3.23.8 - ai@4.0.39(react@19.0.0)(zod@3.24.1): + ai@4.0.38(react@19.0.0)(zod@3.24.1): dependencies: '@ai-sdk/provider': 1.0.4 - '@ai-sdk/provider-utils': 2.0.8(zod@3.24.1) - '@ai-sdk/react': 1.0.12(react@19.0.0)(zod@3.24.1) - '@ai-sdk/ui-utils': 1.0.11(zod@3.24.1) + '@ai-sdk/provider-utils': 2.0.7(zod@3.24.1) + '@ai-sdk/react': 1.0.11(react@19.0.0)(zod@3.24.1) + '@ai-sdk/ui-utils': 1.0.10(zod@3.24.1) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 optionalDependencies: react: 19.0.0 zod: 3.24.1 + ajv-draft-04@1.0.0(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -38603,6 +38929,8 @@ snapshots: call-bind-apply-helpers: 1.0.1 get-intrinsic: 1.2.7 + call-me-maybe@1.0.2: {} + callsites@3.1.0: {} camel-case@4.1.2: @@ -38686,9 +39014,9 @@ snapshots: loupe: 3.1.2 pathval: 2.0.0 - chain-registry@1.69.95: + chain-registry@1.69.94: dependencies: - '@chain-registry/types': 0.50.51 + '@chain-registry/types': 0.50.50 chalk@1.1.3: dependencies: @@ -39095,7 +39423,7 @@ snapshots: transitivePeerDependencies: - supports-color - compromise@14.14.4: + compromise@14.14.3: dependencies: efrt: 2.7.0 grad-school: 0.0.5 @@ -39390,13 +39718,28 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - create-jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)): + create-jest@29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -40178,7 +40521,7 @@ snapshots: discord-api-types@0.37.100: {} - discord-api-types@0.37.116: {} + discord-api-types@0.37.115: {} discord-api-types@0.37.83: {} @@ -40350,8 +40693,8 @@ snapshots: echogarden@2.0.7(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(encoding@0.1.13)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: - '@aws-sdk/client-polly': 3.730.0 - '@aws-sdk/client-transcribe-streaming': 3.730.0 + '@aws-sdk/client-polly': 3.726.1 + '@aws-sdk/client-transcribe-streaming': 3.726.1 '@echogarden/audio-io': 0.2.3 '@echogarden/espeak-ng-emscripten': 0.3.3 '@echogarden/fasttext-wasm': 0.1.0 @@ -40369,7 +40712,7 @@ snapshots: chalk: 5.4.1 cldr-segmentation: 2.2.1 command-exists: 1.2.9 - compromise: 14.14.4 + compromise: 14.14.3 fs-extra: 11.2.0 gaxios: 6.7.1(encoding@0.1.13) graceful-fs: 4.2.11 @@ -41432,9 +41775,11 @@ snapshots: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 + eval-estree-expression@2.0.3: {} + eval@0.1.8: dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 require-like: 0.1.2 event-emitter@0.3.5: @@ -41468,6 +41813,10 @@ snapshots: eventsource@2.0.2: {} + eventsource@3.0.2: + dependencies: + eventsource-parser: 3.0.0 + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 @@ -41591,7 +41940,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.4.0(supports-color@5.5.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -41674,7 +42023,7 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.4.3(picomatch@4.0.2): + fdir@6.4.2(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -41858,8 +42207,8 @@ snapshots: dependencies: '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@raydium-io/raydium-sdk-v2': 0.1.82-alpha(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@solana/spl-token': 0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.4.9(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) bs58: 6.0.0 coral-xyz3: '@coral-xyz/anchor@0.29.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)' transitivePeerDependencies: @@ -43162,7 +43511,7 @@ snapshots: json-bigint: 1.0.0 lodash: 4.17.21 luxon: 1.28.1 - reflect-metadata: 0.1.14 + reflect-metadata: 0.1.13 request: 2.88.2 request-promise: 4.2.6(request@2.88.2) rxjs: 6.6.7 @@ -43724,7 +44073,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -43744,16 +44093,35 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)): + jest-cli@29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + create-jest: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-cli@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -43782,7 +44150,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)): + jest-config@29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -43807,13 +44175,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.10.7 - ts-node: 10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3) + '@types/node': 20.17.9 + ts-node: 10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)): + jest-config@29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -43838,12 +44206,42 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 ts-node: 10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3) transitivePeerDependencies: - babel-plugin-macros - supports-color + jest-config@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0): + dependencies: + '@babel/core': 7.26.0 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.10.7 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + jest-config@29.7.0(@types/node@22.8.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)): dependencies: '@babel/core': 7.26.0 @@ -43877,7 +44275,7 @@ snapshots: jest-diff@29.7.0: dependencies: - chalk: 4.1.0 + chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 @@ -43899,7 +44297,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -43909,7 +44307,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.10.7 + '@types/node': 20.17.9 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -43948,7 +44346,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -43983,7 +44381,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -44011,7 +44409,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -44057,7 +44455,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -44076,7 +44474,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.7 + '@types/node': 20.17.9 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -44085,23 +44483,35 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.10.7 + '@types/node': 20.17.9 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)): + jest@29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + jest-cli: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -44343,6 +44753,8 @@ snapshots: jssha@3.2.0: {} + jstat@1.9.6: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -45990,7 +46402,7 @@ snapshots: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.0.5 + minimatch: 3.1.2 multistream@4.1.0: dependencies: @@ -46437,7 +46849,7 @@ snapshots: '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 axios: 1.7.9(debug@4.4.0) - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 8.0.1 @@ -46608,7 +47020,7 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@2.1.0: + oniguruma-to-es@2.0.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 @@ -46712,6 +47124,32 @@ snapshots: openapi-types@12.1.3: {} + openapi-zod-client@1.18.2(react@19.0.0): + dependencies: + '@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3) + '@liuli-util/fs-extra': 0.1.0 + '@zodios/core': 10.9.6(axios@1.7.9)(zod@3.23.8) + axios: 1.7.9(debug@4.4.0) + cac: 6.7.14 + handlebars: 4.7.8 + openapi-types: 12.1.3 + openapi3-ts: 3.1.0 + pastable: 2.2.1(react@19.0.0) + prettier: 2.8.8 + tanu: 0.1.13 + ts-pattern: 5.6.0 + whence: 2.0.1 + zod: 3.23.8 + transitivePeerDependencies: + - debug + - react + - supports-color + - xstate + + openapi3-ts@3.1.0: + dependencies: + yaml: 2.7.0 + opener@1.5.2: {} optimism@0.18.1: @@ -46735,7 +47173,7 @@ snapshots: ora@5.3.0: dependencies: bl: 4.1.0 - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 is-interactive: 1.0.0 @@ -46784,8 +47222,8 @@ snapshots: ox@0.4.2(typescript@5.7.3)(zod@3.24.1): dependencies: '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.7.0 - '@noble/hashes': 1.6.1 + '@noble/curves': 1.8.0 + '@noble/hashes': 1.7.0 '@scure/bip32': 1.6.1 '@scure/bip39': 1.5.1 abitype: 1.0.7(typescript@5.7.3)(zod@3.24.1) @@ -47072,6 +47510,16 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + pastable@2.2.1(react@19.0.0): + dependencies: + '@babel/core': 7.26.0 + ts-toolbelt: 9.6.0 + type-fest: 3.13.1 + optionalDependencies: + react: 19.0.0 + transitivePeerDependencies: + - supports-color + path-browserify@1.0.1: {} path-data-parser@0.1.0: {} @@ -48228,7 +48676,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 22.10.7 + '@types/node': 20.17.9 long: 4.0.0 protobufjs@7.4.0: @@ -48243,7 +48691,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.10.7 + '@types/node': 20.17.9 long: 5.2.4 protocols@2.0.1: {} @@ -48307,8 +48755,8 @@ snapshots: dependencies: '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@rollup/plugin-json': 6.1.0(rollup@4.30.1) - '@solana/spl-token': 0.4.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.4.6(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -48614,11 +49062,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-router: 6.22.1(react@18.3.1) - react-router-dom@7.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-router-dom@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - react-router: 7.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react-router: 7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router@5.3.4(react@18.3.1): dependencies: @@ -48638,7 +49086,7 @@ snapshots: '@remix-run/router': 1.15.1 react: 18.3.1 - react-router@7.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@types/cookie': 0.6.0 cookie: 1.0.2 @@ -48838,8 +49286,6 @@ snapshots: reflect-metadata@0.1.13: {} - reflect-metadata@0.1.14: {} - reflect-metadata@0.2.2: {} reflect.getprototypeof@1.0.10: @@ -49808,7 +50254,7 @@ snapshots: solana-agent-kit@1.4.0(@noble/hashes@1.7.0)(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(arweave@1.15.5)(axios@1.7.9)(borsh@2.0.0)(buffer@6.0.3)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(handlebars@4.7.8)(react@19.0.0)(sodium-native@3.4.1)(typescript@5.7.3)(utf-8-validate@5.0.10): dependencies: '@3land/listings-sdk': 0.0.4(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(arweave@1.15.5)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@ai-sdk/openai': 1.0.20(zod@3.24.1) + '@ai-sdk/openai': 1.0.19(zod@3.24.1) '@bonfida/spl-name-service': 3.0.7(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) '@cks-systems/manifest-sdk': 0.1.59(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -49834,7 +50280,7 @@ snapshots: '@sqds/multisig': 2.1.3(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) '@tensor-oss/tensorswap-sdk': 4.5.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) '@tiplink/api': 0.3.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(sodium-native@3.4.1)(utf-8-validate@5.0.10) - ai: 4.0.39(react@19.0.0)(zod@3.24.1) + ai: 4.0.38(react@19.0.0)(zod@3.24.1) bn.js: 5.2.1 bs58: 6.0.0 chai: 5.1.2 @@ -50441,6 +50887,11 @@ snapshots: transitivePeerDependencies: - ts-node + tanu@0.1.13: + dependencies: + tslib: 2.8.1 + typescript: 4.9.5 + tapable@1.1.3: {} tapable@2.2.1: {} @@ -50682,7 +51133,7 @@ snapshots: tinyglobby@0.2.10: dependencies: - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 tinyld@1.3.4: {} @@ -50845,12 +51296,12 @@ snapshots: dependencies: tslib: 2.8.1 - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.2)(jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.2)(jest@29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + jest: 29.7.0(@types/node@20.17.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@20.17.9)(typescript@5.7.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -50870,7 +51321,7 @@ snapshots: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.10.7)(typescript@5.7.3)) + jest: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -50884,6 +51335,25 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.26.0) + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0))(typescript@5.7.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.10.7)(babel-plugin-macros@3.1.0) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.7.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.8.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 @@ -51009,6 +51479,10 @@ snapshots: optionalDependencies: '@swc/core': 1.10.7(@swc/helpers@0.5.15) + ts-pattern@5.6.0: {} + + ts-toolbelt@9.6.0: {} + ts-xor@1.3.0: {} tsconfck@3.1.4(typescript@5.6.3): @@ -51891,14 +52365,14 @@ snapshots: - utf-8-validate - zod - vite-node@0.34.6(@types/node@22.10.7)(terser@5.37.0): + vite-node@0.34.6(@types/node@20.17.9)(terser@5.37.0): dependencies: cac: 6.7.14 debug: 4.4.0(supports-color@5.5.0) mlly: 1.7.4 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.11(@types/node@22.10.7)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.9)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -52176,7 +52650,7 @@ snapshots: dependencies: '@types/chai': 4.3.20 '@types/chai-subset': 1.3.5 - '@types/node': 22.10.7 + '@types/node': 20.17.9 '@vitest/expect': 0.34.6 '@vitest/runner': 0.34.6 '@vitest/snapshot': 0.34.6 @@ -52195,8 +52669,8 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.9.0 tinypool: 0.7.0 - vite: 5.4.11(@types/node@22.10.7)(terser@5.37.0) - vite-node: 0.34.6(@types/node@22.10.7)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.9)(terser@5.37.0) + vite-node: 0.34.6(@types/node@20.17.9)(terser@5.37.0) why-is-node-running: 2.3.0 optionalDependencies: '@vitest/ui': 0.34.7(vitest@0.34.6) @@ -53152,6 +53626,11 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 + whence@2.0.1: + dependencies: + '@babel/parser': 7.26.5 + eval-estree-expression: 2.0.3 + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0