diff --git a/agent/package.json b/agent/package.json index 8aa6fe52ae4..b2dfc92afb2 100644 --- a/agent/package.json +++ b/agent/package.json @@ -102,6 +102,7 @@ "@elizaos/plugin-hyperliquid": "workspace:*", "@elizaos/plugin-akash": "workspace:*", "@elizaos/plugin-quai": "workspace:*", + "@elizaos/plugin-lightning": "workspace:*", "@elizaos/plugin-b2": "workspace:*", "@elizaos/plugin-nft-collections": "workspace:*", "@elizaos/plugin-pyth-data": "workspace:*", diff --git a/agent/src/index.ts b/agent/src/index.ts index d839bae518d..07d2340b0ca 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -15,6 +15,7 @@ import { DirectClient } from "@elizaos/client-direct"; import { agentKitPlugin } from "@elizaos/plugin-agentkit"; // import { ReclaimAdapter } from "@elizaos/plugin-reclaim"; import { PrimusAdapter } from "@elizaos/plugin-primus"; +import { lightningPlugin } from "@elizaos/plugin-lightning"; import { elizaCodeinPlugin, onchainJson } from "@elizaos/plugin-iq6900"; import { @@ -1049,6 +1050,11 @@ export async function createAgent( getSecret(character, "PYTH_MAINNET_PROGRAM_KEY") ? pythDataPlugin : null, + getSecret(character, "LND_TLS_CERT") && + getSecret(character, "LND_MACAROON") && + getSecret(character, "LND_SOCKET") + ? lightningPlugin + : null, getSecret(character, "OPENAI_API_KEY") && getSecret(character, "ENABLE_OPEN_AI_COMMUNITY_PLUGIN") ? openaiPlugin : null, diff --git a/packages/plugin-lightning/README.md b/packages/plugin-lightning/README.md new file mode 100644 index 00000000000..d0d3ad9a07d --- /dev/null +++ b/packages/plugin-lightning/README.md @@ -0,0 +1,64 @@ +# @elizaos/plugin-lightning + +This plugin enables create lightning invoice or payInvoice. + +## Features + +- 💱 Make a new off-chain invoice. +- 📊 Make an off-chain payment. + +## Installation + +Add the plugin to your Eliza configuration: + +```json +{ + "plugins": ["@elizaos/plugin-lightning"] +} +``` + +## Configuration + +Set the following environment variables: + +```env +LND_TLS_CERT=your_lnnode_tls_cert #Base64 of LND certificate +LND_MACAROON=020..... #Base64 encoded admin.macaroon file +LND_SOCKET='x.x.x.x:10009' +``` + +## Available Actions + +### 1. CREATE_INVOICE + +Make a new off-chain invoice. + +Examples: + +```text + +"Help me create an invoice for 1000sats" +"Create an invoice for 1000sats" + +``` + +Returns: lnbcrt.... + +### 2. PAY_INVOICE + +Make an off-chain payment. + +Examples: + +```text + +"Pay invoice lnbcrt10u1pncndjvpp58y77adkngcz3ypx6t39j245ydvk2vu67c8ugvegee3gt5wgs7yjqdxvdec82c33wdmnq73s0qcxwurrxp4nquncxe4h56m9xu6xwetyd3mrq6ehdguxkd35wuurgarex4u8gefkdsekgdtnddehxurrxecxvhmwwp6kyvfexekhxwtv8paryvnpwsuhxdryvachwangw3kn2atddq6kzvrvwfcxzanewce8ja34d43k56rkweu8jdtcwv68zmrsvdescqzzsxqrrsssp5q3hv38wfprvaazzwf8c4t33tzjcac5xz94sk8muehmn5szqaw6ks9qxpqysgqt5pjhna4922s8ayzgu5rh8clx7psp2culdr5r6cxxxqzs3e5ep345p45vggg0qegt6fu3prdrqgpd8v70l9wdhekt8gex5e8pqvxg2sp97fkmd" + + +``` + +## Security Notes + +- Store your LND_TLS_CERT and LND_MACAROON securely using environment variables +- Test with small amounts first +- Use regtest for initial testing diff --git a/packages/plugin-lightning/eslint.config.mjs b/packages/plugin-lightning/eslint.config.mjs new file mode 100644 index 00000000000..92fe5bbebef --- /dev/null +++ b/packages/plugin-lightning/eslint.config.mjs @@ -0,0 +1,3 @@ +import eslintGlobalConfig from "../../eslint.config.mjs"; + +export default [...eslintGlobalConfig]; diff --git a/packages/plugin-lightning/package.json b/packages/plugin-lightning/package.json new file mode 100644 index 00000000000..4b05713cac1 --- /dev/null +++ b/packages/plugin-lightning/package.json @@ -0,0 +1,37 @@ +{ + "name": "@elizaos/plugin-lightning", + "version": "0.1.8+build.1", + "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "@elizaos/source": "./src/index.ts", + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "files": [ + "dist" + ], + "dependencies": { + "@elizaos/core": "workspace:*", + "@elizaos/plugin-tee": "workspace:*", + "astra-lightning": "^1.1.0" + }, + "devDependencies": { + "tsup": "8.3.5" + }, + "scripts": { + "build": "tsup --format esm --dts", + "dev": "tsup --format esm --dts --watch", + "lint": "eslint --fix --cache ." + }, + "peerDependencies": { + "whatwg-url": "7.1.0" + } +} diff --git a/packages/plugin-lightning/src/actions/createInvoice.ts b/packages/plugin-lightning/src/actions/createInvoice.ts new file mode 100644 index 00000000000..a19e7cf7e46 --- /dev/null +++ b/packages/plugin-lightning/src/actions/createInvoice.ts @@ -0,0 +1,108 @@ +import type { IAgentRuntime, Memory, State } from "@elizaos/core"; +import { + composeContext, + generateObjectDeprecated, + ModelClass, + elizaLogger, +} from "@elizaos/core"; + +import { + initLightningProvider, + LightningProvider, +} from "../providers/lightning"; + +import { createInvoiceTemplate } from "../templates"; +import { CreateInvoiceResult } from "astra-lightning"; +import { CreateInvoiceArgs } from "../types"; +export { createInvoiceTemplate }; + +export class CreateInvoiceAction { + constructor(private lightningProvider: LightningProvider) { + this.lightningProvider = lightningProvider; + } + + async createInvoice( + params: CreateInvoiceArgs, + ): Promise { + if (!params.tokens) { + throw new Error("tokens is required."); + } + const retCreateInvoice = + await this.lightningProvider.createInvoice(params); + return retCreateInvoice; + } +} + +export const createInvoiceAction = { + name: "CREATE_INVOICE", + description: "Create a Lightning invoice.", + handler: async ( + runtime: IAgentRuntime, + _message: Memory, + state: State, + _options: any, + callback?: (response: { + text: string; + content?: { success: boolean; invoice?: string }; + }) => void, + ) => { + elizaLogger.log("CreateInvoice action handler called"); + const lightningProvider = await initLightningProvider(runtime); + const action = new CreateInvoiceAction(lightningProvider); + + // Compose bridge context + const createInvoiceContext = composeContext({ + state, + template: createInvoiceTemplate, + }); + const content = await generateObjectDeprecated({ + runtime, + context: createInvoiceContext, + modelClass: ModelClass.LARGE, + }); + + const createInvoiceOptions = { + tokens: content.tokens, + }; + + try { + const createInvoiceResp = + await action.createInvoice(createInvoiceOptions); + + if (callback) { + callback({ + text: `Successfully created invoice for ${createInvoiceResp.tokens.toLocaleString()} sats\r\nInvoice: ${createInvoiceResp.request}`, + content: { + success: true, + invoice: createInvoiceResp.request, + }, + }); + } + return true; + } catch (error) { + if (callback) { + callback({ text: `Error: ${error.message}` }); + } + return false; + } + }, + template: createInvoiceTemplate, + validate: async (runtime: IAgentRuntime) => { + const cert = runtime.getSetting("LND_TLS_CERT"); + const macaroon = runtime.getSetting("LND_MACAROON"); + const socket = runtime.getSetting("LND_SOCKET"); + return !!cert && !!macaroon && !!socket; + }, + examples: [ + [ + { + user: "user", + content: { + text: "Create an invoice for 1000 sats", + action: "CREATE_INVOICE", + }, + }, + ], + ], + similes: ["CREATE_INVOICE"], +}; diff --git a/packages/plugin-lightning/src/actions/payInvoice.ts b/packages/plugin-lightning/src/actions/payInvoice.ts new file mode 100644 index 00000000000..d142f3a62c1 --- /dev/null +++ b/packages/plugin-lightning/src/actions/payInvoice.ts @@ -0,0 +1,136 @@ +import type { IAgentRuntime, Memory, State } from "@elizaos/core"; +import { + composeContext, + generateObjectV2, + ModelClass, + elizaLogger, +} from "@elizaos/core"; + +import { + initLightningProvider, + LightningProvider, +} from "../providers/lightning"; +import { PayResult } from "astra-lightning"; +import { PayArgs } from "../types"; +import { payInvoiceTemplate } from "../templates"; + +export { payInvoiceTemplate }; + +type ExtendedPayResult = PayResult & { outgoing_channel: string }; +export class PayInvoiceAction { + constructor(private lightningProvider: LightningProvider) { + this.lightningProvider = lightningProvider; + } + + async getAvalibleChannelId(): Promise { + const { channels } = await this.lightningProvider.getLndChannel(); + const filteredActiveChannels = channels.filter( + (channel) => channel.is_active === true, + ); + const sortedChannels = filteredActiveChannels.sort( + (a, b) => b.local_balance - a.local_balance, + ); + if (sortedChannels.length > 0) { + return sortedChannels[0].id; + } + return ""; + } + async payInvoice(params: PayArgs): Promise { + const outgoing_channel = await this.getAvalibleChannelId(); + if (!outgoing_channel) { + throw new Error("no avalible channel"); + } + const requestArgs = { + outgoing_channel: outgoing_channel, + ...params, + }; + const retPayInvoice = + await this.lightningProvider.payInvoice(requestArgs); + return { + ...retPayInvoice, + outgoing_channel: outgoing_channel, + }; + } +} + +export const payInvoiceAction = { + name: "PAY_INVOICE", + description: "Make a payment.", + handler: async ( + runtime: IAgentRuntime, + _message: Memory, + state: State, + _options: any, + callback?: any, + ) => { + elizaLogger.log("payInvoice action handler called"); + const lightningProvider = await initLightningProvider(runtime); + const action = new PayInvoiceAction(lightningProvider); + + // Compose bridge context + const payInvoiceContext = composeContext({ + state, + template: payInvoiceTemplate, + }); + const content = await generateObjectV2({ + runtime, + context: payInvoiceContext, + modelClass: ModelClass.LARGE, + }); + + const payInvoiceOptions: PayArgs = { + request: content.request, + outgoing_channel: content.outgoing_channel, + }; + + try { + const payInvoiceResp = await action.payInvoice(payInvoiceOptions); + elizaLogger.log("🚀 ~ payInvoiceResp:", payInvoiceResp); + + if (callback) { + const text = ""; + if (payInvoiceResp.is_confirmed) { + callback({ + text: `Successfully paid invoice ${content.request} from ${payInvoiceResp.outgoing_channel};\nAmount: ${payInvoiceResp.tokens};\nFee: ${payInvoiceResp.fee};\nPayment Hash: ${payInvoiceResp.id};`, + content: { success: true }, + }); + } else { + callback({ + text: `Failed to payInvoice ${content.request} from ${content.outgoing_channel};\r\n Amount: ${payInvoiceResp.tokens};`, + content: { + success: false, + }, + }); + } + } + return true; + } catch (error) { + elizaLogger.error("Error in payInvoice handler:", error); + if (callback) { + callback({ + text: `Error: ${error.message || "An error occurred"}`, + }); + } + return false; + } + }, + template: payInvoiceTemplate, + validate: async (runtime: IAgentRuntime) => { + const cert = runtime.getSetting("LND_TLS_CERT"); + const macaroon = runtime.getSetting("LND_MACAROON"); + const socket = runtime.getSetting("LND_SOCKET"); + return !!cert && !!macaroon && !!socket; + }, + examples: [ + [ + { + user: "user", + content: { + text: "Pay invoice for lnbrc...", + action: "PAY_INVOICE", + }, + }, + ], + ], + similes: ["PAY_INVOICE", "MAKE_PAYMENT"], +}; diff --git a/packages/plugin-lightning/src/index.ts b/packages/plugin-lightning/src/index.ts new file mode 100644 index 00000000000..6f224efde67 --- /dev/null +++ b/packages/plugin-lightning/src/index.ts @@ -0,0 +1,15 @@ +export * from "./actions/createInvoice"; +export * from "./providers/lightning"; +export * from "./types"; + +import type { Plugin } from "@elizaos/core"; +import { createInvoiceAction } from "./actions/createInvoice"; +import { payInvoiceAction } from "./actions/payInvoice"; + +export const lightningPlugin: Plugin = { + name: "lightning", + description: "lightning integration plugin", + actions: [createInvoiceAction, payInvoiceAction], +}; + +export default lightningPlugin; diff --git a/packages/plugin-lightning/src/providers/lightning.ts b/packages/plugin-lightning/src/providers/lightning.ts new file mode 100644 index 00000000000..bc1ebdd02cc --- /dev/null +++ b/packages/plugin-lightning/src/providers/lightning.ts @@ -0,0 +1,100 @@ +import { + type IAgentRuntime, + type Provider, + type Memory, + type State, + elizaLogger, +} from "@elizaos/core"; +import { + authenticatedLndGrpc, + AuthenticatedLnd, + GetIdentityResult, + GetChannelsResult, + getIdentity, + getChannels, + createInvoice, + pay, + PayResult, + CreateInvoiceResult, +} from "astra-lightning"; +import { PayArgs, CreateInvoiceArgs } from "../types"; +export class LightningProvider { + private lndClient: AuthenticatedLnd; + constructor(cert: string, macaroon: string, socket: string) { + if (!cert || !macaroon || !socket) { + throw new Error("Missing required LND credentials"); + } + try { + const { lnd } = authenticatedLndGrpc({ + cert: cert, + macaroon: macaroon, + socket: socket, + }); + this.lndClient = lnd; + } catch (error) { + throw new Error( + `Failed to initialize LND client: ${error.message}`, + ); + } + } + async getLndIdentity(): Promise { + try { + return await getIdentity({ lnd: this.lndClient }); + } catch (error) { + throw new Error(`Failed to get LND identity: ${error.message}`); + } + } + async getLndChannel(): Promise { + try { + return await getChannels({ lnd: this.lndClient }); + } catch (error) { + throw new Error(`Failed to get LND channels: ${error.message}`); + } + } + async createInvoice( + createInvoiceArgs: CreateInvoiceArgs, + ): Promise { + try { + return await createInvoice({ + lnd: this.lndClient, + ...createInvoiceArgs, + }); + } catch (error) { + throw new Error(`Failed to create invoice: ${error.message}`); + } + } + async payInvoice(payInvoiceArgs: PayArgs): Promise { + const ret = await pay({ + lnd: this.lndClient, + ...payInvoiceArgs, + }); + return ret; + } +} + +export const initLightningProvider = async (runtime: IAgentRuntime) => { + const cert = runtime.getSetting("LND_TLS_CERT"); + const macaroon = runtime.getSetting("LND_MACAROON"); + const socket = runtime.getSetting("LND_SOCKET"); + return new LightningProvider(cert, macaroon, socket); +}; + +export const lndProvider: Provider = { + async get( + runtime: IAgentRuntime, + _message: Memory, + state?: State, + ): Promise { + try { + const lightningProvider = await initLightningProvider(runtime); + const { public_key: nodePubkey } = + await lightningProvider.getLndIdentity(); + const { channels } = await lightningProvider.getLndChannel(); + const agentName = state?.agentName || "The agent"; + return `${agentName}'s Lightning Node publickey: ${nodePubkey}\nChannel count: ${channels.length}`; + } catch (error) { + elizaLogger.error("Error in Lightning provider:", error.message); + return null; + } + }, +}; diff --git a/packages/plugin-lightning/src/templates/index.ts b/packages/plugin-lightning/src/templates/index.ts new file mode 100644 index 00000000000..c20ae02d89a --- /dev/null +++ b/packages/plugin-lightning/src/templates/index.ts @@ -0,0 +1,73 @@ +export const createInvoiceTemplate = `You are an AI assistant specialized in processing requests to create Lightning Network invoices. Your task is to extract specific information from user messages and format it into a structured JSON response. + +First, review the recent messages from the conversation: + + +{{recentMessages}} + + +Your goal is to extract the following information for the invoice creation: +1. Tokens or Millitokens (amount to request). +2. Description (optional, a user-provided note about the invoice). + +Before providing the final JSON output, show your reasoning process inside tags. Follow these steps: + +1. Identify the relevant information from the user's message: + - Quote the part of the message mentioning the amount (tokens or millitokens). + - Quote the part mentioning the description (if provided). + +2. Validate each piece of information: + - Tokens or millitokens: Ensure at least one is provided and can be parsed as a valid number. + - Description: This field is optional; if present, it should be a string. + +3. If any required information is missing or invalid, prepare an appropriate error message. + +4. If all information is valid, summarize your findings. + +Respond with a JSON markdown block containing only the extracted values. All fields are required: + +\`\`\`json +{ + "description"?: string; + /** Expires At ISO 8601 Date */ + "expires_at"?: string; + "tokens": "" +} +\`\`\` + +If the input is valid, provide the structured JSON response. Otherwise, output an error message describing what is missing or invalid. + +Now, process the user's request and provide your response. +`; + +export const payInvoiceTemplate = `You are an AI assistant specialized in processing requests to make a payment.. Your task is to extract specific information from user messages and format it into a structured JSON response. + +First, review the recent messages from the conversation: + + +{{recentMessages}} + + +### Instructions: +1. **Review the user's message:** Analyze the input text to identify the required payment details. +2. **Extract the following fields:** + - "request": This is the **BOLT 11 Payment Request String**. It typically starts with "lnbc", "lntb", "lnbcrt", or similar prefixes and can contain letters and numbers. + - "outgoing_channel" (optional): This is the Outbound Standard Channel Id String. If not provided, this can be left as "null". + +3. **Validation:** + - Ensure "request" is valid and starts with one of: "lnbc" (mainnet), "lntb" (testnet), "lnbcrt" (regtest), or "lnsb" (signet). + - If "outgoing_channel" is present, ensure it is a valid string. + +4. **Output:** If all required fields are valid, respond with the following JSON format: + +\`\`\`json + { + "request": "", + "outgoing_channel": "" + } +\`\`\` + +5. If any information is invalid or missing, respond with an error message explaining what is wrong. + +Now, process the user's request and provide your response. +`; diff --git a/packages/plugin-lightning/src/types/index.ts b/packages/plugin-lightning/src/types/index.ts new file mode 100644 index 00000000000..38f4b6ccab1 --- /dev/null +++ b/packages/plugin-lightning/src/types/index.ts @@ -0,0 +1,104 @@ + +export type CreateInvoiceArgs = { + /** CLTV Delta */ + cltv_delta?: number; + /** Invoice Description */ + description?: string; + /** Hashed Description of Payment Hex String */ + description_hash?: string; + /** Expires At ISO 8601 Date */ + expires_at?: string; + /** Use Blinded Paths For Inbound Routes */ + is_encrypting_routes?: boolean; + /** Is Fallback Address Included */ + is_fallback_included?: boolean; + /** Is Fallback Address Nested */ + is_fallback_nested?: boolean; + /** Invoice Includes Private Channels */ + is_including_private_channels?: boolean; + /** Payment Preimage Hex String */ + secret?: string; + /** Millitokens */ + mtokens?: string; + routes?: any; + /** Tokens */ + tokens?: number; + asset_id?: string; + peer_pubkey?: string; + tpr?: any; +}; + +export type PayArgs = { + /** Pay Through Specific Final Hop Public Key Hex */ + incoming_peer?: string; + /** Maximum Additional Fee Tokens To Pay */ + max_fee?: number; + /** Maximum Fee Millitokens to Pay */ + max_fee_mtokens?: string; + /** Maximum Millitokens For A Multi-Path Path */ + max_path_mtokens?: string; + /** Maximum Simultaneous Paths */ + max_paths?: number; + /** Max CLTV Timeout */ + max_timeout_height?: number; + messages?: { + /** Message Type number */ + type: string; + /** Message Raw Value Hex Encoded */ + value: string; + }[]; + /** Millitokens to Pay */ + mtokens?: string; + /** Pay Through Outbound Standard Channel Id */ + outgoing_channel?: string; + /** Pay Out of Outgoing Channel Ids */ + outgoing_channels?: string[]; + path?: { + /** Payment Hash Hex */ + id: string; + routes: { + /** Total Fee Tokens To Pay */ + fee: number; + /** Total Fee Millitokens To Pay */ + fee_mtokens: string; + hops: { + /** Standard Format Channel Id */ + channel: string; + /** Channel Capacity Tokens */ + channel_capacity: number; + /** Fee */ + fee: number; + /** Fee Millitokens */ + fee_mtokens: string; + /** Forward Tokens */ + forward: number; + /** Forward Millitokens */ + forward_mtokens: string; + /** Public Key Hex */ + public_key?: string; + /** Timeout Block Height */ + timeout: number; + }[]; + messages?: { + /** Message Type number */ + type: string; + /** Message Raw Value Hex Encoded */ + value: string; + }[]; + /** Total Millitokens To Pay */ + mtokens: string; + /** Payment Identifier Hex */ + payment?: string; + /** Expiration Block Height */ + timeout: number; + /** Total Tokens To Pay */ + tokens: number; + }[]; + }; + /** Time to Spend Finding a Route Milliseconds */ + pathfinding_timeout?: number; + /** BOLT 11 Payment Request */ + request?: string; + /** Total Tokens To Pay to Payment Request */ + tokens?: number; +}; diff --git a/packages/plugin-lightning/tsconfig.json b/packages/plugin-lightning/tsconfig.json new file mode 100644 index 00000000000..547fa531378 --- /dev/null +++ b/packages/plugin-lightning/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../core/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "./src", + "typeRoots": ["./node_modules/@types", "./src/types"], + "declaration": true + }, + "include": ["src"] +} diff --git a/packages/plugin-lightning/tsup.config.ts b/packages/plugin-lightning/tsup.config.ts new file mode 100644 index 00000000000..396982d4ec9 --- /dev/null +++ b/packages/plugin-lightning/tsup.config.ts @@ -0,0 +1,23 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], // Output format is ECMAScript modules + external: [ + "dotenv", // Externalize dotenv to prevent bundling + "fs", // Externalize fs to use Node.js built-in module + "path", // Externalize other built-ins if necessary + "@reflink/reflink", + "@node-llama-cpp", + "https", + "http", + "agentkeepalive", + "viem", + "@lifi/sdk", + "events", + "node-cache", + ], +}); diff --git a/packages/plugin-pyth-data/schema.json b/packages/plugin-pyth-data/schema.json index a036280f023..6628a575d00 100644 --- a/packages/plugin-pyth-data/schema.json +++ b/packages/plugin-pyth-data/schema.json @@ -1 +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 +{"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.2"},"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/pnpm-lock.yaml b/pnpm-lock.yaml index bb3cf0d7713..e620a245f76 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,19 +14,19 @@ importers: dependencies: '@0glabs/0g-ts-sdk': specifier: 0.2.1 - version: 0.2.1(bufferutil@4.0.9)(ethers@6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + version: 0.2.1(bufferutil@4.0.9)(ethers@6.13.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(utf-8-validate@6.0.5) '@coinbase/coinbase-sdk': specifier: 0.10.0 - version: 0.10.0(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.24.1) + version: 0.10.0(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@6.0.5)(zod@3.24.1) '@deepgram/sdk': specifier: ^3.9.0 - version: 3.9.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 3.9.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5) '@injectivelabs/sdk-ts': specifier: ^1.14.33 - version: 1.14.33(@types/react@19.0.7)(bufferutil@4.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(utf-8-validate@5.0.10) + version: 1.14.33(@types/react@19.0.7)(bufferutil@4.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(utf-8-validate@6.0.5) '@vitest/eslint-plugin': specifier: 1.0.1 - version: 1.0.1(@typescript-eslint/utils@8.20.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)(vitest@2.1.5(@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)) + version: 1.0.1(@typescript-eslint/utils@8.20.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)(vitest@2.1.5(@types/node@22.10.7)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0)) amqplib: specifier: 0.10.5 version: 0.10.5 @@ -57,7 +57,7 @@ importers: version: 1.9.4 '@commitlint/cli': specifier: 18.6.1 - version: 18.6.1(@types/node@20.17.9)(typescript@5.6.3) + version: 18.6.1(@types/node@22.10.7)(typescript@5.6.3) '@commitlint/config-conventional': specifier: 18.6.3 version: 18.6.3 @@ -75,7 +75,7 @@ importers: version: 9.1.7 jest: specifier: ^29.7.0 - 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.6.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) @@ -93,13 +93,13 @@ importers: version: 5.6.3 viem: specifier: 2.21.58 - version: 2.21.58(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.24.1) + version: 2.21.58(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@6.0.5)(zod@3.24.1) vite: specifier: 5.4.11 - version: 5.4.11(@types/node@20.17.9)(terser@5.37.0) + version: 5.4.11(@types/node@22.10.7)(terser@5.37.0) vitest: specifier: 2.1.5 - version: 2.1.5(@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) + version: 2.1.5(@types/node@22.10.7)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0) agent: dependencies: @@ -271,6 +271,9 @@ importers: '@elizaos/plugin-letzai': specifier: workspace:* version: link:../packages/plugin-letzai + '@elizaos/plugin-lightning': + specifier: workspace:* + version: link:../packages/plugin-lightning '@elizaos/plugin-massa': specifier: workspace:* version: link:../packages/plugin-massa @@ -2276,6 +2279,25 @@ 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-lightning: + dependencies: + '@elizaos/core': + specifier: workspace:* + version: link:../core + '@elizaos/plugin-tee': + specifier: workspace:* + version: link:../plugin-tee + astra-lightning: + specifier: ^1.1.0 + version: 1.1.0 + whatwg-url: + specifier: 7.1.0 + version: 7.1.0 + devDependencies: + 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) + packages/plugin-massa: dependencies: '@elizaos/core': @@ -2875,6 +2897,13 @@ importers: zod: specifier: 3.23.8 version: 3.23.8 + devDependencies: + '@vitest/coverage-v8': + specifier: ^1.2.1 + version: 1.6.0(vitest@1.2.1(@types/node@22.10.7)(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)) + vitest: + specifier: ^1.2.1 + version: 1.2.1(@types/node@22.10.7)(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-sgx: dependencies: @@ -6842,6 +6871,10 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@grpc/grpc-js@1.12.2': + resolution: {integrity: sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==} + engines: {node: '>=12.10.0'} + '@grpc/grpc-js@1.12.5': resolution: {integrity: sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==} engines: {node: '>=12.10.0'} @@ -11146,6 +11179,9 @@ packages: '@types/ws@7.4.7': resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.5.13': resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} @@ -11369,6 +11405,11 @@ packages: peerDependencies: vitest: ^1.0.0 + '@vitest/coverage-v8@1.6.0': + resolution: {integrity: sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==} + peerDependencies: + vitest: 1.6.0 + '@vitest/coverage-v8@2.1.5': resolution: {integrity: sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==} peerDependencies: @@ -12279,6 +12320,10 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + astra-lightning@1.1.0: + resolution: {integrity: sha512-uUHw/UdSev08Wkscaud3ektkYWq/wakeoZ6gG12PfLwigCe6by4PsjsCUPtC0wzs1cFh5gDrG7XmtnTPMozvNQ==} + engines: {node: '>=18'} + astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -12292,9 +12337,15 @@ packages: async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asyncjs-util@1.2.12: + resolution: {integrity: sha512-ZuiV9aMltl2Db9AB+4h0esHOc642ktBivOhyV3ZHQ4nHwSPH7KiLIxiPTubO4cyx6aJ1Cb5ASJVHUiTk+6DVQQ==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -12599,6 +12650,10 @@ packages: bintrees@1.0.2: resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} + bip174@2.1.1: + resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} + engines: {node: '>=8.0.0'} + bip174@3.0.0-rc.1: resolution: {integrity: sha512-+8P3BpSairVNF2Nee6Ksdc1etIjWjBOi/MH0MwKtq9YaYp+S2Hk2uvup0e8hCT4IKlS58nXJyyQVmW92zPoD4Q==} engines: {node: '>=18.0.0'} @@ -12619,6 +12674,20 @@ packages: bip39@3.1.0: resolution: {integrity: sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==} + bip66@1.1.5: + resolution: {integrity: sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==} + + bitcoin-ops@1.4.1: + resolution: {integrity: sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==} + + bitcoinjs-lib@6.1.3: + resolution: {integrity: sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==} + engines: {node: '>=8.0.0'} + + bitcoinjs-lib@6.1.6: + resolution: {integrity: sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==} + engines: {node: '>=8.0.0'} + bitcoinjs-lib@7.0.0-rc.0: resolution: {integrity: sha512-7CQgOIbREemKR/NT2uc3uO/fkEy+6CM0sLxboVVY6bv6DbZmPt3gg5Y/hhWgQFeZu5lfTbtVAv32MIxf7lMh4g==} engines: {node: '>=18.0.0'} @@ -12668,6 +12737,20 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + bolt07@1.8.4: + resolution: {integrity: sha512-UyZRSYmVE8K++Jg1BiJrUkxQak03aS/s7ESKDsBdBPzaTlk2E09Y0JYa9HhWN7MRn48Y2K1doOzkb1Hn6XixZw==} + + bolt07@1.9.4: + resolution: {integrity: sha512-zt+PZPoD8DN/ZaqqKen0B/NiAvWOgbPkj1/XS39CcAdwqGQSW9KG8Cf28m7fzFw+amZAvgG+jzRA1rGj/lDdwA==} + + bolt09@1.0.0: + resolution: {integrity: sha512-J8wh6mRTNnYJuC43iSJRvM2Te0RtO4+Cn0JCgF6q2xWXKWjZjdPV5AGamD8R8C39/Ei6L0I780aFvIZu+bATWw==} + engines: {node: '>=16'} + + bolt09@2.1.0: + resolution: {integrity: sha512-aSLhKEWFUKGFOsQWRXcmiNzVVBCK+Tz4RUYGQZ8U1HFllHzCC68z/iJAYmPgEmyKNuyHz2twS/uku2HKFiWBRg==} + engines: {node: '>=18'} + bonjour-service@1.3.0: resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} @@ -12776,6 +12859,9 @@ packages: bs58check@2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + bs58check@3.0.1: + resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + bs58check@4.0.0: resolution: {integrity: sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==} @@ -14504,6 +14590,10 @@ packages: winax: optional: true + ecpair@2.1.0: + resolution: {integrity: sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==} + engines: {node: '>=8.0.0'} + ed25519-hd-key@1.1.2: resolution: {integrity: sha512-/0y9y6N7vM6Kj5ASr9J9wcMVDTtygxSOvYX+PJiMD7VcxCx2G03V5bLRl8Dug9EgkLFsLhGqBtQWQRcElEeWTA==} @@ -16360,6 +16450,10 @@ packages: peerDependencies: reflect-metadata: ~0.2.2 + invoices@3.0.0: + resolution: {integrity: sha512-/WDTkfU2RMelQpQ54BwZssqGXYNWbPnWkZ/9QV57vAvD3RLdCDbhDuucOGti8CK3sgk8nmhRV6V0WfMrxojMmA==} + engines: {node: '>=16'} + ioredis@5.4.2: resolution: {integrity: sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==} engines: {node: '>=12.22.0'} @@ -17018,6 +17112,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -20357,6 +20454,10 @@ packages: engines: {node: '>= 0.10'} hasBin: true + psbt@3.0.0: + resolution: {integrity: sha512-Gg35WfXAdbVqION9AJ4cO7cdgqR2iL1Dyq00AmvKCosTbm7EQrrMmHGjkWACb7ue9+aaHjMi/UdDG1SZwqA6bg==} + engines: {node: '>=16'} + psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -20433,6 +20534,9 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pushdata-bitcoin@1.0.1: + resolution: {integrity: sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==} + pvtsutils@1.3.6: resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} @@ -21938,6 +22042,9 @@ packages: strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + strip-literal@2.1.1: + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} + strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} @@ -22290,6 +22397,14 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tiny-secp256k1@2.2.2: + resolution: {integrity: sha512-KP3eqslmiUH9jxhyQuLY+GqI4wt1EiHWNHHqKVUxCZV41+MT+esucaK4mb6Ji0vKWVKBffJ6tlxU83Pq5TIUwg==} + engines: {node: '>=14.0.0'} + + tiny-secp256k1@2.2.3: + resolution: {integrity: sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==} + engines: {node: '>=14.0.0'} + tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} @@ -22759,6 +22874,10 @@ packages: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} + type-fest@4.32.0: resolution: {integrity: sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==} engines: {node: '>=16'} @@ -22869,6 +22988,10 @@ packages: resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} engines: {node: '>=8'} + uint8array-tools@0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} + engines: {node: '>=14.0.0'} + uint8array-tools@0.0.8: resolution: {integrity: sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==} engines: {node: '>=14.0.0'} @@ -23315,6 +23438,9 @@ packages: varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + varuint-bitcoin@1.1.2: + resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} + varuint-bitcoin@2.0.0: resolution: {integrity: sha512-6QZbU/rHO2ZQYpWFDALCDSRsXbAs1VOEmXAxtbtjLtKuMJ/FQ8YbhfxlaiKv5nklci0M6lZtlZyxo9Q+qNnyog==} @@ -24280,18 +24406,6 @@ packages: snapshots: - '@0glabs/0g-ts-sdk@0.2.1(bufferutil@4.0.9)(ethers@6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) - open-jsonrpc-provider: 0.2.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - '@0glabs/0g-ts-sdk@0.2.1(bufferutil@4.0.9)(ethers@6.13.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(utf-8-validate@6.0.5)': dependencies: '@ethersproject/bytes': 5.7.0 @@ -24424,7 +24538,7 @@ snapshots: '@acuminous/bitsyntax@0.1.2': dependencies: buffer-more-ints: 1.0.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) safe-buffer: 5.1.2 transitivePeerDependencies: - supports-color @@ -25592,7 +25706,7 @@ snapshots: '@babel/traverse': 7.26.5 '@babel/types': 7.26.5 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -26372,7 +26486,7 @@ snapshots: '@babel/parser': 7.26.5 '@babel/template': 7.25.9 '@babel/types': 7.26.5 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -26634,7 +26748,7 @@ snapshots: - typescript - utf-8-validate - '@coinbase/coinbase-sdk@0.10.0(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.24.1)': + '@coinbase/coinbase-sdk@0.10.0(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@6.0.5)(zod@3.24.1)': dependencies: '@scure/bip32': 1.6.2 abitype: 1.0.8(typescript@5.6.3)(zod@3.24.1) @@ -26645,10 +26759,10 @@ snapshots: bip39: 3.1.0 decimal.js: 10.4.3 dotenv: 16.4.7 - ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) node-jose: 2.2.0 secp256k1: 5.0.1 - viem: 2.21.58(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.24.1) + viem: 2.21.58(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@6.0.5)(zod@3.24.1) transitivePeerDependencies: - bufferutil - debug @@ -26688,11 +26802,11 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@18.6.1(@types/node@20.17.9)(typescript@5.6.3)': + '@commitlint/cli@18.6.1(@types/node@22.10.7)(typescript@5.6.3)': dependencies: '@commitlint/format': 18.6.1 '@commitlint/lint': 18.6.1 - '@commitlint/load': 18.6.1(@types/node@20.17.9)(typescript@5.6.3) + '@commitlint/load': 18.6.1(@types/node@22.10.7)(typescript@5.6.3) '@commitlint/read': 18.6.1 '@commitlint/types': 18.6.1 execa: 5.1.1 @@ -26742,7 +26856,7 @@ snapshots: '@commitlint/rules': 18.6.1 '@commitlint/types': 18.6.1 - '@commitlint/load@18.6.1(@types/node@20.17.9)(typescript@5.6.3)': + '@commitlint/load@18.6.1(@types/node@22.10.7)(typescript@5.6.3)': dependencies: '@commitlint/config-validator': 18.6.1 '@commitlint/execute-rule': 18.6.1 @@ -26750,7 +26864,7 @@ snapshots: '@commitlint/types': 18.6.1 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.6.3) - cosmiconfig-typescript-loader: 5.1.0(@types/node@20.17.9)(cosmiconfig@8.3.6(typescript@5.6.3))(typescript@5.6.3) + cosmiconfig-typescript-loader: 5.1.0(@types/node@22.10.7)(cosmiconfig@8.3.6(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -27609,14 +27723,14 @@ snapshots: dependencies: dayjs: 1.11.13 - '@deepgram/sdk@3.9.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + '@deepgram/sdk@3.9.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5)': dependencies: '@deepgram/captions': 1.2.0 '@types/node': 18.19.71 cross-fetch: 3.2.0(encoding@0.1.13) deepmerge: 4.3.1 events: 3.3.0 - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil - encoding @@ -29443,7 +29557,7 @@ snapshots: '@eslint/config-array@0.19.1': dependencies: '@eslint/object-schema': 2.1.5 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -29473,7 +29587,7 @@ snapshots: '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -30152,6 +30266,11 @@ snapshots: dependencies: graphql: 16.10.0 + '@grpc/grpc-js@1.12.2': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + '@grpc/grpc-js@1.12.5': dependencies: '@grpc/proto-loader': 0.7.13 @@ -30437,12 +30556,12 @@ snapshots: protobufjs: 7.4.0 rxjs: 7.8.1 - '@injectivelabs/sdk-ts@1.14.33(@types/react@19.0.7)(bufferutil@4.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(utf-8-validate@5.0.10)': + '@injectivelabs/sdk-ts@1.14.33(@types/react@19.0.7)(bufferutil@4.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(utf-8-validate@6.0.5)': dependencies: '@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) '@cosmjs/amino': 0.32.4 '@cosmjs/proto-signing': 0.32.4 - '@cosmjs/stargate': 0.32.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@cosmjs/stargate': 0.32.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) '@ethersproject/bytes': 5.7.0 '@injectivelabs/core-proto-ts': 1.13.4 '@injectivelabs/exceptions': 1.14.33(google-protobuf@3.21.4) @@ -30463,7 +30582,7 @@ snapshots: bip39: 3.1.0 cosmjs-types: 0.9.0 ethereumjs-util: 7.1.5 - ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) google-protobuf: 3.21.4 graphql: 16.10.0 http-status-codes: 2.3.0 @@ -30915,41 +31034,6 @@ snapshots: 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@20.17.9)(typescript@5.6.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': 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@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.6.3)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@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 @@ -38328,6 +38412,10 @@ snapshots: dependencies: '@types/node': 20.17.9 + '@types/ws@8.5.12': + dependencies: + '@types/node': 20.17.9 + '@types/ws@8.5.13': dependencies: '@types/node': 20.17.9 @@ -38637,7 +38725,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.20.0 '@typescript-eslint/visitor-keys': 8.20.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -38802,6 +38890,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/coverage-v8@1.6.0(vitest@1.2.1(@types/node@22.10.7)(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))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.4.0(supports-color@5.5.0) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + picocolors: 1.1.1 + std-env: 3.8.0 + strip-literal: 2.1.1 + test-exclude: 6.0.0 + vitest: 1.2.1(@types/node@22.10.7)(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) + transitivePeerDependencies: + - supports-color + '@vitest/coverage-v8@2.1.5(vitest@3.0.2(@types/node@22.8.4)(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))': dependencies: '@ampproject/remapping': 2.3.0 @@ -38838,13 +38945,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.20.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)(vitest@2.1.5(@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))': + '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.20.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)(vitest@2.1.5(@types/node@22.10.7)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0))': dependencies: eslint: 9.18.0(jiti@2.4.2) optionalDependencies: '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) typescript: 5.6.3 - vitest: 2.1.5(@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) + vitest: 2.1.5(@types/node@22.10.7)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0) '@vitest/expect@0.34.6': dependencies: @@ -38900,14 +39007,6 @@ snapshots: optionalDependencies: vite: 5.4.11(@types/node@22.10.7)(terser@5.37.0) - '@vitest/mocker@2.1.5(vite@5.4.11(@types/node@20.17.9)(terser@5.37.0))': - dependencies: - '@vitest/spy': 2.1.5 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.11(@types/node@20.17.9)(terser@5.37.0) - '@vitest/mocker@2.1.5(vite@5.4.11(@types/node@22.10.7)(terser@5.37.0))': dependencies: '@vitest/spy': 2.1.5 @@ -40082,7 +40181,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -40578,6 +40677,25 @@ snapshots: dependencies: tslib: 2.8.1 + astra-lightning@1.1.0: + dependencies: + '@grpc/grpc-js': 1.12.2 + '@grpc/proto-loader': 0.7.13 + '@types/node': 22.7.5 + '@types/request': 2.48.12 + '@types/ws': 8.5.12 + async: 3.2.6 + asyncjs-util: 1.2.12 + bitcoinjs-lib: 6.1.6 + bn.js: 5.2.1 + bolt07: 1.9.4 + bolt09: 2.1.0 + ecpair: 2.1.0 + invoices: 3.0.0 + psbt: 3.0.0 + tiny-secp256k1: 2.2.3 + type-fest: 4.26.1 + astring@1.9.0: {} async-retry@1.3.3: @@ -40590,8 +40708,14 @@ snapshots: dependencies: lodash: 4.17.21 + async@3.2.4: {} + async@3.2.6: {} + asyncjs-util@1.2.12: + dependencies: + async: 3.2.4 + asynckit@0.4.0: {} at-least-node@1.0.0: {} @@ -40684,13 +40808,6 @@ snapshots: transitivePeerDependencies: - debug - axios@0.27.2: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - transitivePeerDependencies: - - debug - axios@0.27.2(debug@4.3.4): dependencies: follow-redirects: 1.15.9(debug@4.3.4) @@ -40739,7 +40856,7 @@ snapshots: axios@1.7.9: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.3.4) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -41027,6 +41144,8 @@ snapshots: bintrees@1.0.2: {} + bip174@2.1.1: {} + bip174@3.0.0-rc.1: dependencies: uint8array-tools: 0.0.9 @@ -41057,6 +41176,30 @@ snapshots: dependencies: '@noble/hashes': 1.3.0 + bip66@1.1.5: + dependencies: + safe-buffer: 5.2.1 + + bitcoin-ops@1.4.1: {} + + bitcoinjs-lib@6.1.3: + dependencies: + '@noble/hashes': 1.7.1 + bech32: 2.0.0 + bip174: 2.1.1 + bs58check: 3.0.1 + typeforce: 1.18.0 + varuint-bitcoin: 1.1.2 + + bitcoinjs-lib@6.1.6: + dependencies: + '@noble/hashes': 1.7.1 + bech32: 2.0.0 + bip174: 2.1.1 + bs58check: 3.0.1 + typeforce: 1.18.0 + varuint-bitcoin: 1.1.2 + bitcoinjs-lib@7.0.0-rc.0(typescript@5.7.3): dependencies: '@noble/hashes': 1.7.1 @@ -41123,6 +41266,18 @@ snapshots: transitivePeerDependencies: - supports-color + bolt07@1.8.4: + dependencies: + bn.js: 5.2.1 + + bolt07@1.9.4: + dependencies: + bn.js: 5.2.1 + + bolt09@1.0.0: {} + + bolt09@2.1.0: {} + bonjour-service@1.3.0: dependencies: fast-deep-equal: 3.1.3 @@ -41341,6 +41496,11 @@ snapshots: create-hash: 1.2.0 safe-buffer: 5.2.1 + bs58check@3.0.1: + dependencies: + '@noble/hashes': 1.7.1 + bs58: 5.0.0 + bs58check@4.0.0: dependencies: '@noble/hashes': 1.7.1 @@ -42219,9 +42379,9 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig-typescript-loader@5.1.0(@types/node@20.17.9)(cosmiconfig@8.3.6(typescript@5.6.3))(typescript@5.6.3): + cosmiconfig-typescript-loader@5.1.0(@types/node@22.10.7)(cosmiconfig@8.3.6(typescript@5.6.3))(typescript@5.6.3): dependencies: - '@types/node': 20.17.9 + '@types/node': 22.10.7 cosmiconfig: 8.3.6(typescript@5.6.3) jiti: 1.21.7 typescript: 5.6.3 @@ -42303,21 +42463,6 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - 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.6.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@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.6.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@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 @@ -42914,10 +43059,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -43351,6 +43492,12 @@ snapshots: - utf-8-validate - zod + ecpair@2.1.0: + dependencies: + randombytes: 2.1.0 + typeforce: 1.18.0 + wif: 2.0.6 + ed25519-hd-key@1.1.2: dependencies: bip39: 3.0.2 @@ -44026,7 +44173,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 @@ -44515,7 +44662,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: @@ -44804,8 +44951,6 @@ snapshots: async: 0.2.10 which: 1.3.1 - follow-redirects@1.15.9: {} - follow-redirects@1.15.9(debug@4.3.4): optionalDependencies: debug: 4.3.4 @@ -45891,7 +46036,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -45949,14 +46094,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -46179,6 +46324,15 @@ snapshots: '@inversifyjs/core': 1.3.5(reflect-metadata@0.2.2) reflect-metadata: 0.2.2 + invoices@3.0.0: + dependencies: + bech32: 2.0.0 + bitcoinjs-lib: 6.1.3 + bn.js: 5.2.1 + bolt07: 1.8.4 + bolt09: 1.0.0 + tiny-secp256k1: 2.2.2 + ioredis@5.4.2: dependencies: '@ioredis/commands': 1.2.0 @@ -46599,7 +46753,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -46716,25 +46870,6 @@ snapshots: - babel-plugin-macros - supports-color - 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.6.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@20.17.9)(typescript@5.6.3)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - 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.6.3)) - exit: 0.1.2 - import-local: 3.2.0 - 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.6.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@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@20.17.9)(typescript@5.7.3)) @@ -46792,37 +46927,6 @@ snapshots: - supports-color - ts-node - 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.6.3)): - 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': 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.6.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - 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 @@ -47167,18 +47271,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - 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.6.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@20.17.9)(typescript@5.6.3)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - 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.6.3)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - 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@20.17.9)(typescript@5.7.3)) @@ -47277,6 +47369,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -49802,18 +49896,6 @@ snapshots: platform: 1.3.6 protobufjs: 7.4.0 - open-jsonrpc-provider@0.2.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): - dependencies: - axios: 0.27.2 - reconnecting-websocket: 4.4.0 - websocket: 1.0.35 - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - open-jsonrpc-provider@0.2.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: axios: 0.27.2(debug@4.3.4) @@ -51567,6 +51649,15 @@ snapshots: dependencies: event-stream: 3.3.4 + psbt@3.0.0: + dependencies: + bip66: 1.1.5 + bitcoin-ops: 1.4.1 + bitcoinjs-lib: 6.1.3 + bn.js: 5.2.1 + pushdata-bitcoin: 1.0.1 + varuint-bitcoin: 1.1.2 + psl@1.15.0: dependencies: punycode: 2.3.1 @@ -51702,6 +51793,10 @@ snapshots: pure-rand@6.1.0: {} + pushdata-bitcoin@1.0.1: + dependencies: + bitcoin-ops: 1.4.1 + pvtsutils@1.3.6: dependencies: tslib: 2.8.1 @@ -53091,7 +53186,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -53739,6 +53834,10 @@ snapshots: dependencies: acorn: 8.14.0 + strip-literal@2.1.1: + dependencies: + js-tokens: 9.0.1 + strnum@1.0.5: {} strong-log-transformer@2.1.0: @@ -54142,6 +54241,14 @@ snapshots: tiny-invariant@1.3.3: {} + tiny-secp256k1@2.2.2: + dependencies: + uint8array-tools: 0.0.7 + + tiny-secp256k1@2.2.3: + dependencies: + uint8array-tools: 0.0.7 + tiny-warning@1.0.3: {} tinybench@2.9.0: {} @@ -54638,7 +54745,7 @@ snapshots: tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color @@ -54719,6 +54826,8 @@ snapshots: type-fest@3.13.1: {} + type-fest@4.26.1: {} + type-fest@4.32.0: {} type-is@1.6.18: @@ -54854,6 +54963,8 @@ snapshots: dependencies: '@lukeed/csprng': 1.1.0 + uint8array-tools@0.0.7: {} + uint8array-tools@0.0.8: {} uint8array-tools@0.0.9: {} @@ -55277,6 +55388,10 @@ snapshots: varint@6.0.0: {} + varuint-bitcoin@1.1.2: + dependencies: + safe-buffer: 5.2.1 + varuint-bitcoin@2.0.0: dependencies: uint8array-tools: 0.0.8 @@ -55318,17 +55433,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - viem@2.21.58(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.24.1): + viem@2.21.58(bufferutil@4.0.9)(typescript@5.6.3)(utf-8-validate@6.0.5)(zod@3.24.1): dependencies: '@noble/curves': 1.7.0 '@noble/hashes': 1.6.1 '@scure/bip32': 1.6.0 '@scure/bip39': 1.5.0 abitype: 1.0.7(typescript@5.6.3)(zod@3.24.1) - isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) ox: 0.4.4(typescript@5.6.3)(zod@3.24.1) webauthn-p256: 0.0.10 - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -55533,24 +55648,6 @@ snapshots: - supports-color - terser - vite-node@2.1.5(@types/node@20.17.9)(terser@5.37.0): - dependencies: - cac: 6.7.14 - debug: 4.4.0 - es-module-lexer: 1.6.0 - pathe: 1.1.2 - vite: 5.4.11(@types/node@20.17.9)(terser@5.37.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - vite-node@2.1.5(@types/node@22.10.7)(terser@5.37.0): dependencies: cac: 6.7.14 @@ -55952,6 +56049,42 @@ snapshots: - supports-color - terser + vitest@1.2.1(@types/node@22.10.7)(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): + dependencies: + '@vitest/expect': 1.2.1 + '@vitest/runner': 1.2.1 + '@vitest/snapshot': 1.2.1 + '@vitest/spy': 1.2.1 + '@vitest/utils': 1.2.1 + acorn-walk: 8.3.4 + cac: 6.7.14 + chai: 4.5.0 + debug: 4.4.0(supports-color@5.5.0) + execa: 8.0.1 + local-pkg: 0.5.1 + magic-string: 0.30.17 + pathe: 1.1.2 + picocolors: 1.1.1 + std-env: 3.8.0 + strip-literal: 1.3.0 + tinybench: 2.9.0 + tinypool: 0.8.4 + vite: 5.4.11(@types/node@22.10.7)(terser@5.37.0) + vite-node: 1.2.1(@types/node@22.10.7)(terser@5.37.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.10.7 + jsdom: 25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10) + transitivePeerDependencies: + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vitest@1.2.1(@types/node@22.10.7)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0): dependencies: '@vitest/expect': 1.2.1 @@ -56132,42 +56265,6 @@ snapshots: - supports-color - terser - vitest@2.1.5(@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): - dependencies: - '@vitest/expect': 2.1.5 - '@vitest/mocker': 2.1.5(vite@5.4.11(@types/node@20.17.9)(terser@5.37.0)) - '@vitest/pretty-format': 2.1.8 - '@vitest/runner': 2.1.5 - '@vitest/snapshot': 2.1.5 - '@vitest/spy': 2.1.5 - '@vitest/utils': 2.1.5 - chai: 5.1.2 - debug: 4.4.0 - expect-type: 1.1.0 - magic-string: 0.30.17 - pathe: 1.1.2 - std-env: 3.8.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinypool: 1.0.2 - tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@20.17.9)(terser@5.37.0) - vite-node: 2.1.5(@types/node@20.17.9)(terser@5.37.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@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) - transitivePeerDependencies: - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - vitest@2.1.5(@types/node@22.10.7)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0): dependencies: '@vitest/expect': 2.1.5 diff --git a/turbo.json b/turbo.json index 129de654728..3a0492e3b8d 100644 --- a/turbo.json +++ b/turbo.json @@ -57,6 +57,10 @@ "@elizaos/plugin-trustdb#build" ] }, + "@elizaos/plugin-lightning#build": { + "outputs": ["dist/**"], + "dependsOn": ["@elizaos/plugin-tee#build"] + }, "eliza-docs#build": { "outputs": ["build/**"] },