├── .env.example ├── .gitignore ├── PUBLISH.md ├── README.md ├── bun.lockb ├── example ├── handlingError.ts ├── index.ts └── utils │ ├── getSignature.ts │ ├── transactionSender.ts │ └── wait.ts ├── generated ├── .openapi-generator-ignore ├── .openapi-generator │ ├── FILES │ └── VERSION ├── apis │ ├── SwapApi.ts │ └── index.ts ├── index.ts ├── models │ ├── AccountMeta.ts │ ├── IndexedRouteMapResponse.ts │ ├── Instruction.ts │ ├── PlatformFee.ts │ ├── QuoteResponse.ts │ ├── RoutePlanStep.ts │ ├── SwapInfo.ts │ ├── SwapInstructionsResponse.ts │ ├── SwapMode.ts │ ├── SwapRequest.ts │ ├── SwapRequestPrioritizationFeeLamports.ts │ ├── SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports.ts │ ├── SwapResponse.ts │ └── index.ts └── runtime.ts ├── openapitools.json ├── package.json ├── pnpm-lock.yaml ├── src └── index.ts ├── swagger.yaml ├── test.http ├── tests └── index.test.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | PRIVATE_KEY=your_base58_private_key 2 | FLOW=quoteAndSwap # or quote 3 | 4 | # Jupiter API Key (optional) 5 | # If provided, the client will use the paid tier API endpoint 6 | JUPITER_API_KEY=your_api_key_here 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store 4 | .env 5 | .idea -------------------------------------------------------------------------------- /PUBLISH.md: -------------------------------------------------------------------------------- 1 | - bump version 2 | - pnpm build 3 | - npm publish --access public -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JavaScript API Client for Jupiter V6 2 | 3 | ## Table of Contents 4 | 5 | - [Installation](#installation) 6 | - [Developing](#developing) 7 | - [Usage](#usage) 8 | - [Examples](#examples) 9 | - Paid Hosted APIs (Deprecated and will not be supported, reach out in Discord for more information) 10 | 11 | ## Installation 12 | 13 | To use the Jupiter API client, you need to have Node.js and npm (Node Package Manager) installed. Then, you can install the package using npm: 14 | 15 | ```bash 16 | npm install @jup-ag/api 17 | ``` 18 | 19 | ## Developing 20 | 21 | - pnpm dev-quote 22 | - Get request a quote based on mints and amount 23 | - pnpm dev-swap 24 | - Post request with the quote response to receive the swap transaction to sign and send to the network 25 | - Ensure you have setup `process.env.PRIVATE_KEY` to sign 26 | 27 | - Please set up `process.env.API_KEY` if you have a Pro plan via https://portal.jup.ag/ 28 | 29 | Refer to our developer documentation for more information and tips: 30 | - Swap API: https://dev.jup.ag/docs/swap-api 31 | - API Key setup: https://dev.jup.ag/docs/api-setup 32 | 33 | ## Usage 34 | 35 | To start using the API client, you need to require it in your Node.js project: 36 | 37 | ```typescript 38 | import { createJupiterApiClient } from '@jup-ag/api'; 39 | 40 | const jupiterQuoteApi = createJupiterApiClient(config); // config is optional such as api key 41 | ``` 42 | 43 | Now, you can call methods provided by the API client to interact with Jupiter's API. For example: 44 | 45 | ```typescript 46 | jupiterQuoteApi.quoteGet({ 47 | inputMint: "So11111111111111111111111111111111111111112", 48 | outputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", 49 | amount: "100000000", 50 | slippageBps: 100, 51 | }) 52 | ``` 53 | 54 | ## Examples 55 | 56 | Checkout the [example in the repo](/example/index.ts). 57 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jup-ag/jupiter-quote-api-node/0b7f8e3e06efec6cb4484336add4d8674b96258a/bun.lockb -------------------------------------------------------------------------------- /example/handlingError.ts: -------------------------------------------------------------------------------- 1 | import { ResponseError, createJupiterApiClient } from "src"; 2 | 3 | async function main() { 4 | try { 5 | const jupiterQuoteApi = createJupiterApiClient(); 6 | 7 | await jupiterQuoteApi.quoteGet({ 8 | inputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", 9 | amount: 35281.123, // decimal 10 | outputMint: "So11111111111111111111111111111111111111112", 11 | }); 12 | } catch (e) { 13 | if (e instanceof ResponseError) { 14 | console.log(await e.response.json()); 15 | } 16 | } 17 | } 18 | 19 | main(); 20 | -------------------------------------------------------------------------------- /example/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | QuoteGetRequest, 3 | QuoteResponse, 4 | SwapResponse, 5 | createJupiterApiClient, 6 | } from "../src/index"; 7 | import { Connection, Keypair, VersionedTransaction } from "@solana/web3.js"; 8 | import { Wallet } from "@project-serum/anchor"; 9 | import bs58 from "bs58"; 10 | import { transactionSenderAndConfirmationWaiter } from "./utils/transactionSender"; 11 | import { getSignature } from "./utils/getSignature"; 12 | import dotenv from "dotenv"; 13 | 14 | dotenv.config(); 15 | 16 | // If you have problem landing transactions, read this: https://dev.jup.ag/docs/swap-api/send-swap-transaction#how-jupiter-estimates-priority-fee 17 | 18 | // Make sure that you are using your own RPC endpoint. 19 | // Helius and Triton have staked SOL and they can usually land transactions better. 20 | const connection = new Connection( 21 | "https://api.mainnet-beta.solana.com" // We only support mainnet. 22 | ); 23 | 24 | // Get API key from environment variables 25 | const apiKey = process.env.API_KEY; 26 | 27 | // Create Jupiter API client with API key if available 28 | const jupiterQuoteApi = createJupiterApiClient( 29 | apiKey ? { apiKey } : undefined 30 | ); 31 | 32 | // Log which API endpoint is being used 33 | console.log("Using API endpoint:", apiKey 34 | ? "https://api.jup.ag/swap/v1 (with API key)" 35 | : "https://lite-api.jup.ag/swap/v1 (free tier)"); 36 | 37 | async function getQuote() { 38 | const params: QuoteGetRequest = { 39 | inputMint: "So11111111111111111111111111111111111111112", // SOL 40 | outputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC 41 | amount: 100000000, // 0.1 SOL 42 | slippageBps: 100, // 1% 43 | }; 44 | 45 | // get quote 46 | const quote = await jupiterQuoteApi.quoteGet(params); 47 | 48 | if (!quote) { 49 | throw new Error("unable to quote"); 50 | } 51 | return quote; 52 | } 53 | 54 | async function getSwapResponse(wallet: Wallet, quote: QuoteResponse) { 55 | // Get serialized transaction 56 | const swapResponse = await jupiterQuoteApi.swapPost({ 57 | swapRequest: { 58 | quoteResponse: quote, 59 | userPublicKey: wallet.publicKey.toBase58(), 60 | dynamicComputeUnitLimit: true, 61 | dynamicSlippage: true, 62 | prioritizationFeeLamports: { 63 | priorityLevelWithMaxLamports: { 64 | maxLamports: 10000000, 65 | priorityLevel: "veryHigh", // If you want to land transaction fast, set this to use `veryHigh`. You will pay on average higher priority fee. 66 | }, 67 | }, 68 | }, 69 | }); 70 | return swapResponse; 71 | } 72 | 73 | async function flowQuote() { 74 | const quote = await getQuote(); 75 | console.dir(quote, { depth: null }); 76 | } 77 | 78 | async function flowQuoteAndSwap() { 79 | const wallet = new Wallet( 80 | Keypair.fromSecretKey(bs58.decode(process.env.PRIVATE_KEY || "")) 81 | ); 82 | console.log("Wallet:", wallet.publicKey.toBase58()); 83 | 84 | const quote = await getQuote(); 85 | console.dir(quote, { depth: null }); 86 | const swapResponse = await getSwapResponse(wallet, quote); 87 | console.dir(swapResponse, { depth: null }); 88 | 89 | // Serialize the transaction 90 | const swapTransactionBuf = Uint8Array.from( 91 | Buffer.from(swapResponse.swapTransaction, "base64") 92 | ); 93 | const transaction = VersionedTransaction.deserialize(swapTransactionBuf); 94 | 95 | // Sign the transaction 96 | transaction.sign([wallet.payer]); 97 | const signature = getSignature(transaction); 98 | 99 | // We first simulate whether the transaction would be successful 100 | const { value: simulatedTransactionResponse } = 101 | await connection.simulateTransaction(transaction, { 102 | replaceRecentBlockhash: true, 103 | commitment: "processed", 104 | }); 105 | const { err, logs } = simulatedTransactionResponse; 106 | 107 | if (err) { 108 | // Simulation error, we can check the logs for more details 109 | // If you are getting an invalid account error, make sure that you have the input mint account to actually swap from. 110 | console.error("Simulation Error:"); 111 | console.error({ err, logs }); 112 | return; 113 | } 114 | 115 | const serializedTransaction = Buffer.from(transaction.serialize()); 116 | const blockhash = transaction.message.recentBlockhash; 117 | 118 | const transactionResponse = await transactionSenderAndConfirmationWaiter({ 119 | connection, 120 | serializedTransaction, 121 | blockhashWithExpiryBlockHeight: { 122 | blockhash, 123 | lastValidBlockHeight: swapResponse.lastValidBlockHeight, 124 | }, 125 | }); 126 | 127 | // If we are not getting a response back, the transaction has not confirmed. 128 | if (!transactionResponse) { 129 | console.error("Transaction not confirmed"); 130 | return; 131 | } 132 | 133 | if (transactionResponse.meta?.err) { 134 | console.error(transactionResponse.meta?.err); 135 | } 136 | 137 | console.log(`https://solscan.io/tx/${signature}`); 138 | } 139 | 140 | export async function main() { 141 | switch (process.env.FLOW) { 142 | case "quote": { 143 | await flowQuote(); 144 | break; 145 | } 146 | 147 | case "quoteAndSwap": { 148 | await flowQuoteAndSwap(); 149 | break; 150 | } 151 | 152 | default: { 153 | console.error("Please set the FLOW environment"); 154 | } 155 | } 156 | } 157 | 158 | main(); 159 | -------------------------------------------------------------------------------- /example/utils/getSignature.ts: -------------------------------------------------------------------------------- 1 | import bs58 from "bs58"; 2 | import { Transaction, VersionedTransaction } from "@solana/web3.js"; 3 | 4 | export function getSignature( 5 | transaction: Transaction | VersionedTransaction 6 | ): string { 7 | const signature = 8 | "signature" in transaction 9 | ? transaction.signature 10 | : transaction.signatures[0]; 11 | if (!signature) { 12 | throw new Error( 13 | "Missing transaction signature, the transaction was not signed by the fee payer" 14 | ); 15 | } 16 | return bs58.encode(signature); 17 | } 18 | -------------------------------------------------------------------------------- /example/utils/transactionSender.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BlockhashWithExpiryBlockHeight, 3 | Connection, 4 | TransactionExpiredBlockheightExceededError, 5 | VersionedTransactionResponse, 6 | } from "@solana/web3.js"; 7 | import promiseRetry from "promise-retry"; 8 | import { wait } from "./wait"; 9 | 10 | type TransactionSenderAndConfirmationWaiterArgs = { 11 | connection: Connection; 12 | serializedTransaction: Buffer; 13 | blockhashWithExpiryBlockHeight: BlockhashWithExpiryBlockHeight; 14 | }; 15 | 16 | const SEND_OPTIONS = { 17 | skipPreflight: true, 18 | }; 19 | 20 | export async function transactionSenderAndConfirmationWaiter({ 21 | connection, 22 | serializedTransaction, 23 | blockhashWithExpiryBlockHeight, 24 | }: TransactionSenderAndConfirmationWaiterArgs): Promise { 25 | const txid = await connection.sendRawTransaction( 26 | serializedTransaction, 27 | SEND_OPTIONS 28 | ); 29 | 30 | const controller = new AbortController(); 31 | const abortSignal = controller.signal; 32 | 33 | const abortableResender = async () => { 34 | while (true) { 35 | await wait(2_000); 36 | if (abortSignal.aborted) return; 37 | try { 38 | await connection.sendRawTransaction( 39 | serializedTransaction, 40 | SEND_OPTIONS 41 | ); 42 | } catch (e) { 43 | console.warn(`Failed to resend transaction: ${e}`); 44 | } 45 | } 46 | }; 47 | 48 | try { 49 | abortableResender(); 50 | const lastValidBlockHeight = 51 | blockhashWithExpiryBlockHeight.lastValidBlockHeight; 52 | 53 | // this would throw TransactionExpiredBlockheightExceededError 54 | await Promise.race([ 55 | connection.confirmTransaction( 56 | { 57 | ...blockhashWithExpiryBlockHeight, 58 | lastValidBlockHeight, 59 | signature: txid, 60 | abortSignal, 61 | }, 62 | "confirmed" 63 | ), 64 | new Promise(async (resolve) => { 65 | // in case ws socket died 66 | while (!abortSignal.aborted) { 67 | await wait(2_000); 68 | const tx = await connection.getSignatureStatus(txid, { 69 | searchTransactionHistory: false, 70 | }); 71 | if (tx?.value?.confirmationStatus === "confirmed") { 72 | resolve(tx); 73 | } 74 | } 75 | }), 76 | ]); 77 | } catch (e) { 78 | if (e instanceof TransactionExpiredBlockheightExceededError) { 79 | // we consume this error and getTransaction would return null 80 | return null; 81 | } else { 82 | // invalid state from web3.js 83 | throw e; 84 | } 85 | } finally { 86 | controller.abort(); 87 | } 88 | 89 | // in case rpc is not synced yet, we add some retries 90 | const response = promiseRetry( 91 | async (retry) => { 92 | const response = await connection.getTransaction(txid, { 93 | commitment: "confirmed", 94 | maxSupportedTransactionVersion: 0, 95 | }); 96 | if (!response) { 97 | retry(response); 98 | } 99 | return response; 100 | }, 101 | { 102 | retries: 5, 103 | minTimeout: 1e3, 104 | } 105 | ); 106 | 107 | return response; 108 | } 109 | -------------------------------------------------------------------------------- /example/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export const wait = (time: number) => 2 | new Promise((resolve) => setTimeout(resolve, time)); 3 | -------------------------------------------------------------------------------- /generated/.openapi-generator-ignore: -------------------------------------------------------------------------------- 1 | # OpenAPI Generator Ignore 2 | # Generated by openapi-generator https://github.com/openapitools/openapi-generator 3 | 4 | # Use this file to prevent files from being overwritten by the generator. 5 | # The patterns follow closely to .gitignore or .dockerignore. 6 | 7 | # As an example, the C# client generator defines ApiClient.cs. 8 | # You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: 9 | #ApiClient.cs 10 | 11 | # You can match any string of characters against a directory, file or extension with a single asterisk (*): 12 | #foo/*/qux 13 | # The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux 14 | 15 | # You can recursively match patterns against a directory, file or extension with a double asterisk (**): 16 | #foo/**/qux 17 | # This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux 18 | 19 | # You can also negate patterns with an exclamation (!). 20 | # For example, you can ignore all files in a docs folder with the file extension .md: 21 | #docs/*.md 22 | # Then explicitly reverse the ignore rule for a single file: 23 | #!docs/README.md 24 | -------------------------------------------------------------------------------- /generated/.openapi-generator/FILES: -------------------------------------------------------------------------------- 1 | apis/SwapApi.ts 2 | apis/index.ts 3 | index.ts 4 | models/AccountMeta.ts 5 | models/IndexedRouteMapResponse.ts 6 | models/Instruction.ts 7 | models/PlatformFee.ts 8 | models/QuoteResponse.ts 9 | models/RoutePlanStep.ts 10 | models/SwapInfo.ts 11 | models/SwapInstructionsResponse.ts 12 | models/SwapMode.ts 13 | models/SwapRequest.ts 14 | models/SwapRequestPrioritizationFeeLamports.ts 15 | models/SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports.ts 16 | models/SwapResponse.ts 17 | models/index.ts 18 | runtime.ts 19 | -------------------------------------------------------------------------------- /generated/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.3.0 -------------------------------------------------------------------------------- /generated/apis/SwapApi.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | 16 | import * as runtime from '../runtime'; 17 | import type { 18 | QuoteResponse, 19 | SwapInstructionsResponse, 20 | SwapRequest, 21 | SwapResponse, 22 | } from '../models/index'; 23 | import { 24 | QuoteResponseFromJSON, 25 | QuoteResponseToJSON, 26 | SwapInstructionsResponseFromJSON, 27 | SwapInstructionsResponseToJSON, 28 | SwapRequestFromJSON, 29 | SwapRequestToJSON, 30 | SwapResponseFromJSON, 31 | SwapResponseToJSON, 32 | } from '../models/index'; 33 | 34 | export interface QuoteGetRequest { 35 | inputMint: string; 36 | outputMint: string; 37 | amount: number; 38 | slippageBps?: number; 39 | swapMode?: QuoteGetSwapModeEnum; 40 | dexes?: Array; 41 | excludeDexes?: Array; 42 | restrictIntermediateTokens?: boolean; 43 | onlyDirectRoutes?: boolean; 44 | asLegacyTransaction?: boolean; 45 | platformFeeBps?: number; 46 | maxAccounts?: number; 47 | dynamicSlippage?: boolean; 48 | } 49 | 50 | export interface SwapInstructionsPostRequest { 51 | swapRequest: SwapRequest; 52 | } 53 | 54 | export interface SwapPostRequest { 55 | swapRequest: SwapRequest; 56 | } 57 | 58 | /** 59 | * 60 | */ 61 | export class SwapApi extends runtime.BaseAPI { 62 | 63 | /** 64 | * Returns a hash, which key is the program id and value is the label. This is used to help map error from transaction by identifying the fault program id. This can be used in conjunction with the `excludeDexes` or `dexes` parameter. 65 | * program-id-to-label 66 | */ 67 | async programIdToLabelGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { 68 | const queryParameters: any = {}; 69 | 70 | const headerParameters: runtime.HTTPHeaders = {}; 71 | 72 | const response = await this.request({ 73 | path: `/program-id-to-label`, 74 | method: 'GET', 75 | headers: headerParameters, 76 | query: queryParameters, 77 | }, initOverrides); 78 | 79 | return new runtime.JSONApiResponse(response); 80 | } 81 | 82 | /** 83 | * Returns a hash, which key is the program id and value is the label. This is used to help map error from transaction by identifying the fault program id. This can be used in conjunction with the `excludeDexes` or `dexes` parameter. 84 | * program-id-to-label 85 | */ 86 | async programIdToLabelGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<{ [key: string]: string; }> { 87 | const response = await this.programIdToLabelGetRaw(initOverrides); 88 | return await response.value(); 89 | } 90 | 91 | /** 92 | * Request for a quote to be used in `POST /swap` :::note Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/get-quote) for more information ::: 93 | * quote 94 | */ 95 | async quoteGetRaw(requestParameters: QuoteGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { 96 | if (requestParameters.inputMint === null || requestParameters.inputMint === undefined) { 97 | throw new runtime.RequiredError('inputMint','Required parameter requestParameters.inputMint was null or undefined when calling quoteGet.'); 98 | } 99 | 100 | if (requestParameters.outputMint === null || requestParameters.outputMint === undefined) { 101 | throw new runtime.RequiredError('outputMint','Required parameter requestParameters.outputMint was null or undefined when calling quoteGet.'); 102 | } 103 | 104 | if (requestParameters.amount === null || requestParameters.amount === undefined) { 105 | throw new runtime.RequiredError('amount','Required parameter requestParameters.amount was null or undefined when calling quoteGet.'); 106 | } 107 | 108 | const queryParameters: any = {}; 109 | 110 | if (requestParameters.inputMint !== undefined) { 111 | queryParameters['inputMint'] = requestParameters.inputMint; 112 | } 113 | 114 | if (requestParameters.outputMint !== undefined) { 115 | queryParameters['outputMint'] = requestParameters.outputMint; 116 | } 117 | 118 | if (requestParameters.amount !== undefined) { 119 | queryParameters['amount'] = requestParameters.amount; 120 | } 121 | 122 | if (requestParameters.slippageBps !== undefined) { 123 | queryParameters['slippageBps'] = requestParameters.slippageBps; 124 | } 125 | 126 | if (requestParameters.swapMode !== undefined) { 127 | queryParameters['swapMode'] = requestParameters.swapMode; 128 | } 129 | 130 | if (requestParameters.dexes) { 131 | queryParameters['dexes'] = requestParameters.dexes; 132 | } 133 | 134 | if (requestParameters.excludeDexes) { 135 | queryParameters['excludeDexes'] = requestParameters.excludeDexes; 136 | } 137 | 138 | if (requestParameters.restrictIntermediateTokens !== undefined) { 139 | queryParameters['restrictIntermediateTokens'] = requestParameters.restrictIntermediateTokens; 140 | } 141 | 142 | if (requestParameters.onlyDirectRoutes !== undefined) { 143 | queryParameters['onlyDirectRoutes'] = requestParameters.onlyDirectRoutes; 144 | } 145 | 146 | if (requestParameters.asLegacyTransaction !== undefined) { 147 | queryParameters['asLegacyTransaction'] = requestParameters.asLegacyTransaction; 148 | } 149 | 150 | if (requestParameters.platformFeeBps !== undefined) { 151 | queryParameters['platformFeeBps'] = requestParameters.platformFeeBps; 152 | } 153 | 154 | if (requestParameters.maxAccounts !== undefined) { 155 | queryParameters['maxAccounts'] = requestParameters.maxAccounts; 156 | } 157 | 158 | if (requestParameters.dynamicSlippage !== undefined) { 159 | queryParameters['dynamicSlippage'] = requestParameters.dynamicSlippage; 160 | } 161 | 162 | const headerParameters: runtime.HTTPHeaders = {}; 163 | 164 | const response = await this.request({ 165 | path: `/quote`, 166 | method: 'GET', 167 | headers: headerParameters, 168 | query: queryParameters, 169 | }, initOverrides); 170 | 171 | return new runtime.JSONApiResponse(response, (jsonValue) => QuoteResponseFromJSON(jsonValue)); 172 | } 173 | 174 | /** 175 | * Request for a quote to be used in `POST /swap` :::note Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/get-quote) for more information ::: 176 | * quote 177 | */ 178 | async quoteGet(requestParameters: QuoteGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { 179 | const response = await this.quoteGetRaw(requestParameters, initOverrides); 180 | return await response.value(); 181 | } 182 | 183 | /** 184 | * Request for swap instructions that you can use from the quote you get from `/quote` :::note Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/build-swap-transaction#build-your-own-transaction-with-instructions) for more information ::: 185 | * swap-instructions 186 | */ 187 | async swapInstructionsPostRaw(requestParameters: SwapInstructionsPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { 188 | if (requestParameters.swapRequest === null || requestParameters.swapRequest === undefined) { 189 | throw new runtime.RequiredError('swapRequest','Required parameter requestParameters.swapRequest was null or undefined when calling swapInstructionsPost.'); 190 | } 191 | 192 | const queryParameters: any = {}; 193 | 194 | const headerParameters: runtime.HTTPHeaders = {}; 195 | 196 | headerParameters['Content-Type'] = 'application/json'; 197 | 198 | const response = await this.request({ 199 | path: `/swap-instructions`, 200 | method: 'POST', 201 | headers: headerParameters, 202 | query: queryParameters, 203 | body: SwapRequestToJSON(requestParameters.swapRequest), 204 | }, initOverrides); 205 | 206 | return new runtime.JSONApiResponse(response, (jsonValue) => SwapInstructionsResponseFromJSON(jsonValue)); 207 | } 208 | 209 | /** 210 | * Request for swap instructions that you can use from the quote you get from `/quote` :::note Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/build-swap-transaction#build-your-own-transaction-with-instructions) for more information ::: 211 | * swap-instructions 212 | */ 213 | async swapInstructionsPost(requestParameters: SwapInstructionsPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { 214 | const response = await this.swapInstructionsPostRaw(requestParameters, initOverrides); 215 | return await response.value(); 216 | } 217 | 218 | /** 219 | * Request for a base64-encoded unsigned swap transaction based on the `/quote` response :::note Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/build-swap-transaction) for more information ::: 220 | * swap 221 | */ 222 | async swapPostRaw(requestParameters: SwapPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { 223 | if (requestParameters.swapRequest === null || requestParameters.swapRequest === undefined) { 224 | throw new runtime.RequiredError('swapRequest','Required parameter requestParameters.swapRequest was null or undefined when calling swapPost.'); 225 | } 226 | 227 | const queryParameters: any = {}; 228 | 229 | const headerParameters: runtime.HTTPHeaders = {}; 230 | 231 | headerParameters['Content-Type'] = 'application/json'; 232 | 233 | const response = await this.request({ 234 | path: `/swap`, 235 | method: 'POST', 236 | headers: headerParameters, 237 | query: queryParameters, 238 | body: SwapRequestToJSON(requestParameters.swapRequest), 239 | }, initOverrides); 240 | 241 | return new runtime.JSONApiResponse(response, (jsonValue) => SwapResponseFromJSON(jsonValue)); 242 | } 243 | 244 | /** 245 | * Request for a base64-encoded unsigned swap transaction based on the `/quote` response :::note Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/build-swap-transaction) for more information ::: 246 | * swap 247 | */ 248 | async swapPost(requestParameters: SwapPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { 249 | const response = await this.swapPostRaw(requestParameters, initOverrides); 250 | return await response.value(); 251 | } 252 | 253 | } 254 | 255 | /** 256 | * @export 257 | */ 258 | export const QuoteGetSwapModeEnum = { 259 | ExactIn: 'ExactIn', 260 | ExactOut: 'ExactOut' 261 | } as const; 262 | export type QuoteGetSwapModeEnum = typeof QuoteGetSwapModeEnum[keyof typeof QuoteGetSwapModeEnum]; 263 | -------------------------------------------------------------------------------- /generated/apis/index.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | export * from './SwapApi'; 4 | -------------------------------------------------------------------------------- /generated/index.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | export * from './runtime'; 4 | export * from './apis/index'; 5 | export * from './models/index'; 6 | -------------------------------------------------------------------------------- /generated/models/AccountMeta.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | /** 17 | * 18 | * @export 19 | * @interface AccountMeta 20 | */ 21 | export interface AccountMeta { 22 | /** 23 | * 24 | * @type {string} 25 | * @memberof AccountMeta 26 | */ 27 | pubkey: string; 28 | /** 29 | * 30 | * @type {boolean} 31 | * @memberof AccountMeta 32 | */ 33 | isSigner: boolean; 34 | /** 35 | * 36 | * @type {boolean} 37 | * @memberof AccountMeta 38 | */ 39 | isWritable: boolean; 40 | } 41 | 42 | /** 43 | * Check if a given object implements the AccountMeta interface. 44 | */ 45 | export function instanceOfAccountMeta(value: object): boolean { 46 | let isInstance = true; 47 | isInstance = isInstance && "pubkey" in value; 48 | isInstance = isInstance && "isSigner" in value; 49 | isInstance = isInstance && "isWritable" in value; 50 | 51 | return isInstance; 52 | } 53 | 54 | export function AccountMetaFromJSON(json: any): AccountMeta { 55 | return AccountMetaFromJSONTyped(json, false); 56 | } 57 | 58 | export function AccountMetaFromJSONTyped(json: any, ignoreDiscriminator: boolean): AccountMeta { 59 | if ((json === undefined) || (json === null)) { 60 | return json; 61 | } 62 | return { 63 | 64 | 'pubkey': json['pubkey'], 65 | 'isSigner': json['isSigner'], 66 | 'isWritable': json['isWritable'], 67 | }; 68 | } 69 | 70 | export function AccountMetaToJSON(value?: AccountMeta | null): any { 71 | if (value === undefined) { 72 | return undefined; 73 | } 74 | if (value === null) { 75 | return null; 76 | } 77 | return { 78 | 79 | 'pubkey': value.pubkey, 80 | 'isSigner': value.isSigner, 81 | 'isWritable': value.isWritable, 82 | }; 83 | } 84 | 85 | -------------------------------------------------------------------------------- /generated/models/IndexedRouteMapResponse.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | /** 17 | * 18 | * @export 19 | * @interface IndexedRouteMapResponse 20 | */ 21 | export interface IndexedRouteMapResponse { 22 | /** 23 | * All the mints that are indexed to match in indexedRouteMap 24 | * @type {Array} 25 | * @memberof IndexedRouteMapResponse 26 | */ 27 | mintKeys: Array; 28 | /** 29 | * All the possible route and their corresponding output mints 30 | * @type {{ [key: string]: Array; }} 31 | * @memberof IndexedRouteMapResponse 32 | */ 33 | indexedRouteMap: { [key: string]: Array; }; 34 | } 35 | 36 | /** 37 | * Check if a given object implements the IndexedRouteMapResponse interface. 38 | */ 39 | export function instanceOfIndexedRouteMapResponse(value: object): boolean { 40 | let isInstance = true; 41 | isInstance = isInstance && "mintKeys" in value; 42 | isInstance = isInstance && "indexedRouteMap" in value; 43 | 44 | return isInstance; 45 | } 46 | 47 | export function IndexedRouteMapResponseFromJSON(json: any): IndexedRouteMapResponse { 48 | return IndexedRouteMapResponseFromJSONTyped(json, false); 49 | } 50 | 51 | export function IndexedRouteMapResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): IndexedRouteMapResponse { 52 | if ((json === undefined) || (json === null)) { 53 | return json; 54 | } 55 | return { 56 | 57 | 'mintKeys': json['mintKeys'], 58 | 'indexedRouteMap': json['indexedRouteMap'], 59 | }; 60 | } 61 | 62 | export function IndexedRouteMapResponseToJSON(value?: IndexedRouteMapResponse | null): any { 63 | if (value === undefined) { 64 | return undefined; 65 | } 66 | if (value === null) { 67 | return null; 68 | } 69 | return { 70 | 71 | 'mintKeys': value.mintKeys, 72 | 'indexedRouteMap': value.indexedRouteMap, 73 | }; 74 | } 75 | 76 | -------------------------------------------------------------------------------- /generated/models/Instruction.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | import type { AccountMeta } from './AccountMeta'; 17 | import { 18 | AccountMetaFromJSON, 19 | AccountMetaFromJSONTyped, 20 | AccountMetaToJSON, 21 | } from './AccountMeta'; 22 | 23 | /** 24 | * 25 | * @export 26 | * @interface Instruction 27 | */ 28 | export interface Instruction { 29 | /** 30 | * 31 | * @type {string} 32 | * @memberof Instruction 33 | */ 34 | programId: string; 35 | /** 36 | * 37 | * @type {Array} 38 | * @memberof Instruction 39 | */ 40 | accounts: Array; 41 | /** 42 | * 43 | * @type {string} 44 | * @memberof Instruction 45 | */ 46 | data: string; 47 | } 48 | 49 | /** 50 | * Check if a given object implements the Instruction interface. 51 | */ 52 | export function instanceOfInstruction(value: object): boolean { 53 | let isInstance = true; 54 | isInstance = isInstance && "programId" in value; 55 | isInstance = isInstance && "accounts" in value; 56 | isInstance = isInstance && "data" in value; 57 | 58 | return isInstance; 59 | } 60 | 61 | export function InstructionFromJSON(json: any): Instruction { 62 | return InstructionFromJSONTyped(json, false); 63 | } 64 | 65 | export function InstructionFromJSONTyped(json: any, ignoreDiscriminator: boolean): Instruction { 66 | if ((json === undefined) || (json === null)) { 67 | return json; 68 | } 69 | return { 70 | 71 | 'programId': json['programId'], 72 | 'accounts': ((json['accounts'] as Array).map(AccountMetaFromJSON)), 73 | 'data': json['data'], 74 | }; 75 | } 76 | 77 | export function InstructionToJSON(value?: Instruction | null): any { 78 | if (value === undefined) { 79 | return undefined; 80 | } 81 | if (value === null) { 82 | return null; 83 | } 84 | return { 85 | 86 | 'programId': value.programId, 87 | 'accounts': ((value.accounts as Array).map(AccountMetaToJSON)), 88 | 'data': value.data, 89 | }; 90 | } 91 | 92 | -------------------------------------------------------------------------------- /generated/models/PlatformFee.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | /** 17 | * 18 | * @export 19 | * @interface PlatformFee 20 | */ 21 | export interface PlatformFee { 22 | /** 23 | * 24 | * @type {string} 25 | * @memberof PlatformFee 26 | */ 27 | amount?: string; 28 | /** 29 | * 30 | * @type {number} 31 | * @memberof PlatformFee 32 | */ 33 | feeBps?: number; 34 | } 35 | 36 | /** 37 | * Check if a given object implements the PlatformFee interface. 38 | */ 39 | export function instanceOfPlatformFee(value: object): boolean { 40 | let isInstance = true; 41 | 42 | return isInstance; 43 | } 44 | 45 | export function PlatformFeeFromJSON(json: any): PlatformFee { 46 | return PlatformFeeFromJSONTyped(json, false); 47 | } 48 | 49 | export function PlatformFeeFromJSONTyped(json: any, ignoreDiscriminator: boolean): PlatformFee { 50 | if ((json === undefined) || (json === null)) { 51 | return json; 52 | } 53 | return { 54 | 55 | 'amount': !exists(json, 'amount') ? undefined : json['amount'], 56 | 'feeBps': !exists(json, 'feeBps') ? undefined : json['feeBps'], 57 | }; 58 | } 59 | 60 | export function PlatformFeeToJSON(value?: PlatformFee | null): any { 61 | if (value === undefined) { 62 | return undefined; 63 | } 64 | if (value === null) { 65 | return null; 66 | } 67 | return { 68 | 69 | 'amount': value.amount, 70 | 'feeBps': value.feeBps, 71 | }; 72 | } 73 | 74 | -------------------------------------------------------------------------------- /generated/models/QuoteResponse.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | import type { PlatformFee } from './PlatformFee'; 17 | import { 18 | PlatformFeeFromJSON, 19 | PlatformFeeFromJSONTyped, 20 | PlatformFeeToJSON, 21 | } from './PlatformFee'; 22 | import type { RoutePlanStep } from './RoutePlanStep'; 23 | import { 24 | RoutePlanStepFromJSON, 25 | RoutePlanStepFromJSONTyped, 26 | RoutePlanStepToJSON, 27 | } from './RoutePlanStep'; 28 | import type { SwapMode } from './SwapMode'; 29 | import { 30 | SwapModeFromJSON, 31 | SwapModeFromJSONTyped, 32 | SwapModeToJSON, 33 | } from './SwapMode'; 34 | 35 | /** 36 | * 37 | * @export 38 | * @interface QuoteResponse 39 | */ 40 | export interface QuoteResponse { 41 | /** 42 | * 43 | * @type {string} 44 | * @memberof QuoteResponse 45 | */ 46 | inputMint: string; 47 | /** 48 | * 49 | * @type {string} 50 | * @memberof QuoteResponse 51 | */ 52 | inAmount: string; 53 | /** 54 | * 55 | * @type {string} 56 | * @memberof QuoteResponse 57 | */ 58 | outputMint: string; 59 | /** 60 | * - Calculated output amount from routing engine 61 | * - Exlcuding slippage or platform fees 62 | * 63 | * @type {string} 64 | * @memberof QuoteResponse 65 | */ 66 | outAmount: string; 67 | /** 68 | * - Calculated minimum output amount after accounting for `slippageBps` and `platformFeeBps` 69 | * - Not used by `/swap` endpoint to build transaction 70 | * 71 | * @type {string} 72 | * @memberof QuoteResponse 73 | */ 74 | otherAmountThreshold: string; 75 | /** 76 | * 77 | * @type {SwapMode} 78 | * @memberof QuoteResponse 79 | */ 80 | swapMode: SwapMode; 81 | /** 82 | * 83 | * @type {number} 84 | * @memberof QuoteResponse 85 | */ 86 | slippageBps: number; 87 | /** 88 | * 89 | * @type {PlatformFee} 90 | * @memberof QuoteResponse 91 | */ 92 | platformFee?: PlatformFee; 93 | /** 94 | * 95 | * @type {string} 96 | * @memberof QuoteResponse 97 | */ 98 | priceImpactPct: string; 99 | /** 100 | * 101 | * @type {Array} 102 | * @memberof QuoteResponse 103 | */ 104 | routePlan: Array; 105 | /** 106 | * 107 | * @type {number} 108 | * @memberof QuoteResponse 109 | */ 110 | contextSlot?: number; 111 | /** 112 | * 113 | * @type {number} 114 | * @memberof QuoteResponse 115 | */ 116 | timeTaken?: number; 117 | } 118 | 119 | /** 120 | * Check if a given object implements the QuoteResponse interface. 121 | */ 122 | export function instanceOfQuoteResponse(value: object): boolean { 123 | let isInstance = true; 124 | isInstance = isInstance && "inputMint" in value; 125 | isInstance = isInstance && "inAmount" in value; 126 | isInstance = isInstance && "outputMint" in value; 127 | isInstance = isInstance && "outAmount" in value; 128 | isInstance = isInstance && "otherAmountThreshold" in value; 129 | isInstance = isInstance && "swapMode" in value; 130 | isInstance = isInstance && "slippageBps" in value; 131 | isInstance = isInstance && "priceImpactPct" in value; 132 | isInstance = isInstance && "routePlan" in value; 133 | 134 | return isInstance; 135 | } 136 | 137 | export function QuoteResponseFromJSON(json: any): QuoteResponse { 138 | return QuoteResponseFromJSONTyped(json, false); 139 | } 140 | 141 | export function QuoteResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): QuoteResponse { 142 | if ((json === undefined) || (json === null)) { 143 | return json; 144 | } 145 | return { 146 | 147 | 'inputMint': json['inputMint'], 148 | 'inAmount': json['inAmount'], 149 | 'outputMint': json['outputMint'], 150 | 'outAmount': json['outAmount'], 151 | 'otherAmountThreshold': json['otherAmountThreshold'], 152 | 'swapMode': SwapModeFromJSON(json['swapMode']), 153 | 'slippageBps': json['slippageBps'], 154 | 'platformFee': !exists(json, 'platformFee') ? undefined : PlatformFeeFromJSON(json['platformFee']), 155 | 'priceImpactPct': json['priceImpactPct'], 156 | 'routePlan': ((json['routePlan'] as Array).map(RoutePlanStepFromJSON)), 157 | 'contextSlot': !exists(json, 'contextSlot') ? undefined : json['contextSlot'], 158 | 'timeTaken': !exists(json, 'timeTaken') ? undefined : json['timeTaken'], 159 | }; 160 | } 161 | 162 | export function QuoteResponseToJSON(value?: QuoteResponse | null): any { 163 | if (value === undefined) { 164 | return undefined; 165 | } 166 | if (value === null) { 167 | return null; 168 | } 169 | return { 170 | 171 | 'inputMint': value.inputMint, 172 | 'inAmount': value.inAmount, 173 | 'outputMint': value.outputMint, 174 | 'outAmount': value.outAmount, 175 | 'otherAmountThreshold': value.otherAmountThreshold, 176 | 'swapMode': SwapModeToJSON(value.swapMode), 177 | 'slippageBps': value.slippageBps, 178 | 'platformFee': PlatformFeeToJSON(value.platformFee), 179 | 'priceImpactPct': value.priceImpactPct, 180 | 'routePlan': ((value.routePlan as Array).map(RoutePlanStepToJSON)), 181 | 'contextSlot': value.contextSlot, 182 | 'timeTaken': value.timeTaken, 183 | }; 184 | } 185 | 186 | -------------------------------------------------------------------------------- /generated/models/RoutePlanStep.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | import type { SwapInfo } from './SwapInfo'; 17 | import { 18 | SwapInfoFromJSON, 19 | SwapInfoFromJSONTyped, 20 | SwapInfoToJSON, 21 | } from './SwapInfo'; 22 | 23 | /** 24 | * 25 | * @export 26 | * @interface RoutePlanStep 27 | */ 28 | export interface RoutePlanStep { 29 | /** 30 | * 31 | * @type {SwapInfo} 32 | * @memberof RoutePlanStep 33 | */ 34 | swapInfo: SwapInfo; 35 | /** 36 | * 37 | * @type {number} 38 | * @memberof RoutePlanStep 39 | */ 40 | percent: number; 41 | } 42 | 43 | /** 44 | * Check if a given object implements the RoutePlanStep interface. 45 | */ 46 | export function instanceOfRoutePlanStep(value: object): boolean { 47 | let isInstance = true; 48 | isInstance = isInstance && "swapInfo" in value; 49 | isInstance = isInstance && "percent" in value; 50 | 51 | return isInstance; 52 | } 53 | 54 | export function RoutePlanStepFromJSON(json: any): RoutePlanStep { 55 | return RoutePlanStepFromJSONTyped(json, false); 56 | } 57 | 58 | export function RoutePlanStepFromJSONTyped(json: any, ignoreDiscriminator: boolean): RoutePlanStep { 59 | if ((json === undefined) || (json === null)) { 60 | return json; 61 | } 62 | return { 63 | 64 | 'swapInfo': SwapInfoFromJSON(json['swapInfo']), 65 | 'percent': json['percent'], 66 | }; 67 | } 68 | 69 | export function RoutePlanStepToJSON(value?: RoutePlanStep | null): any { 70 | if (value === undefined) { 71 | return undefined; 72 | } 73 | if (value === null) { 74 | return null; 75 | } 76 | return { 77 | 78 | 'swapInfo': SwapInfoToJSON(value.swapInfo), 79 | 'percent': value.percent, 80 | }; 81 | } 82 | 83 | -------------------------------------------------------------------------------- /generated/models/SwapInfo.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | /** 17 | * 18 | * @export 19 | * @interface SwapInfo 20 | */ 21 | export interface SwapInfo { 22 | /** 23 | * 24 | * @type {string} 25 | * @memberof SwapInfo 26 | */ 27 | ammKey: string; 28 | /** 29 | * 30 | * @type {string} 31 | * @memberof SwapInfo 32 | */ 33 | label?: string; 34 | /** 35 | * 36 | * @type {string} 37 | * @memberof SwapInfo 38 | */ 39 | inputMint: string; 40 | /** 41 | * 42 | * @type {string} 43 | * @memberof SwapInfo 44 | */ 45 | outputMint: string; 46 | /** 47 | * 48 | * @type {string} 49 | * @memberof SwapInfo 50 | */ 51 | inAmount: string; 52 | /** 53 | * 54 | * @type {string} 55 | * @memberof SwapInfo 56 | */ 57 | outAmount: string; 58 | /** 59 | * 60 | * @type {string} 61 | * @memberof SwapInfo 62 | */ 63 | feeAmount: string; 64 | /** 65 | * 66 | * @type {string} 67 | * @memberof SwapInfo 68 | */ 69 | feeMint: string; 70 | } 71 | 72 | /** 73 | * Check if a given object implements the SwapInfo interface. 74 | */ 75 | export function instanceOfSwapInfo(value: object): boolean { 76 | let isInstance = true; 77 | isInstance = isInstance && "ammKey" in value; 78 | isInstance = isInstance && "inputMint" in value; 79 | isInstance = isInstance && "outputMint" in value; 80 | isInstance = isInstance && "inAmount" in value; 81 | isInstance = isInstance && "outAmount" in value; 82 | isInstance = isInstance && "feeAmount" in value; 83 | isInstance = isInstance && "feeMint" in value; 84 | 85 | return isInstance; 86 | } 87 | 88 | export function SwapInfoFromJSON(json: any): SwapInfo { 89 | return SwapInfoFromJSONTyped(json, false); 90 | } 91 | 92 | export function SwapInfoFromJSONTyped(json: any, ignoreDiscriminator: boolean): SwapInfo { 93 | if ((json === undefined) || (json === null)) { 94 | return json; 95 | } 96 | return { 97 | 98 | 'ammKey': json['ammKey'], 99 | 'label': !exists(json, 'label') ? undefined : json['label'], 100 | 'inputMint': json['inputMint'], 101 | 'outputMint': json['outputMint'], 102 | 'inAmount': json['inAmount'], 103 | 'outAmount': json['outAmount'], 104 | 'feeAmount': json['feeAmount'], 105 | 'feeMint': json['feeMint'], 106 | }; 107 | } 108 | 109 | export function SwapInfoToJSON(value?: SwapInfo | null): any { 110 | if (value === undefined) { 111 | return undefined; 112 | } 113 | if (value === null) { 114 | return null; 115 | } 116 | return { 117 | 118 | 'ammKey': value.ammKey, 119 | 'label': value.label, 120 | 'inputMint': value.inputMint, 121 | 'outputMint': value.outputMint, 122 | 'inAmount': value.inAmount, 123 | 'outAmount': value.outAmount, 124 | 'feeAmount': value.feeAmount, 125 | 'feeMint': value.feeMint, 126 | }; 127 | } 128 | 129 | -------------------------------------------------------------------------------- /generated/models/SwapInstructionsResponse.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | import type { Instruction } from './Instruction'; 17 | import { 18 | InstructionFromJSON, 19 | InstructionFromJSONTyped, 20 | InstructionToJSON, 21 | } from './Instruction'; 22 | 23 | /** 24 | * 25 | * @export 26 | * @interface SwapInstructionsResponse 27 | */ 28 | export interface SwapInstructionsResponse { 29 | /** 30 | * - If you set `{\"prioritizationFeeLamports\": {\"jitoTipLamports\": 5000}}`, you will see a custom tip instruction to Jito here. 31 | * 32 | * @type {Array} 33 | * @memberof SwapInstructionsResponse 34 | */ 35 | otherInstructions?: Array; 36 | /** 37 | * - To setup the compute budget for the transaction. 38 | * 39 | * @type {Array} 40 | * @memberof SwapInstructionsResponse 41 | */ 42 | computeBudgetInstructions: Array; 43 | /** 44 | * - To setup required token accounts for the users. 45 | * 46 | * @type {Array} 47 | * @memberof SwapInstructionsResponse 48 | */ 49 | setupInstructions: Array; 50 | /** 51 | * 52 | * @type {Instruction} 53 | * @memberof SwapInstructionsResponse 54 | */ 55 | swapInstruction: Instruction; 56 | /** 57 | * 58 | * @type {Instruction} 59 | * @memberof SwapInstructionsResponse 60 | */ 61 | cleanupInstruction?: Instruction; 62 | /** 63 | * - The lookup table addresses if you are using versioned transaction. 64 | * 65 | * @type {Array} 66 | * @memberof SwapInstructionsResponse 67 | */ 68 | addressLookupTableAddresses: Array; 69 | } 70 | 71 | /** 72 | * Check if a given object implements the SwapInstructionsResponse interface. 73 | */ 74 | export function instanceOfSwapInstructionsResponse(value: object): boolean { 75 | let isInstance = true; 76 | isInstance = isInstance && "computeBudgetInstructions" in value; 77 | isInstance = isInstance && "setupInstructions" in value; 78 | isInstance = isInstance && "swapInstruction" in value; 79 | isInstance = isInstance && "addressLookupTableAddresses" in value; 80 | 81 | return isInstance; 82 | } 83 | 84 | export function SwapInstructionsResponseFromJSON(json: any): SwapInstructionsResponse { 85 | return SwapInstructionsResponseFromJSONTyped(json, false); 86 | } 87 | 88 | export function SwapInstructionsResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): SwapInstructionsResponse { 89 | if ((json === undefined) || (json === null)) { 90 | return json; 91 | } 92 | return { 93 | 94 | 'otherInstructions': !exists(json, 'otherInstructions') ? undefined : ((json['otherInstructions'] as Array).map(InstructionFromJSON)), 95 | 'computeBudgetInstructions': ((json['computeBudgetInstructions'] as Array).map(InstructionFromJSON)), 96 | 'setupInstructions': ((json['setupInstructions'] as Array).map(InstructionFromJSON)), 97 | 'swapInstruction': InstructionFromJSON(json['swapInstruction']), 98 | 'cleanupInstruction': !exists(json, 'cleanupInstruction') ? undefined : InstructionFromJSON(json['cleanupInstruction']), 99 | 'addressLookupTableAddresses': json['addressLookupTableAddresses'], 100 | }; 101 | } 102 | 103 | export function SwapInstructionsResponseToJSON(value?: SwapInstructionsResponse | null): any { 104 | if (value === undefined) { 105 | return undefined; 106 | } 107 | if (value === null) { 108 | return null; 109 | } 110 | return { 111 | 112 | 'otherInstructions': value.otherInstructions === undefined ? undefined : ((value.otherInstructions as Array).map(InstructionToJSON)), 113 | 'computeBudgetInstructions': ((value.computeBudgetInstructions as Array).map(InstructionToJSON)), 114 | 'setupInstructions': ((value.setupInstructions as Array).map(InstructionToJSON)), 115 | 'swapInstruction': InstructionToJSON(value.swapInstruction), 116 | 'cleanupInstruction': InstructionToJSON(value.cleanupInstruction), 117 | 'addressLookupTableAddresses': value.addressLookupTableAddresses, 118 | }; 119 | } 120 | 121 | -------------------------------------------------------------------------------- /generated/models/SwapMode.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | 16 | /** 17 | * 18 | * @export 19 | */ 20 | export const SwapMode = { 21 | ExactIn: 'ExactIn', 22 | ExactOut: 'ExactOut' 23 | } as const; 24 | export type SwapMode = typeof SwapMode[keyof typeof SwapMode]; 25 | 26 | 27 | export function SwapModeFromJSON(json: any): SwapMode { 28 | return SwapModeFromJSONTyped(json, false); 29 | } 30 | 31 | export function SwapModeFromJSONTyped(json: any, ignoreDiscriminator: boolean): SwapMode { 32 | return json as SwapMode; 33 | } 34 | 35 | export function SwapModeToJSON(value?: SwapMode | null): any { 36 | return value as any; 37 | } 38 | 39 | -------------------------------------------------------------------------------- /generated/models/SwapRequest.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | import type { QuoteResponse } from './QuoteResponse'; 17 | import { 18 | QuoteResponseFromJSON, 19 | QuoteResponseFromJSONTyped, 20 | QuoteResponseToJSON, 21 | } from './QuoteResponse'; 22 | import type { SwapRequestPrioritizationFeeLamports } from './SwapRequestPrioritizationFeeLamports'; 23 | import { 24 | SwapRequestPrioritizationFeeLamportsFromJSON, 25 | SwapRequestPrioritizationFeeLamportsFromJSONTyped, 26 | SwapRequestPrioritizationFeeLamportsToJSON, 27 | } from './SwapRequestPrioritizationFeeLamports'; 28 | 29 | /** 30 | * 31 | * @export 32 | * @interface SwapRequest 33 | */ 34 | export interface SwapRequest { 35 | /** 36 | * 37 | * @type {string} 38 | * @memberof SwapRequest 39 | */ 40 | userPublicKey: string; 41 | /** 42 | * - To automatically wrap/unwrap SOL in the transaction 43 | * - If false, it will use wSOL token account 44 | * - Parameter will be ignored if `destinationTokenAccount` is set because the `destinationTokenAccount` may belong to a different user that we have no authority to close 45 | * 46 | * @type {boolean} 47 | * @memberof SwapRequest 48 | */ 49 | wrapAndUnwrapSol?: boolean; 50 | /** 51 | * - The default is determined dynamically by the routing engine, allowing us to optimize for compute units, etc 52 | * - This enables the usage of shared program accounts, this is essential as complex routing will require multiple intermediate token accounts which the user might not have 53 | * - If true, you do not need to handle the creation of intermediate token accounts for the user 54 | * - Do note, shared accounts route will fail on some new AMMs (low liquidity token) 55 | * 56 | * @type {boolean} 57 | * @memberof SwapRequest 58 | */ 59 | useSharedAccounts?: boolean; 60 | /** 61 | * - An token account that will be used to collect fees 62 | * - The mint of the token account **can only be either the input or output mint of the swap** 63 | * - You no longer are required to use the Referral Program 64 | * - See [Add Fees](/docs/swap-api/add-fees-to-swap) guide for more details 65 | * 66 | * @type {string} 67 | * @memberof SwapRequest 68 | */ 69 | feeAccount?: string; 70 | /** 71 | * - Specify any public key that belongs to you to track the transactions 72 | * - Useful for integrators to get all the swap transactions from this public key 73 | * - Query the data using a block explorer like Solscan/SolanaFM or query like Dune/Flipside 74 | * 75 | * @type {string} 76 | * @memberof SwapRequest 77 | */ 78 | trackingAccount?: string; 79 | /** 80 | * 81 | * @type {SwapRequestPrioritizationFeeLamports} 82 | * @memberof SwapRequest 83 | */ 84 | prioritizationFeeLamports?: SwapRequestPrioritizationFeeLamports; 85 | /** 86 | * - Builds a legacy transaction rather than the default versioned transaction 87 | * - Used together with `asLegacyTransaction` in `/quote`, otherwise the transaction might be too large 88 | * 89 | * @type {boolean} 90 | * @memberof SwapRequest 91 | */ 92 | asLegacyTransaction?: boolean; 93 | /** 94 | * - Public key of a token account that will be used to receive the token out of the swap 95 | * - If not provided, the signer's token account will be used 96 | * - If provided, we assume that the token account is already initialized 97 | * 98 | * @type {string} 99 | * @memberof SwapRequest 100 | */ 101 | destinationTokenAccount?: string; 102 | /** 103 | * - When enabled, it will do a swap simulation to get the compute unit used and set it in ComputeBudget's compute unit limit 104 | * - This incurs one extra RPC call to simulate this 105 | * - We recommend to enable this to estimate compute unit correctly and reduce priority fees needed or have higher chance to be included in a block 106 | * 107 | * @type {boolean} 108 | * @memberof SwapRequest 109 | */ 110 | dynamicComputeUnitLimit?: boolean; 111 | /** 112 | * - When enabled, it will not do any additional RPC calls to check on required accounts 113 | * - Enable it only when you already setup all the accounts needed for the trasaction, like wrapping or unwrapping sol, or destination account is already created 114 | * 115 | * @type {boolean} 116 | * @memberof SwapRequest 117 | */ 118 | skipUserAccountsRpcCalls?: boolean; 119 | /** 120 | * - When enabled, it estimates slippage and apply it in the swap transaction directly, overwriting the `slippageBps` parameter in the quote response. 121 | * - Used together with `dynamicSlippage` in `/quote`, otherwise the slippage used will be the one in the `/quote`'s `slippageBps` 122 | * - [See notes for more information](/docs/swap-api/send-swap-transaction#how-jupiter-estimates-slippage) 123 | * 124 | * @type {boolean} 125 | * @memberof SwapRequest 126 | */ 127 | dynamicSlippage?: boolean; 128 | /** 129 | * - To use an exact compute unit price to calculate priority fee 130 | * - `computeUnitLimit (1400000) * computeUnitPriceMicroLamports` 131 | * - We recommend using `prioritizationFeeLamports` and `dynamicComputeUnitLimit` instead of passing in your own compute unit price 132 | * 133 | * @type {number} 134 | * @memberof SwapRequest 135 | */ 136 | computeUnitPriceMicroLamports?: number; 137 | /** 138 | * - Pass in the number of slots we want the transaction to be valid for 139 | * - Example: If you pass in 10 slots, the transaction will be valid for ~400ms * 10 = approximately 4 seconds before it expires 140 | * 141 | * @type {number} 142 | * @memberof SwapRequest 143 | */ 144 | blockhashSlotsToExpiry?: number; 145 | /** 146 | * 147 | * @type {QuoteResponse} 148 | * @memberof SwapRequest 149 | */ 150 | quoteResponse: QuoteResponse; 151 | } 152 | 153 | /** 154 | * Check if a given object implements the SwapRequest interface. 155 | */ 156 | export function instanceOfSwapRequest(value: object): boolean { 157 | let isInstance = true; 158 | isInstance = isInstance && "userPublicKey" in value; 159 | isInstance = isInstance && "quoteResponse" in value; 160 | 161 | return isInstance; 162 | } 163 | 164 | export function SwapRequestFromJSON(json: any): SwapRequest { 165 | return SwapRequestFromJSONTyped(json, false); 166 | } 167 | 168 | export function SwapRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): SwapRequest { 169 | if ((json === undefined) || (json === null)) { 170 | return json; 171 | } 172 | return { 173 | 174 | 'userPublicKey': json['userPublicKey'], 175 | 'wrapAndUnwrapSol': !exists(json, 'wrapAndUnwrapSol') ? undefined : json['wrapAndUnwrapSol'], 176 | 'useSharedAccounts': !exists(json, 'useSharedAccounts') ? undefined : json['useSharedAccounts'], 177 | 'feeAccount': !exists(json, 'feeAccount') ? undefined : json['feeAccount'], 178 | 'trackingAccount': !exists(json, 'trackingAccount') ? undefined : json['trackingAccount'], 179 | 'prioritizationFeeLamports': !exists(json, 'prioritizationFeeLamports') ? undefined : SwapRequestPrioritizationFeeLamportsFromJSON(json['prioritizationFeeLamports']), 180 | 'asLegacyTransaction': !exists(json, 'asLegacyTransaction') ? undefined : json['asLegacyTransaction'], 181 | 'destinationTokenAccount': !exists(json, 'destinationTokenAccount') ? undefined : json['destinationTokenAccount'], 182 | 'dynamicComputeUnitLimit': !exists(json, 'dynamicComputeUnitLimit') ? undefined : json['dynamicComputeUnitLimit'], 183 | 'skipUserAccountsRpcCalls': !exists(json, 'skipUserAccountsRpcCalls') ? undefined : json['skipUserAccountsRpcCalls'], 184 | 'dynamicSlippage': !exists(json, 'dynamicSlippage') ? undefined : json['dynamicSlippage'], 185 | 'computeUnitPriceMicroLamports': !exists(json, 'computeUnitPriceMicroLamports') ? undefined : json['computeUnitPriceMicroLamports'], 186 | 'blockhashSlotsToExpiry': !exists(json, 'blockhashSlotsToExpiry') ? undefined : json['blockhashSlotsToExpiry'], 187 | 'quoteResponse': QuoteResponseFromJSON(json['quoteResponse']), 188 | }; 189 | } 190 | 191 | export function SwapRequestToJSON(value?: SwapRequest | null): any { 192 | if (value === undefined) { 193 | return undefined; 194 | } 195 | if (value === null) { 196 | return null; 197 | } 198 | return { 199 | 200 | 'userPublicKey': value.userPublicKey, 201 | 'wrapAndUnwrapSol': value.wrapAndUnwrapSol, 202 | 'useSharedAccounts': value.useSharedAccounts, 203 | 'feeAccount': value.feeAccount, 204 | 'trackingAccount': value.trackingAccount, 205 | 'prioritizationFeeLamports': SwapRequestPrioritizationFeeLamportsToJSON(value.prioritizationFeeLamports), 206 | 'asLegacyTransaction': value.asLegacyTransaction, 207 | 'destinationTokenAccount': value.destinationTokenAccount, 208 | 'dynamicComputeUnitLimit': value.dynamicComputeUnitLimit, 209 | 'skipUserAccountsRpcCalls': value.skipUserAccountsRpcCalls, 210 | 'dynamicSlippage': value.dynamicSlippage, 211 | 'computeUnitPriceMicroLamports': value.computeUnitPriceMicroLamports, 212 | 'blockhashSlotsToExpiry': value.blockhashSlotsToExpiry, 213 | 'quoteResponse': QuoteResponseToJSON(value.quoteResponse), 214 | }; 215 | } 216 | 217 | -------------------------------------------------------------------------------- /generated/models/SwapRequestPrioritizationFeeLamports.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | import type { SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports } from './SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports'; 17 | import { 18 | SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsFromJSON, 19 | SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsFromJSONTyped, 20 | SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsToJSON, 21 | } from './SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports'; 22 | 23 | /** 24 | * - To specify a level or amount of additional fees to prioritize the transaction 25 | * - It can be used for EITHER priority fee OR Jito tip (not both at the same time) 26 | * - If you want to include both, you will need to use `/swap-instructions` to add both at the same time 27 | * 28 | * @export 29 | * @interface SwapRequestPrioritizationFeeLamports 30 | */ 31 | export interface SwapRequestPrioritizationFeeLamports { 32 | /** 33 | * 34 | * @type {SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports} 35 | * @memberof SwapRequestPrioritizationFeeLamports 36 | */ 37 | priorityLevelWithMaxLamports?: SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports; 38 | /** 39 | * - Exact amount of tip to use in a tip instruction 40 | * - Refer to Jito docs on how to estimate the tip amount based on percentiles 41 | * - It has to be used together with a connection to a Jito RPC 42 | * - [See their docs](https://docs.jito.wtf/) 43 | * 44 | * @type {number} 45 | * @memberof SwapRequestPrioritizationFeeLamports 46 | */ 47 | jitoTipLamports?: number; 48 | } 49 | 50 | /** 51 | * Check if a given object implements the SwapRequestPrioritizationFeeLamports interface. 52 | */ 53 | export function instanceOfSwapRequestPrioritizationFeeLamports(value: object): boolean { 54 | let isInstance = true; 55 | 56 | return isInstance; 57 | } 58 | 59 | export function SwapRequestPrioritizationFeeLamportsFromJSON(json: any): SwapRequestPrioritizationFeeLamports { 60 | return SwapRequestPrioritizationFeeLamportsFromJSONTyped(json, false); 61 | } 62 | 63 | export function SwapRequestPrioritizationFeeLamportsFromJSONTyped(json: any, ignoreDiscriminator: boolean): SwapRequestPrioritizationFeeLamports { 64 | if ((json === undefined) || (json === null)) { 65 | return json; 66 | } 67 | return { 68 | 69 | 'priorityLevelWithMaxLamports': !exists(json, 'priorityLevelWithMaxLamports') ? undefined : SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsFromJSON(json['priorityLevelWithMaxLamports']), 70 | 'jitoTipLamports': !exists(json, 'jitoTipLamports') ? undefined : json['jitoTipLamports'], 71 | }; 72 | } 73 | 74 | export function SwapRequestPrioritizationFeeLamportsToJSON(value?: SwapRequestPrioritizationFeeLamports | null): any { 75 | if (value === undefined) { 76 | return undefined; 77 | } 78 | if (value === null) { 79 | return null; 80 | } 81 | return { 82 | 83 | 'priorityLevelWithMaxLamports': SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsToJSON(value.priorityLevelWithMaxLamports), 84 | 'jitoTipLamports': value.jitoTipLamports, 85 | }; 86 | } 87 | 88 | -------------------------------------------------------------------------------- /generated/models/SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | /** 17 | * 18 | * @export 19 | * @interface SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports 20 | */ 21 | export interface SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports { 22 | /** 23 | * 24 | * @type {string} 25 | * @memberof SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports 26 | */ 27 | priorityLevel?: SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsPriorityLevelEnum; 28 | /** 29 | * - Maximum lamports to cap the priority fee estimation, to prevent overpaying 30 | * 31 | * @type {number} 32 | * @memberof SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports 33 | */ 34 | maxLamports?: number; 35 | } 36 | 37 | 38 | /** 39 | * @export 40 | */ 41 | export const SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsPriorityLevelEnum = { 42 | Medium: 'medium', 43 | High: 'high', 44 | VeryHigh: 'veryHigh' 45 | } as const; 46 | export type SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsPriorityLevelEnum = typeof SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsPriorityLevelEnum[keyof typeof SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsPriorityLevelEnum]; 47 | 48 | 49 | /** 50 | * Check if a given object implements the SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports interface. 51 | */ 52 | export function instanceOfSwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports(value: object): boolean { 53 | let isInstance = true; 54 | 55 | return isInstance; 56 | } 57 | 58 | export function SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsFromJSON(json: any): SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports { 59 | return SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsFromJSONTyped(json, false); 60 | } 61 | 62 | export function SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsFromJSONTyped(json: any, ignoreDiscriminator: boolean): SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports { 63 | if ((json === undefined) || (json === null)) { 64 | return json; 65 | } 66 | return { 67 | 68 | 'priorityLevel': !exists(json, 'priorityLevel') ? undefined : json['priorityLevel'], 69 | 'maxLamports': !exists(json, 'maxLamports') ? undefined : json['maxLamports'], 70 | }; 71 | } 72 | 73 | export function SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamportsToJSON(value?: SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports | null): any { 74 | if (value === undefined) { 75 | return undefined; 76 | } 77 | if (value === null) { 78 | return null; 79 | } 80 | return { 81 | 82 | 'priorityLevel': value.priorityLevel, 83 | 'maxLamports': value.maxLamports, 84 | }; 85 | } 86 | 87 | -------------------------------------------------------------------------------- /generated/models/SwapResponse.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | import { exists, mapValues } from '../runtime'; 16 | /** 17 | * 18 | * @export 19 | * @interface SwapResponse 20 | */ 21 | export interface SwapResponse { 22 | /** 23 | * 24 | * @type {string} 25 | * @memberof SwapResponse 26 | */ 27 | swapTransaction: string; 28 | /** 29 | * 30 | * @type {number} 31 | * @memberof SwapResponse 32 | */ 33 | lastValidBlockHeight: number; 34 | /** 35 | * 36 | * @type {number} 37 | * @memberof SwapResponse 38 | */ 39 | prioritizationFeeLamports?: number; 40 | } 41 | 42 | /** 43 | * Check if a given object implements the SwapResponse interface. 44 | */ 45 | export function instanceOfSwapResponse(value: object): boolean { 46 | let isInstance = true; 47 | isInstance = isInstance && "swapTransaction" in value; 48 | isInstance = isInstance && "lastValidBlockHeight" in value; 49 | 50 | return isInstance; 51 | } 52 | 53 | export function SwapResponseFromJSON(json: any): SwapResponse { 54 | return SwapResponseFromJSONTyped(json, false); 55 | } 56 | 57 | export function SwapResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): SwapResponse { 58 | if ((json === undefined) || (json === null)) { 59 | return json; 60 | } 61 | return { 62 | 63 | 'swapTransaction': json['swapTransaction'], 64 | 'lastValidBlockHeight': json['lastValidBlockHeight'], 65 | 'prioritizationFeeLamports': !exists(json, 'prioritizationFeeLamports') ? undefined : json['prioritizationFeeLamports'], 66 | }; 67 | } 68 | 69 | export function SwapResponseToJSON(value?: SwapResponse | null): any { 70 | if (value === undefined) { 71 | return undefined; 72 | } 73 | if (value === null) { 74 | return null; 75 | } 76 | return { 77 | 78 | 'swapTransaction': value.swapTransaction, 79 | 'lastValidBlockHeight': value.lastValidBlockHeight, 80 | 'prioritizationFeeLamports': value.prioritizationFeeLamports, 81 | }; 82 | } 83 | 84 | -------------------------------------------------------------------------------- /generated/models/index.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | export * from './AccountMeta'; 4 | export * from './IndexedRouteMapResponse'; 5 | export * from './Instruction'; 6 | export * from './PlatformFee'; 7 | export * from './QuoteResponse'; 8 | export * from './RoutePlanStep'; 9 | export * from './SwapInfo'; 10 | export * from './SwapInstructionsResponse'; 11 | export * from './SwapMode'; 12 | export * from './SwapRequest'; 13 | export * from './SwapRequestPrioritizationFeeLamports'; 14 | export * from './SwapRequestPrioritizationFeeLamportsPriorityLevelWithMaxLamports'; 15 | export * from './SwapResponse'; 16 | -------------------------------------------------------------------------------- /generated/runtime.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * Swap API 5 | * The heart and soul of Jupiter lies in the Quote and Swap API. ### API Rate Limit Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. ### API Usage - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) ### Data Types To Note - Public keys are base58 encoded strings - Raw data such as Vec are base64 encoded strings 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | 16 | export const BASE_PATH = "https://lite-api.jup.ag/swap/v1".replace(/\/+$/, ""); 17 | 18 | export interface ConfigurationParameters { 19 | basePath?: string; // override base path 20 | fetchApi?: FetchAPI; // override for fetch implementation 21 | middleware?: Middleware[]; // middleware to apply before/after fetch requests 22 | queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings 23 | username?: string; // parameter for basic security 24 | password?: string; // parameter for basic security 25 | apiKey?: string | Promise | ((name: string) => string | Promise); // parameter for apiKey security 26 | accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string | Promise); // parameter for oauth2 security 27 | headers?: HTTPHeaders; //header params we want to use on every request 28 | credentials?: RequestCredentials; //value for the credentials param we want to use on each request 29 | } 30 | 31 | export class Configuration { 32 | constructor(private configuration: ConfigurationParameters = {}) {} 33 | 34 | set config(configuration: Configuration) { 35 | this.configuration = configuration; 36 | } 37 | 38 | get basePath(): string { 39 | return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH; 40 | } 41 | 42 | get fetchApi(): FetchAPI | undefined { 43 | return this.configuration.fetchApi; 44 | } 45 | 46 | get middleware(): Middleware[] { 47 | return this.configuration.middleware || []; 48 | } 49 | 50 | get queryParamsStringify(): (params: HTTPQuery) => string { 51 | return this.configuration.queryParamsStringify || querystring; 52 | } 53 | 54 | get username(): string | undefined { 55 | return this.configuration.username; 56 | } 57 | 58 | get password(): string | undefined { 59 | return this.configuration.password; 60 | } 61 | 62 | get apiKey(): ((name: string) => string | Promise) | undefined { 63 | const apiKey = this.configuration.apiKey; 64 | if (apiKey) { 65 | return typeof apiKey === 'function' ? apiKey : () => apiKey; 66 | } 67 | return undefined; 68 | } 69 | 70 | get accessToken(): ((name?: string, scopes?: string[]) => string | Promise) | undefined { 71 | const accessToken = this.configuration.accessToken; 72 | if (accessToken) { 73 | return typeof accessToken === 'function' ? accessToken : async () => accessToken; 74 | } 75 | return undefined; 76 | } 77 | 78 | get headers(): HTTPHeaders | undefined { 79 | return this.configuration.headers; 80 | } 81 | 82 | get credentials(): RequestCredentials | undefined { 83 | return this.configuration.credentials; 84 | } 85 | } 86 | 87 | export const DefaultConfig = new Configuration(); 88 | 89 | /** 90 | * This is the base class for all generated API classes. 91 | */ 92 | export class BaseAPI { 93 | 94 | private static readonly jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i'); 95 | private middleware: Middleware[]; 96 | 97 | constructor(protected configuration = DefaultConfig) { 98 | this.middleware = configuration.middleware; 99 | } 100 | 101 | withMiddleware(this: T, ...middlewares: Middleware[]) { 102 | const next = this.clone(); 103 | next.middleware = next.middleware.concat(...middlewares); 104 | return next; 105 | } 106 | 107 | withPreMiddleware(this: T, ...preMiddlewares: Array) { 108 | const middlewares = preMiddlewares.map((pre) => ({ pre })); 109 | return this.withMiddleware(...middlewares); 110 | } 111 | 112 | withPostMiddleware(this: T, ...postMiddlewares: Array) { 113 | const middlewares = postMiddlewares.map((post) => ({ post })); 114 | return this.withMiddleware(...middlewares); 115 | } 116 | 117 | /** 118 | * Check if the given MIME is a JSON MIME. 119 | * JSON MIME examples: 120 | * application/json 121 | * application/json; charset=UTF8 122 | * APPLICATION/JSON 123 | * application/vnd.company+json 124 | * @param mime - MIME (Multipurpose Internet Mail Extensions) 125 | * @return True if the given MIME is JSON, false otherwise. 126 | */ 127 | protected isJsonMime(mime: string | null | undefined): boolean { 128 | if (!mime) { 129 | return false; 130 | } 131 | return BaseAPI.jsonRegex.test(mime); 132 | } 133 | 134 | protected async request(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction): Promise { 135 | const { url, init } = await this.createFetchParams(context, initOverrides); 136 | const response = await this.fetchApi(url, init); 137 | if (response && (response.status >= 200 && response.status < 300)) { 138 | return response; 139 | } 140 | throw new ResponseError(response, 'Response returned an error code'); 141 | } 142 | 143 | private async createFetchParams(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction) { 144 | let url = this.configuration.basePath + context.path; 145 | if (context.query !== undefined && Object.keys(context.query).length !== 0) { 146 | // only add the querystring to the URL if there are query parameters. 147 | // this is done to avoid urls ending with a "?" character which buggy webservers 148 | // do not handle correctly sometimes. 149 | url += '?' + this.configuration.queryParamsStringify(context.query); 150 | } 151 | 152 | const headers = Object.assign({}, this.configuration.headers, context.headers); 153 | Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {}); 154 | 155 | const initOverrideFn = 156 | typeof initOverrides === "function" 157 | ? initOverrides 158 | : async () => initOverrides; 159 | 160 | const initParams = { 161 | method: context.method, 162 | headers, 163 | body: context.body, 164 | credentials: this.configuration.credentials, 165 | }; 166 | 167 | const overriddenInit: RequestInit = { 168 | ...initParams, 169 | ...(await initOverrideFn({ 170 | init: initParams, 171 | context, 172 | })) 173 | }; 174 | 175 | let body: any; 176 | if (isFormData(overriddenInit.body) 177 | || (overriddenInit.body instanceof URLSearchParams) 178 | || isBlob(overriddenInit.body)) { 179 | body = overriddenInit.body; 180 | } else if (this.isJsonMime(headers['Content-Type'])) { 181 | body = JSON.stringify(overriddenInit.body); 182 | } else { 183 | body = overriddenInit.body; 184 | } 185 | 186 | const init: RequestInit = { 187 | ...overriddenInit, 188 | body 189 | }; 190 | 191 | return { url, init }; 192 | } 193 | 194 | private fetchApi = async (url: string, init: RequestInit) => { 195 | let fetchParams = { url, init }; 196 | for (const middleware of this.middleware) { 197 | if (middleware.pre) { 198 | fetchParams = await middleware.pre({ 199 | fetch: this.fetchApi, 200 | ...fetchParams, 201 | }) || fetchParams; 202 | } 203 | } 204 | let response: Response | undefined = undefined; 205 | try { 206 | response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init); 207 | } catch (e) { 208 | for (const middleware of this.middleware) { 209 | if (middleware.onError) { 210 | response = await middleware.onError({ 211 | fetch: this.fetchApi, 212 | url: fetchParams.url, 213 | init: fetchParams.init, 214 | error: e, 215 | response: response ? response.clone() : undefined, 216 | }) || response; 217 | } 218 | } 219 | if (response === undefined) { 220 | if (e instanceof Error) { 221 | throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response'); 222 | } else { 223 | throw e; 224 | } 225 | } 226 | } 227 | for (const middleware of this.middleware) { 228 | if (middleware.post) { 229 | response = await middleware.post({ 230 | fetch: this.fetchApi, 231 | url: fetchParams.url, 232 | init: fetchParams.init, 233 | response: response.clone(), 234 | }) || response; 235 | } 236 | } 237 | return response; 238 | } 239 | 240 | /** 241 | * Create a shallow clone of `this` by constructing a new instance 242 | * and then shallow cloning data members. 243 | */ 244 | private clone(this: T): T { 245 | const constructor = this.constructor as any; 246 | const next = new constructor(this.configuration); 247 | next.middleware = this.middleware.slice(); 248 | return next; 249 | } 250 | }; 251 | 252 | function isBlob(value: any): value is Blob { 253 | return typeof Blob !== 'undefined' && value instanceof Blob; 254 | } 255 | 256 | function isFormData(value: any): value is FormData { 257 | return typeof FormData !== "undefined" && value instanceof FormData; 258 | } 259 | 260 | export class ResponseError extends Error { 261 | override name: "ResponseError" = "ResponseError"; 262 | constructor(public response: Response, msg?: string) { 263 | super(msg); 264 | } 265 | } 266 | 267 | export class FetchError extends Error { 268 | override name: "FetchError" = "FetchError"; 269 | constructor(public cause: Error, msg?: string) { 270 | super(msg); 271 | } 272 | } 273 | 274 | export class RequiredError extends Error { 275 | override name: "RequiredError" = "RequiredError"; 276 | constructor(public field: string, msg?: string) { 277 | super(msg); 278 | } 279 | } 280 | 281 | export const COLLECTION_FORMATS = { 282 | csv: ",", 283 | ssv: " ", 284 | tsv: "\t", 285 | pipes: "|", 286 | }; 287 | 288 | export type FetchAPI = WindowOrWorkerGlobalScope['fetch']; 289 | 290 | export type Json = any; 291 | export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD'; 292 | export type HTTPHeaders = { [key: string]: string }; 293 | export type HTTPQuery = { [key: string]: string | number | null | boolean | Array | Set | HTTPQuery }; 294 | export type HTTPBody = Json | FormData | URLSearchParams; 295 | export type HTTPRequestInit = { headers?: HTTPHeaders; method: HTTPMethod; credentials?: RequestCredentials; body?: HTTPBody }; 296 | export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; 297 | 298 | export type InitOverrideFunction = (requestContext: { init: HTTPRequestInit, context: RequestOpts }) => Promise 299 | 300 | export interface FetchParams { 301 | url: string; 302 | init: RequestInit; 303 | } 304 | 305 | export interface RequestOpts { 306 | path: string; 307 | method: HTTPMethod; 308 | headers: HTTPHeaders; 309 | query?: HTTPQuery; 310 | body?: HTTPBody; 311 | } 312 | 313 | export function exists(json: any, key: string) { 314 | const value = json[key]; 315 | return value !== null && value !== undefined; 316 | } 317 | 318 | export function querystring(params: HTTPQuery, prefix: string = ''): string { 319 | return Object.keys(params) 320 | .map(key => querystringSingleKey(key, params[key], prefix)) 321 | .filter(part => part.length > 0) 322 | .join('&'); 323 | } 324 | 325 | function querystringSingleKey(key: string, value: string | number | null | undefined | boolean | Array | Set | HTTPQuery, keyPrefix: string = ''): string { 326 | const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key); 327 | if (value instanceof Array) { 328 | const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue))) 329 | .join(`&${encodeURIComponent(fullKey)}=`); 330 | return `${encodeURIComponent(fullKey)}=${multiValue}`; 331 | } 332 | if (value instanceof Set) { 333 | const valueAsArray = Array.from(value); 334 | return querystringSingleKey(key, valueAsArray, keyPrefix); 335 | } 336 | if (value instanceof Date) { 337 | return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`; 338 | } 339 | if (value instanceof Object) { 340 | return querystring(value as HTTPQuery, fullKey); 341 | } 342 | return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`; 343 | } 344 | 345 | export function mapValues(data: any, fn: (item: any) => any) { 346 | return Object.keys(data).reduce( 347 | (acc, key) => ({ ...acc, [key]: fn(data[key]) }), 348 | {} 349 | ); 350 | } 351 | 352 | export function canConsumeForm(consumes: Consume[]): boolean { 353 | for (const consume of consumes) { 354 | if ('multipart/form-data' === consume.contentType) { 355 | return true; 356 | } 357 | } 358 | return false; 359 | } 360 | 361 | export interface Consume { 362 | contentType: string; 363 | } 364 | 365 | export interface RequestContext { 366 | fetch: FetchAPI; 367 | url: string; 368 | init: RequestInit; 369 | } 370 | 371 | export interface ResponseContext { 372 | fetch: FetchAPI; 373 | url: string; 374 | init: RequestInit; 375 | response: Response; 376 | } 377 | 378 | export interface ErrorContext { 379 | fetch: FetchAPI; 380 | url: string; 381 | init: RequestInit; 382 | error: unknown; 383 | response?: Response; 384 | } 385 | 386 | export interface Middleware { 387 | pre?(context: RequestContext): Promise; 388 | post?(context: ResponseContext): Promise; 389 | onError?(context: ErrorContext): Promise; 390 | } 391 | 392 | export interface ApiResponse { 393 | raw: Response; 394 | value(): Promise; 395 | } 396 | 397 | export interface ResponseTransformer { 398 | (json: any): T; 399 | } 400 | 401 | export class JSONApiResponse { 402 | constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {} 403 | 404 | async value(): Promise { 405 | return this.transformer(await this.raw.json()); 406 | } 407 | } 408 | 409 | export class VoidApiResponse { 410 | constructor(public raw: Response) {} 411 | 412 | async value(): Promise { 413 | return undefined; 414 | } 415 | } 416 | 417 | export class BlobApiResponse { 418 | constructor(public raw: Response) {} 419 | 420 | async value(): Promise { 421 | return await this.raw.blob(); 422 | }; 423 | } 424 | 425 | export class TextApiResponse { 426 | constructor(public raw: Response) {} 427 | 428 | async value(): Promise { 429 | return await this.raw.text(); 430 | }; 431 | } 432 | -------------------------------------------------------------------------------- /openapitools.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json", 3 | "spaces": 2, 4 | "generator-cli": { 5 | "version": "7.3.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jup-ag/api", 3 | "version": "6.0.42", 4 | "description": "## Generate typescript types from swagger schema", 5 | "main": "dist/index.js", 6 | "module": "dist/index.mjs", 7 | "typings": "dist/index.d.ts", 8 | "sideEffects": false, 9 | "scripts": { 10 | "dev-swap": "FLOW=quoteAndSwap ts-node ./example/index.ts", 11 | "dev-quote": "FLOW=quote ts-node ./example/index.ts", 12 | "test": "vitest", 13 | "build": "npm run openapi-gen && tsup src/index.ts --dts --format esm,cjs", 14 | "openapi-gen": "openapi-generator-cli generate -i swagger.yaml -o generated -g typescript-fetch --skip-validate-spec --additional-properties=supportsES6=true,typescriptThreePlus=true", 15 | "openapi-gen-rust": "openapi-generator-cli generate -i swagger.yaml -o generated -g rust" 16 | }, 17 | "author": "", 18 | "license": "MIT", 19 | "dependencies": {}, 20 | "devDependencies": { 21 | "@openapitools/openapi-generator-cli": "^2.9.0", 22 | "@project-serum/anchor": "^0.26.0", 23 | "@solana/web3.js": "^1.87.6", 24 | "@types/promise-retry": "^1.1.3", 25 | "bs58": "^5.0.0", 26 | "cross-fetch": "^3.1.5", 27 | "dotenv": "^16.4.7", 28 | "promise-retry": "2.0.1", 29 | "ts-node": "^10.5.0", 30 | "tsup": "^7.1.0", 31 | "typescript": "^5.1.6", 32 | "vitest": "^0.34.1" 33 | }, 34 | "files": [ 35 | "dist" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@openapitools/openapi-generator-cli': 12 | specifier: ^2.9.0 13 | version: 2.9.0 14 | '@project-serum/anchor': 15 | specifier: ^0.26.0 16 | version: 0.26.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) 17 | '@solana/web3.js': 18 | specifier: ^1.87.6 19 | version: 1.87.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) 20 | '@types/promise-retry': 21 | specifier: ^1.1.3 22 | version: 1.1.3 23 | bs58: 24 | specifier: ^5.0.0 25 | version: 5.0.0 26 | cross-fetch: 27 | specifier: ^3.1.5 28 | version: 3.1.5 29 | dotenv: 30 | specifier: ^16.4.7 31 | version: 16.4.7 32 | promise-retry: 33 | specifier: 2.0.1 34 | version: 2.0.1 35 | ts-node: 36 | specifier: ^10.5.0 37 | version: 10.9.1(@types/node@20.4.4)(typescript@5.1.6) 38 | tsup: 39 | specifier: ^7.1.0 40 | version: 7.1.0(postcss@8.4.32)(ts-node@10.9.1(@types/node@20.4.4)(typescript@5.1.6))(typescript@5.1.6) 41 | typescript: 42 | specifier: ^5.1.6 43 | version: 5.1.6 44 | vitest: 45 | specifier: ^0.34.1 46 | version: 0.34.1 47 | 48 | packages: 49 | 50 | '@babel/runtime@7.23.6': 51 | resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} 52 | engines: {node: '>=6.9.0'} 53 | 54 | '@coral-xyz/borsh@0.26.0': 55 | resolution: {integrity: sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==} 56 | engines: {node: '>=10'} 57 | peerDependencies: 58 | '@solana/web3.js': ^1.68.0 59 | 60 | '@cspotcode/source-map-support@0.8.1': 61 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 62 | engines: {node: '>=12'} 63 | 64 | '@esbuild/android-arm64@0.18.16': 65 | resolution: {integrity: sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA==} 66 | engines: {node: '>=12'} 67 | cpu: [arm64] 68 | os: [android] 69 | 70 | '@esbuild/android-arm@0.18.16': 71 | resolution: {integrity: sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug==} 72 | engines: {node: '>=12'} 73 | cpu: [arm] 74 | os: [android] 75 | 76 | '@esbuild/android-x64@0.18.16': 77 | resolution: {integrity: sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw==} 78 | engines: {node: '>=12'} 79 | cpu: [x64] 80 | os: [android] 81 | 82 | '@esbuild/darwin-arm64@0.18.16': 83 | resolution: {integrity: sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw==} 84 | engines: {node: '>=12'} 85 | cpu: [arm64] 86 | os: [darwin] 87 | 88 | '@esbuild/darwin-x64@0.18.16': 89 | resolution: {integrity: sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA==} 90 | engines: {node: '>=12'} 91 | cpu: [x64] 92 | os: [darwin] 93 | 94 | '@esbuild/freebsd-arm64@0.18.16': 95 | resolution: {integrity: sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ==} 96 | engines: {node: '>=12'} 97 | cpu: [arm64] 98 | os: [freebsd] 99 | 100 | '@esbuild/freebsd-x64@0.18.16': 101 | resolution: {integrity: sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg==} 102 | engines: {node: '>=12'} 103 | cpu: [x64] 104 | os: [freebsd] 105 | 106 | '@esbuild/linux-arm64@0.18.16': 107 | resolution: {integrity: sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ==} 108 | engines: {node: '>=12'} 109 | cpu: [arm64] 110 | os: [linux] 111 | 112 | '@esbuild/linux-arm@0.18.16': 113 | resolution: {integrity: sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw==} 114 | engines: {node: '>=12'} 115 | cpu: [arm] 116 | os: [linux] 117 | 118 | '@esbuild/linux-ia32@0.18.16': 119 | resolution: {integrity: sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow==} 120 | engines: {node: '>=12'} 121 | cpu: [ia32] 122 | os: [linux] 123 | 124 | '@esbuild/linux-loong64@0.18.16': 125 | resolution: {integrity: sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g==} 126 | engines: {node: '>=12'} 127 | cpu: [loong64] 128 | os: [linux] 129 | 130 | '@esbuild/linux-mips64el@0.18.16': 131 | resolution: {integrity: sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ==} 132 | engines: {node: '>=12'} 133 | cpu: [mips64el] 134 | os: [linux] 135 | 136 | '@esbuild/linux-ppc64@0.18.16': 137 | resolution: {integrity: sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ==} 138 | engines: {node: '>=12'} 139 | cpu: [ppc64] 140 | os: [linux] 141 | 142 | '@esbuild/linux-riscv64@0.18.16': 143 | resolution: {integrity: sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ==} 144 | engines: {node: '>=12'} 145 | cpu: [riscv64] 146 | os: [linux] 147 | 148 | '@esbuild/linux-s390x@0.18.16': 149 | resolution: {integrity: sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg==} 150 | engines: {node: '>=12'} 151 | cpu: [s390x] 152 | os: [linux] 153 | 154 | '@esbuild/linux-x64@0.18.16': 155 | resolution: {integrity: sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA==} 156 | engines: {node: '>=12'} 157 | cpu: [x64] 158 | os: [linux] 159 | 160 | '@esbuild/netbsd-x64@0.18.16': 161 | resolution: {integrity: sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw==} 162 | engines: {node: '>=12'} 163 | cpu: [x64] 164 | os: [netbsd] 165 | 166 | '@esbuild/openbsd-x64@0.18.16': 167 | resolution: {integrity: sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA==} 168 | engines: {node: '>=12'} 169 | cpu: [x64] 170 | os: [openbsd] 171 | 172 | '@esbuild/sunos-x64@0.18.16': 173 | resolution: {integrity: sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ==} 174 | engines: {node: '>=12'} 175 | cpu: [x64] 176 | os: [sunos] 177 | 178 | '@esbuild/win32-arm64@0.18.16': 179 | resolution: {integrity: sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw==} 180 | engines: {node: '>=12'} 181 | cpu: [arm64] 182 | os: [win32] 183 | 184 | '@esbuild/win32-ia32@0.18.16': 185 | resolution: {integrity: sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ==} 186 | engines: {node: '>=12'} 187 | cpu: [ia32] 188 | os: [win32] 189 | 190 | '@esbuild/win32-x64@0.18.16': 191 | resolution: {integrity: sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==} 192 | engines: {node: '>=12'} 193 | cpu: [x64] 194 | os: [win32] 195 | 196 | '@jest/schemas@29.6.3': 197 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 198 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 199 | 200 | '@jridgewell/resolve-uri@3.1.0': 201 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 202 | engines: {node: '>=6.0.0'} 203 | 204 | '@jridgewell/sourcemap-codec@1.4.14': 205 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 206 | 207 | '@jridgewell/sourcemap-codec@1.4.15': 208 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 209 | 210 | '@jridgewell/trace-mapping@0.3.9': 211 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 212 | 213 | '@jup-ag/api@6.0.39': 214 | resolution: {integrity: sha512-cejW4IWf3dKM5ucmqu5jWtlPZ46LJJOCrx3s5vKmEIB+0X9ykSZsKkcIHFBCOqf3/lSbGyU7THZqXuxjKK9//g==} 215 | 216 | '@lukeed/csprng@1.1.0': 217 | resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} 218 | engines: {node: '>=8'} 219 | 220 | '@nestjs/axios@3.0.1': 221 | resolution: {integrity: sha512-VlOZhAGDmOoFdsmewn8AyClAdGpKXQQaY1+3PGB+g6ceurGIdTxZgRX3VXc1T6Zs60PedWjg3A82TDOB05mrzQ==} 222 | peerDependencies: 223 | '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 224 | axios: ^1.3.1 225 | reflect-metadata: ^0.1.12 226 | rxjs: ^6.0.0 || ^7.0.0 227 | 228 | '@nestjs/common@10.3.0': 229 | resolution: {integrity: sha512-DGv34UHsZBxCM3H5QGE2XE/+oLJzz5+714JQjBhjD9VccFlQs3LRxo/epso4l7nJIiNlZkPyIUC8WzfU/5RTsQ==} 230 | peerDependencies: 231 | class-transformer: '*' 232 | class-validator: '*' 233 | reflect-metadata: ^0.1.12 234 | rxjs: ^7.1.0 235 | peerDependenciesMeta: 236 | class-transformer: 237 | optional: true 238 | class-validator: 239 | optional: true 240 | 241 | '@nestjs/core@10.3.0': 242 | resolution: {integrity: sha512-N06P5ncknW/Pm8bj964WvLIZn2gNhHliCBoAO1LeBvNImYkecqKcrmLbY49Fa1rmMfEM3MuBHeDys3edeuYAOA==} 243 | peerDependencies: 244 | '@nestjs/common': ^10.0.0 245 | '@nestjs/microservices': ^10.0.0 246 | '@nestjs/platform-express': ^10.0.0 247 | '@nestjs/websockets': ^10.0.0 248 | reflect-metadata: ^0.1.12 249 | rxjs: ^7.1.0 250 | peerDependenciesMeta: 251 | '@nestjs/microservices': 252 | optional: true 253 | '@nestjs/platform-express': 254 | optional: true 255 | '@nestjs/websockets': 256 | optional: true 257 | 258 | '@noble/curves@1.3.0': 259 | resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} 260 | 261 | '@noble/hashes@1.3.3': 262 | resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} 263 | engines: {node: '>= 16'} 264 | 265 | '@nodelib/fs.scandir@2.1.5': 266 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 267 | engines: {node: '>= 8'} 268 | 269 | '@nodelib/fs.stat@2.0.5': 270 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 271 | engines: {node: '>= 8'} 272 | 273 | '@nodelib/fs.walk@1.2.8': 274 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 275 | engines: {node: '>= 8'} 276 | 277 | '@nuxtjs/opencollective@0.3.2': 278 | resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} 279 | engines: {node: '>=8.0.0', npm: '>=5.0.0'} 280 | hasBin: true 281 | 282 | '@openapitools/openapi-generator-cli@2.9.0': 283 | resolution: {integrity: sha512-KQpftKeiMoH5aEI/amOVLFGkGeT3DyA7Atj7v7l8xT3O9xnIUpoDmMg0WBTEh+NHxEwEAITQNDzr+JLjkXVaKw==} 284 | engines: {node: '>=10.0.0'} 285 | hasBin: true 286 | 287 | '@project-serum/anchor@0.26.0': 288 | resolution: {integrity: sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==} 289 | engines: {node: '>=11'} 290 | 291 | '@sinclair/typebox@0.27.8': 292 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 293 | 294 | '@solana/buffer-layout@4.0.1': 295 | resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} 296 | engines: {node: '>=5.10'} 297 | 298 | '@solana/web3.js@1.87.6': 299 | resolution: {integrity: sha512-LkqsEBgTZztFiccZZXnawWa8qNCATEqE97/d0vIwjTclmVlc8pBpD1DmjfVHtZ1HS5fZorFlVhXfpwnCNDZfyg==} 300 | 301 | '@tsconfig/node10@1.0.9': 302 | resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} 303 | 304 | '@tsconfig/node12@1.0.11': 305 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 306 | 307 | '@tsconfig/node14@1.0.3': 308 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 309 | 310 | '@tsconfig/node16@1.0.3': 311 | resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} 312 | 313 | '@types/chai-subset@1.3.5': 314 | resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} 315 | 316 | '@types/chai@4.3.11': 317 | resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} 318 | 319 | '@types/connect@3.4.38': 320 | resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} 321 | 322 | '@types/node@12.20.55': 323 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 324 | 325 | '@types/node@20.4.4': 326 | resolution: {integrity: sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==} 327 | 328 | '@types/promise-retry@1.1.3': 329 | resolution: {integrity: sha512-LxIlEpEX6frE3co3vCO2EUJfHIta1IOmhDlcAsR4GMMv9hev1iTI9VwberVGkePJAuLZs5rMucrV8CziCfuJMw==} 330 | 331 | '@types/retry@0.12.5': 332 | resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} 333 | 334 | '@types/ws@7.4.7': 335 | resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} 336 | 337 | '@vitest/expect@0.34.1': 338 | resolution: {integrity: sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==} 339 | 340 | '@vitest/runner@0.34.1': 341 | resolution: {integrity: sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==} 342 | 343 | '@vitest/snapshot@0.34.1': 344 | resolution: {integrity: sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==} 345 | 346 | '@vitest/spy@0.34.1': 347 | resolution: {integrity: sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==} 348 | 349 | '@vitest/utils@0.34.1': 350 | resolution: {integrity: sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==} 351 | 352 | JSONStream@1.3.5: 353 | resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} 354 | hasBin: true 355 | 356 | acorn-walk@8.2.0: 357 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 358 | engines: {node: '>=0.4.0'} 359 | 360 | acorn@8.11.2: 361 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 362 | engines: {node: '>=0.4.0'} 363 | hasBin: true 364 | 365 | acorn@8.8.0: 366 | resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} 367 | engines: {node: '>=0.4.0'} 368 | hasBin: true 369 | 370 | agentkeepalive@4.5.0: 371 | resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} 372 | engines: {node: '>= 8.0.0'} 373 | 374 | ansi-escapes@4.3.2: 375 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 376 | engines: {node: '>=8'} 377 | 378 | ansi-regex@5.0.1: 379 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 380 | engines: {node: '>=8'} 381 | 382 | ansi-styles@4.3.0: 383 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 384 | engines: {node: '>=8'} 385 | 386 | ansi-styles@5.2.0: 387 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 388 | engines: {node: '>=10'} 389 | 390 | any-promise@1.3.0: 391 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 392 | 393 | anymatch@3.1.2: 394 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 395 | engines: {node: '>= 8'} 396 | 397 | arg@4.1.3: 398 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 399 | 400 | array-union@2.1.0: 401 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 402 | engines: {node: '>=8'} 403 | 404 | assertion-error@1.1.0: 405 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 406 | 407 | asynckit@0.4.0: 408 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 409 | 410 | axios@1.6.5: 411 | resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} 412 | 413 | balanced-match@1.0.2: 414 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 415 | 416 | base-x@3.0.9: 417 | resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} 418 | 419 | base-x@4.0.0: 420 | resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} 421 | 422 | base64-js@1.5.1: 423 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 424 | 425 | bigint-buffer@1.1.5: 426 | resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} 427 | engines: {node: '>= 10.0.0'} 428 | 429 | binary-extensions@2.2.0: 430 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 431 | engines: {node: '>=8'} 432 | 433 | bindings@1.5.0: 434 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 435 | 436 | bl@4.1.0: 437 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 438 | 439 | bn.js@5.2.1: 440 | resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} 441 | 442 | borsh@0.7.0: 443 | resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} 444 | 445 | brace-expansion@1.1.11: 446 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 447 | 448 | braces@3.0.2: 449 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 450 | engines: {node: '>=8'} 451 | 452 | bs58@4.0.1: 453 | resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} 454 | 455 | bs58@5.0.0: 456 | resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} 457 | 458 | buffer-layout@1.2.2: 459 | resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} 460 | engines: {node: '>=4.5'} 461 | 462 | buffer@5.7.1: 463 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 464 | 465 | buffer@6.0.3: 466 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 467 | 468 | bufferutil@4.0.8: 469 | resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} 470 | engines: {node: '>=6.14.2'} 471 | 472 | bundle-require@4.0.1: 473 | resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} 474 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 475 | peerDependencies: 476 | esbuild: '>=0.17' 477 | 478 | cac@6.7.14: 479 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 480 | engines: {node: '>=8'} 481 | 482 | camelcase@6.3.0: 483 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 484 | engines: {node: '>=10'} 485 | 486 | chai@4.3.10: 487 | resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} 488 | engines: {node: '>=4'} 489 | 490 | chalk@4.1.2: 491 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 492 | engines: {node: '>=10'} 493 | 494 | chardet@0.7.0: 495 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 496 | 497 | check-error@1.0.3: 498 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 499 | 500 | chokidar@3.5.3: 501 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 502 | engines: {node: '>= 8.10.0'} 503 | 504 | cli-cursor@3.1.0: 505 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} 506 | engines: {node: '>=8'} 507 | 508 | cli-spinners@2.7.0: 509 | resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} 510 | engines: {node: '>=6'} 511 | 512 | cli-width@3.0.0: 513 | resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} 514 | engines: {node: '>= 10'} 515 | 516 | cliui@7.0.4: 517 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 518 | 519 | clone@1.0.4: 520 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 521 | engines: {node: '>=0.8'} 522 | 523 | color-convert@2.0.1: 524 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 525 | engines: {node: '>=7.0.0'} 526 | 527 | color-name@1.1.4: 528 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 529 | 530 | combined-stream@1.0.8: 531 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 532 | engines: {node: '>= 0.8'} 533 | 534 | commander@2.20.3: 535 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 536 | 537 | commander@4.1.1: 538 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 539 | engines: {node: '>= 6'} 540 | 541 | commander@8.3.0: 542 | resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} 543 | engines: {node: '>= 12'} 544 | 545 | compare-versions@4.1.4: 546 | resolution: {integrity: sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==} 547 | 548 | concat-map@0.0.1: 549 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 550 | 551 | concurrently@6.5.1: 552 | resolution: {integrity: sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==} 553 | engines: {node: '>=10.0.0'} 554 | hasBin: true 555 | 556 | consola@2.15.3: 557 | resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} 558 | 559 | console.table@0.10.0: 560 | resolution: {integrity: sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==} 561 | engines: {node: '> 0.10'} 562 | 563 | create-require@1.1.1: 564 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 565 | 566 | cross-fetch@3.1.5: 567 | resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} 568 | 569 | cross-spawn@7.0.3: 570 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 571 | engines: {node: '>= 8'} 572 | 573 | crypto-hash@1.3.0: 574 | resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} 575 | engines: {node: '>=8'} 576 | 577 | date-fns@2.29.3: 578 | resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} 579 | engines: {node: '>=0.11'} 580 | 581 | debug@4.3.4: 582 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 583 | engines: {node: '>=6.0'} 584 | peerDependencies: 585 | supports-color: '*' 586 | peerDependenciesMeta: 587 | supports-color: 588 | optional: true 589 | 590 | deep-eql@4.1.3: 591 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 592 | engines: {node: '>=6'} 593 | 594 | defaults@1.0.3: 595 | resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} 596 | 597 | delay@5.0.0: 598 | resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} 599 | engines: {node: '>=10'} 600 | 601 | delayed-stream@1.0.0: 602 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 603 | engines: {node: '>=0.4.0'} 604 | 605 | diff-sequences@29.6.3: 606 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 607 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 608 | 609 | diff@4.0.2: 610 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 611 | engines: {node: '>=0.3.1'} 612 | 613 | dir-glob@3.0.1: 614 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 615 | engines: {node: '>=8'} 616 | 617 | dot-case@3.0.4: 618 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 619 | 620 | dotenv@16.4.7: 621 | resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} 622 | engines: {node: '>=12'} 623 | 624 | easy-table@1.1.0: 625 | resolution: {integrity: sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==} 626 | 627 | emoji-regex@8.0.0: 628 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 629 | 630 | err-code@2.0.3: 631 | resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} 632 | 633 | es6-promise@4.2.8: 634 | resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} 635 | 636 | es6-promisify@5.0.0: 637 | resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} 638 | 639 | esbuild@0.18.16: 640 | resolution: {integrity: sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==} 641 | engines: {node: '>=12'} 642 | hasBin: true 643 | 644 | escalade@3.1.1: 645 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 646 | engines: {node: '>=6'} 647 | 648 | escape-string-regexp@1.0.5: 649 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 650 | engines: {node: '>=0.8.0'} 651 | 652 | eventemitter3@4.0.7: 653 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 654 | 655 | execa@5.1.1: 656 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 657 | engines: {node: '>=10'} 658 | 659 | external-editor@3.1.0: 660 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 661 | engines: {node: '>=4'} 662 | 663 | eyes@0.1.8: 664 | resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} 665 | engines: {node: '> 0.1.90'} 666 | 667 | fast-glob@3.2.12: 668 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 669 | engines: {node: '>=8.6.0'} 670 | 671 | fast-safe-stringify@2.1.1: 672 | resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} 673 | 674 | fast-stable-stringify@1.0.0: 675 | resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} 676 | 677 | fastq@1.13.0: 678 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 679 | 680 | figures@3.2.0: 681 | resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} 682 | engines: {node: '>=8'} 683 | 684 | file-uri-to-path@1.0.0: 685 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 686 | 687 | fill-range@7.0.1: 688 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 689 | engines: {node: '>=8'} 690 | 691 | follow-redirects@1.15.5: 692 | resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} 693 | engines: {node: '>=4.0'} 694 | peerDependencies: 695 | debug: '*' 696 | peerDependenciesMeta: 697 | debug: 698 | optional: true 699 | 700 | form-data@4.0.0: 701 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 702 | engines: {node: '>= 6'} 703 | 704 | fs-extra@10.1.0: 705 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 706 | engines: {node: '>=12'} 707 | 708 | fs.realpath@1.0.0: 709 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 710 | 711 | fsevents@2.3.2: 712 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 713 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 714 | os: [darwin] 715 | 716 | get-caller-file@2.0.5: 717 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 718 | engines: {node: 6.* || 8.* || >= 10.*} 719 | 720 | get-func-name@2.0.2: 721 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 722 | 723 | get-stream@6.0.1: 724 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 725 | engines: {node: '>=10'} 726 | 727 | glob-parent@5.1.2: 728 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 729 | engines: {node: '>= 6'} 730 | 731 | glob@7.1.6: 732 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 733 | 734 | glob@7.2.3: 735 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 736 | 737 | globby@11.1.0: 738 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 739 | engines: {node: '>=10'} 740 | 741 | graceful-fs@4.2.10: 742 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 743 | 744 | has-flag@4.0.0: 745 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 746 | engines: {node: '>=8'} 747 | 748 | human-signals@2.1.0: 749 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 750 | engines: {node: '>=10.17.0'} 751 | 752 | humanize-ms@1.2.1: 753 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} 754 | 755 | iconv-lite@0.4.24: 756 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 757 | engines: {node: '>=0.10.0'} 758 | 759 | ieee754@1.2.1: 760 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 761 | 762 | ignore@5.2.0: 763 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 764 | engines: {node: '>= 4'} 765 | 766 | inflight@1.0.6: 767 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 768 | 769 | inherits@2.0.4: 770 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 771 | 772 | inquirer@8.2.6: 773 | resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} 774 | engines: {node: '>=12.0.0'} 775 | 776 | is-binary-path@2.1.0: 777 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 778 | engines: {node: '>=8'} 779 | 780 | is-extglob@2.1.1: 781 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 782 | engines: {node: '>=0.10.0'} 783 | 784 | is-fullwidth-code-point@3.0.0: 785 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 786 | engines: {node: '>=8'} 787 | 788 | is-glob@4.0.3: 789 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 790 | engines: {node: '>=0.10.0'} 791 | 792 | is-interactive@1.0.0: 793 | resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} 794 | engines: {node: '>=8'} 795 | 796 | is-number@7.0.0: 797 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 798 | engines: {node: '>=0.12.0'} 799 | 800 | is-stream@2.0.1: 801 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 802 | engines: {node: '>=8'} 803 | 804 | is-unicode-supported@0.1.0: 805 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 806 | engines: {node: '>=10'} 807 | 808 | isexe@2.0.0: 809 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 810 | 811 | isomorphic-ws@4.0.1: 812 | resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} 813 | peerDependencies: 814 | ws: '*' 815 | 816 | iterare@1.2.1: 817 | resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} 818 | engines: {node: '>=6'} 819 | 820 | jayson@4.1.0: 821 | resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} 822 | engines: {node: '>=8'} 823 | hasBin: true 824 | 825 | joycon@3.1.1: 826 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 827 | engines: {node: '>=10'} 828 | 829 | js-sha256@0.9.0: 830 | resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} 831 | 832 | json-stringify-safe@5.0.1: 833 | resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} 834 | 835 | jsonc-parser@3.2.0: 836 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 837 | 838 | jsonfile@6.1.0: 839 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 840 | 841 | jsonparse@1.3.1: 842 | resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} 843 | engines: {'0': node >= 0.2.0} 844 | 845 | lilconfig@2.0.6: 846 | resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} 847 | engines: {node: '>=10'} 848 | 849 | lines-and-columns@1.2.4: 850 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 851 | 852 | load-tsconfig@0.2.3: 853 | resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} 854 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 855 | 856 | local-pkg@0.4.3: 857 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 858 | engines: {node: '>=14'} 859 | 860 | lodash.sortby@4.7.0: 861 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 862 | 863 | lodash@4.17.21: 864 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 865 | 866 | log-symbols@4.1.0: 867 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 868 | engines: {node: '>=10'} 869 | 870 | loupe@2.3.7: 871 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 872 | 873 | lower-case@2.0.2: 874 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 875 | 876 | magic-string@0.30.5: 877 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} 878 | engines: {node: '>=12'} 879 | 880 | make-error@1.3.6: 881 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 882 | 883 | merge-stream@2.0.0: 884 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 885 | 886 | merge2@1.4.1: 887 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 888 | engines: {node: '>= 8'} 889 | 890 | micromatch@4.0.5: 891 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 892 | engines: {node: '>=8.6'} 893 | 894 | mime-db@1.52.0: 895 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 896 | engines: {node: '>= 0.6'} 897 | 898 | mime-types@2.1.35: 899 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 900 | engines: {node: '>= 0.6'} 901 | 902 | mimic-fn@2.1.0: 903 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 904 | engines: {node: '>=6'} 905 | 906 | minimatch@3.1.2: 907 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 908 | 909 | mlly@1.4.2: 910 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} 911 | 912 | ms@2.1.2: 913 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 914 | 915 | mute-stream@0.0.8: 916 | resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} 917 | 918 | mz@2.7.0: 919 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 920 | 921 | nanoid@3.3.7: 922 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 923 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 924 | hasBin: true 925 | 926 | no-case@3.0.4: 927 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 928 | 929 | node-fetch@2.6.7: 930 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} 931 | engines: {node: 4.x || >=6.0.0} 932 | peerDependencies: 933 | encoding: ^0.1.0 934 | peerDependenciesMeta: 935 | encoding: 936 | optional: true 937 | 938 | node-fetch@2.7.0: 939 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 940 | engines: {node: 4.x || >=6.0.0} 941 | peerDependencies: 942 | encoding: ^0.1.0 943 | peerDependenciesMeta: 944 | encoding: 945 | optional: true 946 | 947 | node-gyp-build@4.7.1: 948 | resolution: {integrity: sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==} 949 | hasBin: true 950 | 951 | normalize-path@3.0.0: 952 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 953 | engines: {node: '>=0.10.0'} 954 | 955 | npm-run-path@4.0.1: 956 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 957 | engines: {node: '>=8'} 958 | 959 | object-assign@4.1.1: 960 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 961 | engines: {node: '>=0.10.0'} 962 | 963 | once@1.4.0: 964 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 965 | 966 | onetime@5.1.2: 967 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 968 | engines: {node: '>=6'} 969 | 970 | ora@5.4.1: 971 | resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} 972 | engines: {node: '>=10'} 973 | 974 | os-tmpdir@1.0.2: 975 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 976 | engines: {node: '>=0.10.0'} 977 | 978 | p-limit@4.0.0: 979 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 980 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 981 | 982 | pako@2.1.0: 983 | resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} 984 | 985 | path-is-absolute@1.0.1: 986 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 987 | engines: {node: '>=0.10.0'} 988 | 989 | path-key@3.1.1: 990 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 991 | engines: {node: '>=8'} 992 | 993 | path-to-regexp@3.2.0: 994 | resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} 995 | 996 | path-type@4.0.0: 997 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 998 | engines: {node: '>=8'} 999 | 1000 | pathe@1.1.1: 1001 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} 1002 | 1003 | pathval@1.1.1: 1004 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1005 | 1006 | picocolors@1.0.0: 1007 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1008 | 1009 | picomatch@2.3.1: 1010 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1011 | engines: {node: '>=8.6'} 1012 | 1013 | pirates@4.0.5: 1014 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 1015 | engines: {node: '>= 6'} 1016 | 1017 | pkg-types@1.0.3: 1018 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 1019 | 1020 | postcss-load-config@4.0.1: 1021 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 1022 | engines: {node: '>= 14'} 1023 | peerDependencies: 1024 | postcss: '>=8.0.9' 1025 | ts-node: '>=9.0.0' 1026 | peerDependenciesMeta: 1027 | postcss: 1028 | optional: true 1029 | ts-node: 1030 | optional: true 1031 | 1032 | postcss@8.4.32: 1033 | resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} 1034 | engines: {node: ^10 || ^12 || >=14} 1035 | 1036 | pretty-format@29.7.0: 1037 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1038 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1039 | 1040 | promise-retry@2.0.1: 1041 | resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} 1042 | engines: {node: '>=10'} 1043 | 1044 | proxy-from-env@1.1.0: 1045 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1046 | 1047 | punycode@2.1.1: 1048 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 1049 | engines: {node: '>=6'} 1050 | 1051 | queue-microtask@1.2.3: 1052 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1053 | 1054 | react-is@18.2.0: 1055 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1056 | 1057 | readable-stream@3.6.0: 1058 | resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} 1059 | engines: {node: '>= 6'} 1060 | 1061 | readdirp@3.6.0: 1062 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1063 | engines: {node: '>=8.10.0'} 1064 | 1065 | reflect-metadata@0.1.13: 1066 | resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} 1067 | 1068 | regenerator-runtime@0.14.0: 1069 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} 1070 | 1071 | require-directory@2.1.1: 1072 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1073 | engines: {node: '>=0.10.0'} 1074 | 1075 | resolve-from@5.0.0: 1076 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1077 | engines: {node: '>=8'} 1078 | 1079 | restore-cursor@3.1.0: 1080 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} 1081 | engines: {node: '>=8'} 1082 | 1083 | retry@0.12.0: 1084 | resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} 1085 | engines: {node: '>= 4'} 1086 | 1087 | reusify@1.0.4: 1088 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1089 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1090 | 1091 | rollup@3.26.3: 1092 | resolution: {integrity: sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==} 1093 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1094 | hasBin: true 1095 | 1096 | rollup@3.29.4: 1097 | resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} 1098 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1099 | hasBin: true 1100 | 1101 | rpc-websockets@7.8.0: 1102 | resolution: {integrity: sha512-AStkq6KDvSAmA4WiwlK1pDvj/33BWmExTATUokC0v+NhWekXSTNzXS5OGXeYwq501/pj6lBZMofg/h4dx4/tCg==} 1103 | 1104 | run-async@2.4.1: 1105 | resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} 1106 | engines: {node: '>=0.12.0'} 1107 | 1108 | run-parallel@1.2.0: 1109 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1110 | 1111 | rxjs@6.6.7: 1112 | resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} 1113 | engines: {npm: '>=2.0.0'} 1114 | 1115 | rxjs@7.8.1: 1116 | resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} 1117 | 1118 | safe-buffer@5.2.1: 1119 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1120 | 1121 | safer-buffer@2.1.2: 1122 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1123 | 1124 | shebang-command@2.0.0: 1125 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1126 | engines: {node: '>=8'} 1127 | 1128 | shebang-regex@3.0.0: 1129 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1130 | engines: {node: '>=8'} 1131 | 1132 | siginfo@2.0.0: 1133 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1134 | 1135 | signal-exit@3.0.7: 1136 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1137 | 1138 | slash@3.0.0: 1139 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1140 | engines: {node: '>=8'} 1141 | 1142 | snake-case@3.0.4: 1143 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} 1144 | 1145 | source-map-js@1.0.2: 1146 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1147 | engines: {node: '>=0.10.0'} 1148 | 1149 | source-map@0.8.0-beta.0: 1150 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1151 | engines: {node: '>= 8'} 1152 | 1153 | spawn-command@0.0.2-1: 1154 | resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} 1155 | 1156 | stackback@0.0.2: 1157 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1158 | 1159 | std-env@3.6.0: 1160 | resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} 1161 | 1162 | string-width@4.2.3: 1163 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1164 | engines: {node: '>=8'} 1165 | 1166 | string_decoder@1.3.0: 1167 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1168 | 1169 | strip-ansi@6.0.1: 1170 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1171 | engines: {node: '>=8'} 1172 | 1173 | strip-final-newline@2.0.0: 1174 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1175 | engines: {node: '>=6'} 1176 | 1177 | strip-literal@1.3.0: 1178 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} 1179 | 1180 | sucrase@3.28.0: 1181 | resolution: {integrity: sha512-TK9600YInjuiIhVM3729rH4ZKPOsGeyXUwY+Ugu9eilNbdTFyHr6XcAGYbRVZPDgWj6tgI7bx95aaJjHnbffag==} 1182 | engines: {node: '>=8'} 1183 | hasBin: true 1184 | 1185 | superstruct@0.14.2: 1186 | resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} 1187 | 1188 | superstruct@0.15.5: 1189 | resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} 1190 | 1191 | supports-color@7.2.0: 1192 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1193 | engines: {node: '>=8'} 1194 | 1195 | supports-color@8.1.1: 1196 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1197 | engines: {node: '>=10'} 1198 | 1199 | text-encoding-utf-8@1.0.2: 1200 | resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} 1201 | 1202 | thenify-all@1.6.0: 1203 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1204 | engines: {node: '>=0.8'} 1205 | 1206 | thenify@3.3.1: 1207 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1208 | 1209 | through@2.3.8: 1210 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 1211 | 1212 | tinybench@2.5.1: 1213 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} 1214 | 1215 | tinypool@0.7.0: 1216 | resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} 1217 | engines: {node: '>=14.0.0'} 1218 | 1219 | tinyspy@2.2.0: 1220 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} 1221 | engines: {node: '>=14.0.0'} 1222 | 1223 | tmp@0.0.33: 1224 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1225 | engines: {node: '>=0.6.0'} 1226 | 1227 | to-regex-range@5.0.1: 1228 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1229 | engines: {node: '>=8.0'} 1230 | 1231 | toml@3.0.0: 1232 | resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} 1233 | 1234 | tr46@0.0.3: 1235 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1236 | 1237 | tr46@1.0.1: 1238 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1239 | 1240 | tree-kill@1.2.2: 1241 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1242 | hasBin: true 1243 | 1244 | ts-interface-checker@0.1.13: 1245 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1246 | 1247 | ts-node@10.9.1: 1248 | resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 1249 | hasBin: true 1250 | peerDependencies: 1251 | '@swc/core': '>=1.2.50' 1252 | '@swc/wasm': '>=1.2.50' 1253 | '@types/node': '*' 1254 | typescript: '>=2.7' 1255 | peerDependenciesMeta: 1256 | '@swc/core': 1257 | optional: true 1258 | '@swc/wasm': 1259 | optional: true 1260 | 1261 | tslib@1.14.1: 1262 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1263 | 1264 | tslib@2.5.0: 1265 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} 1266 | 1267 | tslib@2.6.2: 1268 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1269 | 1270 | tsup@7.1.0: 1271 | resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} 1272 | engines: {node: '>=16.14'} 1273 | hasBin: true 1274 | peerDependencies: 1275 | '@swc/core': ^1 1276 | postcss: ^8.4.12 1277 | typescript: '>=4.1.0' 1278 | peerDependenciesMeta: 1279 | '@swc/core': 1280 | optional: true 1281 | postcss: 1282 | optional: true 1283 | typescript: 1284 | optional: true 1285 | 1286 | type-detect@4.0.8: 1287 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1288 | engines: {node: '>=4'} 1289 | 1290 | type-fest@0.21.3: 1291 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1292 | engines: {node: '>=10'} 1293 | 1294 | typescript@5.1.6: 1295 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} 1296 | engines: {node: '>=14.17'} 1297 | hasBin: true 1298 | 1299 | ufo@1.3.2: 1300 | resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} 1301 | 1302 | uid@2.0.2: 1303 | resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} 1304 | engines: {node: '>=8'} 1305 | 1306 | universalify@2.0.0: 1307 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1308 | engines: {node: '>= 10.0.0'} 1309 | 1310 | utf-8-validate@5.0.10: 1311 | resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} 1312 | engines: {node: '>=6.14.2'} 1313 | 1314 | util-deprecate@1.0.2: 1315 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1316 | 1317 | uuid@8.3.2: 1318 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 1319 | hasBin: true 1320 | 1321 | v8-compile-cache-lib@3.0.1: 1322 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 1323 | 1324 | vite-node@0.34.1: 1325 | resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} 1326 | engines: {node: '>=v14.18.0'} 1327 | hasBin: true 1328 | 1329 | vite@4.5.1: 1330 | resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==} 1331 | engines: {node: ^14.18.0 || >=16.0.0} 1332 | hasBin: true 1333 | peerDependencies: 1334 | '@types/node': '>= 14' 1335 | less: '*' 1336 | lightningcss: ^1.21.0 1337 | sass: '*' 1338 | stylus: '*' 1339 | sugarss: '*' 1340 | terser: ^5.4.0 1341 | peerDependenciesMeta: 1342 | '@types/node': 1343 | optional: true 1344 | less: 1345 | optional: true 1346 | lightningcss: 1347 | optional: true 1348 | sass: 1349 | optional: true 1350 | stylus: 1351 | optional: true 1352 | sugarss: 1353 | optional: true 1354 | terser: 1355 | optional: true 1356 | 1357 | vitest@0.34.1: 1358 | resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==} 1359 | engines: {node: '>=v14.18.0'} 1360 | hasBin: true 1361 | peerDependencies: 1362 | '@edge-runtime/vm': '*' 1363 | '@vitest/browser': '*' 1364 | '@vitest/ui': '*' 1365 | happy-dom: '*' 1366 | jsdom: '*' 1367 | playwright: '*' 1368 | safaridriver: '*' 1369 | webdriverio: '*' 1370 | peerDependenciesMeta: 1371 | '@edge-runtime/vm': 1372 | optional: true 1373 | '@vitest/browser': 1374 | optional: true 1375 | '@vitest/ui': 1376 | optional: true 1377 | happy-dom: 1378 | optional: true 1379 | jsdom: 1380 | optional: true 1381 | playwright: 1382 | optional: true 1383 | safaridriver: 1384 | optional: true 1385 | webdriverio: 1386 | optional: true 1387 | 1388 | wcwidth@1.0.1: 1389 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 1390 | 1391 | webidl-conversions@3.0.1: 1392 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1393 | 1394 | webidl-conversions@4.0.2: 1395 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1396 | 1397 | whatwg-url@5.0.0: 1398 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1399 | 1400 | whatwg-url@7.1.0: 1401 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1402 | 1403 | which@2.0.2: 1404 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1405 | engines: {node: '>= 8'} 1406 | hasBin: true 1407 | 1408 | why-is-node-running@2.2.2: 1409 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1410 | engines: {node: '>=8'} 1411 | hasBin: true 1412 | 1413 | wrap-ansi@6.2.0: 1414 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 1415 | engines: {node: '>=8'} 1416 | 1417 | wrap-ansi@7.0.0: 1418 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1419 | engines: {node: '>=10'} 1420 | 1421 | wrappy@1.0.2: 1422 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1423 | 1424 | ws@7.5.9: 1425 | resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} 1426 | engines: {node: '>=8.3.0'} 1427 | peerDependencies: 1428 | bufferutil: ^4.0.1 1429 | utf-8-validate: ^5.0.2 1430 | peerDependenciesMeta: 1431 | bufferutil: 1432 | optional: true 1433 | utf-8-validate: 1434 | optional: true 1435 | 1436 | ws@8.15.0: 1437 | resolution: {integrity: sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==} 1438 | engines: {node: '>=10.0.0'} 1439 | peerDependencies: 1440 | bufferutil: ^4.0.1 1441 | utf-8-validate: '>=5.0.2' 1442 | peerDependenciesMeta: 1443 | bufferutil: 1444 | optional: true 1445 | utf-8-validate: 1446 | optional: true 1447 | 1448 | y18n@5.0.8: 1449 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1450 | engines: {node: '>=10'} 1451 | 1452 | yaml@2.3.1: 1453 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 1454 | engines: {node: '>= 14'} 1455 | 1456 | yargs-parser@20.2.9: 1457 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1458 | engines: {node: '>=10'} 1459 | 1460 | yargs@16.2.0: 1461 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 1462 | engines: {node: '>=10'} 1463 | 1464 | yn@3.1.1: 1465 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 1466 | engines: {node: '>=6'} 1467 | 1468 | yocto-queue@1.0.0: 1469 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1470 | engines: {node: '>=12.20'} 1471 | 1472 | snapshots: 1473 | 1474 | '@babel/runtime@7.23.6': 1475 | dependencies: 1476 | regenerator-runtime: 0.14.0 1477 | 1478 | '@coral-xyz/borsh@0.26.0(@solana/web3.js@1.87.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))': 1479 | dependencies: 1480 | '@solana/web3.js': 1.87.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) 1481 | bn.js: 5.2.1 1482 | buffer-layout: 1.2.2 1483 | 1484 | '@cspotcode/source-map-support@0.8.1': 1485 | dependencies: 1486 | '@jridgewell/trace-mapping': 0.3.9 1487 | 1488 | '@esbuild/android-arm64@0.18.16': 1489 | optional: true 1490 | 1491 | '@esbuild/android-arm@0.18.16': 1492 | optional: true 1493 | 1494 | '@esbuild/android-x64@0.18.16': 1495 | optional: true 1496 | 1497 | '@esbuild/darwin-arm64@0.18.16': 1498 | optional: true 1499 | 1500 | '@esbuild/darwin-x64@0.18.16': 1501 | optional: true 1502 | 1503 | '@esbuild/freebsd-arm64@0.18.16': 1504 | optional: true 1505 | 1506 | '@esbuild/freebsd-x64@0.18.16': 1507 | optional: true 1508 | 1509 | '@esbuild/linux-arm64@0.18.16': 1510 | optional: true 1511 | 1512 | '@esbuild/linux-arm@0.18.16': 1513 | optional: true 1514 | 1515 | '@esbuild/linux-ia32@0.18.16': 1516 | optional: true 1517 | 1518 | '@esbuild/linux-loong64@0.18.16': 1519 | optional: true 1520 | 1521 | '@esbuild/linux-mips64el@0.18.16': 1522 | optional: true 1523 | 1524 | '@esbuild/linux-ppc64@0.18.16': 1525 | optional: true 1526 | 1527 | '@esbuild/linux-riscv64@0.18.16': 1528 | optional: true 1529 | 1530 | '@esbuild/linux-s390x@0.18.16': 1531 | optional: true 1532 | 1533 | '@esbuild/linux-x64@0.18.16': 1534 | optional: true 1535 | 1536 | '@esbuild/netbsd-x64@0.18.16': 1537 | optional: true 1538 | 1539 | '@esbuild/openbsd-x64@0.18.16': 1540 | optional: true 1541 | 1542 | '@esbuild/sunos-x64@0.18.16': 1543 | optional: true 1544 | 1545 | '@esbuild/win32-arm64@0.18.16': 1546 | optional: true 1547 | 1548 | '@esbuild/win32-ia32@0.18.16': 1549 | optional: true 1550 | 1551 | '@esbuild/win32-x64@0.18.16': 1552 | optional: true 1553 | 1554 | '@jest/schemas@29.6.3': 1555 | dependencies: 1556 | '@sinclair/typebox': 0.27.8 1557 | 1558 | '@jridgewell/resolve-uri@3.1.0': {} 1559 | 1560 | '@jridgewell/sourcemap-codec@1.4.14': {} 1561 | 1562 | '@jridgewell/sourcemap-codec@1.4.15': {} 1563 | 1564 | '@jridgewell/trace-mapping@0.3.9': 1565 | dependencies: 1566 | '@jridgewell/resolve-uri': 3.1.0 1567 | '@jridgewell/sourcemap-codec': 1.4.14 1568 | 1569 | '@jup-ag/api@6.0.39': {} 1570 | 1571 | '@lukeed/csprng@1.1.0': {} 1572 | 1573 | '@nestjs/axios@3.0.1(@nestjs/common@10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1))(axios@1.6.5)(reflect-metadata@0.1.13)(rxjs@7.8.1)': 1574 | dependencies: 1575 | '@nestjs/common': 10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1) 1576 | axios: 1.6.5 1577 | reflect-metadata: 0.1.13 1578 | rxjs: 7.8.1 1579 | 1580 | '@nestjs/common@10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1)': 1581 | dependencies: 1582 | iterare: 1.2.1 1583 | reflect-metadata: 0.1.13 1584 | rxjs: 7.8.1 1585 | tslib: 2.6.2 1586 | uid: 2.0.2 1587 | 1588 | '@nestjs/core@10.3.0(@nestjs/common@10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13)(rxjs@7.8.1)': 1589 | dependencies: 1590 | '@nestjs/common': 10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1) 1591 | '@nuxtjs/opencollective': 0.3.2 1592 | fast-safe-stringify: 2.1.1 1593 | iterare: 1.2.1 1594 | path-to-regexp: 3.2.0 1595 | reflect-metadata: 0.1.13 1596 | rxjs: 7.8.1 1597 | tslib: 2.6.2 1598 | uid: 2.0.2 1599 | transitivePeerDependencies: 1600 | - encoding 1601 | 1602 | '@noble/curves@1.3.0': 1603 | dependencies: 1604 | '@noble/hashes': 1.3.3 1605 | 1606 | '@noble/hashes@1.3.3': {} 1607 | 1608 | '@nodelib/fs.scandir@2.1.5': 1609 | dependencies: 1610 | '@nodelib/fs.stat': 2.0.5 1611 | run-parallel: 1.2.0 1612 | 1613 | '@nodelib/fs.stat@2.0.5': {} 1614 | 1615 | '@nodelib/fs.walk@1.2.8': 1616 | dependencies: 1617 | '@nodelib/fs.scandir': 2.1.5 1618 | fastq: 1.13.0 1619 | 1620 | '@nuxtjs/opencollective@0.3.2': 1621 | dependencies: 1622 | chalk: 4.1.2 1623 | consola: 2.15.3 1624 | node-fetch: 2.7.0 1625 | transitivePeerDependencies: 1626 | - encoding 1627 | 1628 | '@openapitools/openapi-generator-cli@2.9.0': 1629 | dependencies: 1630 | '@nestjs/axios': 3.0.1(@nestjs/common@10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1))(axios@1.6.5)(reflect-metadata@0.1.13)(rxjs@7.8.1) 1631 | '@nestjs/common': 10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1) 1632 | '@nestjs/core': 10.3.0(@nestjs/common@10.3.0(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13)(rxjs@7.8.1) 1633 | '@nuxtjs/opencollective': 0.3.2 1634 | axios: 1.6.5 1635 | chalk: 4.1.2 1636 | commander: 8.3.0 1637 | compare-versions: 4.1.4 1638 | concurrently: 6.5.1 1639 | console.table: 0.10.0 1640 | fs-extra: 10.1.0 1641 | glob: 7.2.3 1642 | inquirer: 8.2.6 1643 | lodash: 4.17.21 1644 | reflect-metadata: 0.1.13 1645 | rxjs: 7.8.1 1646 | tslib: 2.6.2 1647 | transitivePeerDependencies: 1648 | - '@nestjs/microservices' 1649 | - '@nestjs/platform-express' 1650 | - '@nestjs/websockets' 1651 | - class-transformer 1652 | - class-validator 1653 | - debug 1654 | - encoding 1655 | 1656 | '@project-serum/anchor@0.26.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': 1657 | dependencies: 1658 | '@coral-xyz/borsh': 0.26.0(@solana/web3.js@1.87.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)) 1659 | '@solana/web3.js': 1.87.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) 1660 | base64-js: 1.5.1 1661 | bn.js: 5.2.1 1662 | bs58: 4.0.1 1663 | buffer-layout: 1.2.2 1664 | camelcase: 6.3.0 1665 | cross-fetch: 3.1.5 1666 | crypto-hash: 1.3.0 1667 | eventemitter3: 4.0.7 1668 | js-sha256: 0.9.0 1669 | pako: 2.1.0 1670 | snake-case: 3.0.4 1671 | superstruct: 0.15.5 1672 | toml: 3.0.0 1673 | transitivePeerDependencies: 1674 | - bufferutil 1675 | - encoding 1676 | - utf-8-validate 1677 | 1678 | '@sinclair/typebox@0.27.8': {} 1679 | 1680 | '@solana/buffer-layout@4.0.1': 1681 | dependencies: 1682 | buffer: 6.0.3 1683 | 1684 | '@solana/web3.js@1.87.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': 1685 | dependencies: 1686 | '@babel/runtime': 7.23.6 1687 | '@noble/curves': 1.3.0 1688 | '@noble/hashes': 1.3.3 1689 | '@solana/buffer-layout': 4.0.1 1690 | agentkeepalive: 4.5.0 1691 | bigint-buffer: 1.1.5 1692 | bn.js: 5.2.1 1693 | borsh: 0.7.0 1694 | bs58: 4.0.1 1695 | buffer: 6.0.3 1696 | fast-stable-stringify: 1.0.0 1697 | jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) 1698 | node-fetch: 2.7.0 1699 | rpc-websockets: 7.8.0 1700 | superstruct: 0.14.2 1701 | transitivePeerDependencies: 1702 | - bufferutil 1703 | - encoding 1704 | - utf-8-validate 1705 | 1706 | '@tsconfig/node10@1.0.9': {} 1707 | 1708 | '@tsconfig/node12@1.0.11': {} 1709 | 1710 | '@tsconfig/node14@1.0.3': {} 1711 | 1712 | '@tsconfig/node16@1.0.3': {} 1713 | 1714 | '@types/chai-subset@1.3.5': 1715 | dependencies: 1716 | '@types/chai': 4.3.11 1717 | 1718 | '@types/chai@4.3.11': {} 1719 | 1720 | '@types/connect@3.4.38': 1721 | dependencies: 1722 | '@types/node': 20.4.4 1723 | 1724 | '@types/node@12.20.55': {} 1725 | 1726 | '@types/node@20.4.4': {} 1727 | 1728 | '@types/promise-retry@1.1.3': 1729 | dependencies: 1730 | '@types/retry': 0.12.5 1731 | 1732 | '@types/retry@0.12.5': {} 1733 | 1734 | '@types/ws@7.4.7': 1735 | dependencies: 1736 | '@types/node': 20.4.4 1737 | 1738 | '@vitest/expect@0.34.1': 1739 | dependencies: 1740 | '@vitest/spy': 0.34.1 1741 | '@vitest/utils': 0.34.1 1742 | chai: 4.3.10 1743 | 1744 | '@vitest/runner@0.34.1': 1745 | dependencies: 1746 | '@vitest/utils': 0.34.1 1747 | p-limit: 4.0.0 1748 | pathe: 1.1.1 1749 | 1750 | '@vitest/snapshot@0.34.1': 1751 | dependencies: 1752 | magic-string: 0.30.5 1753 | pathe: 1.1.1 1754 | pretty-format: 29.7.0 1755 | 1756 | '@vitest/spy@0.34.1': 1757 | dependencies: 1758 | tinyspy: 2.2.0 1759 | 1760 | '@vitest/utils@0.34.1': 1761 | dependencies: 1762 | diff-sequences: 29.6.3 1763 | loupe: 2.3.7 1764 | pretty-format: 29.7.0 1765 | 1766 | JSONStream@1.3.5: 1767 | dependencies: 1768 | jsonparse: 1.3.1 1769 | through: 2.3.8 1770 | 1771 | acorn-walk@8.2.0: {} 1772 | 1773 | acorn@8.11.2: {} 1774 | 1775 | acorn@8.8.0: {} 1776 | 1777 | agentkeepalive@4.5.0: 1778 | dependencies: 1779 | humanize-ms: 1.2.1 1780 | 1781 | ansi-escapes@4.3.2: 1782 | dependencies: 1783 | type-fest: 0.21.3 1784 | 1785 | ansi-regex@5.0.1: {} 1786 | 1787 | ansi-styles@4.3.0: 1788 | dependencies: 1789 | color-convert: 2.0.1 1790 | 1791 | ansi-styles@5.2.0: {} 1792 | 1793 | any-promise@1.3.0: {} 1794 | 1795 | anymatch@3.1.2: 1796 | dependencies: 1797 | normalize-path: 3.0.0 1798 | picomatch: 2.3.1 1799 | 1800 | arg@4.1.3: {} 1801 | 1802 | array-union@2.1.0: {} 1803 | 1804 | assertion-error@1.1.0: {} 1805 | 1806 | asynckit@0.4.0: {} 1807 | 1808 | axios@1.6.5: 1809 | dependencies: 1810 | follow-redirects: 1.15.5 1811 | form-data: 4.0.0 1812 | proxy-from-env: 1.1.0 1813 | transitivePeerDependencies: 1814 | - debug 1815 | 1816 | balanced-match@1.0.2: {} 1817 | 1818 | base-x@3.0.9: 1819 | dependencies: 1820 | safe-buffer: 5.2.1 1821 | 1822 | base-x@4.0.0: {} 1823 | 1824 | base64-js@1.5.1: {} 1825 | 1826 | bigint-buffer@1.1.5: 1827 | dependencies: 1828 | bindings: 1.5.0 1829 | 1830 | binary-extensions@2.2.0: {} 1831 | 1832 | bindings@1.5.0: 1833 | dependencies: 1834 | file-uri-to-path: 1.0.0 1835 | 1836 | bl@4.1.0: 1837 | dependencies: 1838 | buffer: 5.7.1 1839 | inherits: 2.0.4 1840 | readable-stream: 3.6.0 1841 | 1842 | bn.js@5.2.1: {} 1843 | 1844 | borsh@0.7.0: 1845 | dependencies: 1846 | bn.js: 5.2.1 1847 | bs58: 4.0.1 1848 | text-encoding-utf-8: 1.0.2 1849 | 1850 | brace-expansion@1.1.11: 1851 | dependencies: 1852 | balanced-match: 1.0.2 1853 | concat-map: 0.0.1 1854 | 1855 | braces@3.0.2: 1856 | dependencies: 1857 | fill-range: 7.0.1 1858 | 1859 | bs58@4.0.1: 1860 | dependencies: 1861 | base-x: 3.0.9 1862 | 1863 | bs58@5.0.0: 1864 | dependencies: 1865 | base-x: 4.0.0 1866 | 1867 | buffer-layout@1.2.2: {} 1868 | 1869 | buffer@5.7.1: 1870 | dependencies: 1871 | base64-js: 1.5.1 1872 | ieee754: 1.2.1 1873 | 1874 | buffer@6.0.3: 1875 | dependencies: 1876 | base64-js: 1.5.1 1877 | ieee754: 1.2.1 1878 | 1879 | bufferutil@4.0.8: 1880 | dependencies: 1881 | node-gyp-build: 4.7.1 1882 | optional: true 1883 | 1884 | bundle-require@4.0.1(esbuild@0.18.16): 1885 | dependencies: 1886 | esbuild: 0.18.16 1887 | load-tsconfig: 0.2.3 1888 | 1889 | cac@6.7.14: {} 1890 | 1891 | camelcase@6.3.0: {} 1892 | 1893 | chai@4.3.10: 1894 | dependencies: 1895 | assertion-error: 1.1.0 1896 | check-error: 1.0.3 1897 | deep-eql: 4.1.3 1898 | get-func-name: 2.0.2 1899 | loupe: 2.3.7 1900 | pathval: 1.1.1 1901 | type-detect: 4.0.8 1902 | 1903 | chalk@4.1.2: 1904 | dependencies: 1905 | ansi-styles: 4.3.0 1906 | supports-color: 7.2.0 1907 | 1908 | chardet@0.7.0: {} 1909 | 1910 | check-error@1.0.3: 1911 | dependencies: 1912 | get-func-name: 2.0.2 1913 | 1914 | chokidar@3.5.3: 1915 | dependencies: 1916 | anymatch: 3.1.2 1917 | braces: 3.0.2 1918 | glob-parent: 5.1.2 1919 | is-binary-path: 2.1.0 1920 | is-glob: 4.0.3 1921 | normalize-path: 3.0.0 1922 | readdirp: 3.6.0 1923 | optionalDependencies: 1924 | fsevents: 2.3.2 1925 | 1926 | cli-cursor@3.1.0: 1927 | dependencies: 1928 | restore-cursor: 3.1.0 1929 | 1930 | cli-spinners@2.7.0: {} 1931 | 1932 | cli-width@3.0.0: {} 1933 | 1934 | cliui@7.0.4: 1935 | dependencies: 1936 | string-width: 4.2.3 1937 | strip-ansi: 6.0.1 1938 | wrap-ansi: 7.0.0 1939 | 1940 | clone@1.0.4: {} 1941 | 1942 | color-convert@2.0.1: 1943 | dependencies: 1944 | color-name: 1.1.4 1945 | 1946 | color-name@1.1.4: {} 1947 | 1948 | combined-stream@1.0.8: 1949 | dependencies: 1950 | delayed-stream: 1.0.0 1951 | 1952 | commander@2.20.3: {} 1953 | 1954 | commander@4.1.1: {} 1955 | 1956 | commander@8.3.0: {} 1957 | 1958 | compare-versions@4.1.4: {} 1959 | 1960 | concat-map@0.0.1: {} 1961 | 1962 | concurrently@6.5.1: 1963 | dependencies: 1964 | chalk: 4.1.2 1965 | date-fns: 2.29.3 1966 | lodash: 4.17.21 1967 | rxjs: 6.6.7 1968 | spawn-command: 0.0.2-1 1969 | supports-color: 8.1.1 1970 | tree-kill: 1.2.2 1971 | yargs: 16.2.0 1972 | 1973 | consola@2.15.3: {} 1974 | 1975 | console.table@0.10.0: 1976 | dependencies: 1977 | easy-table: 1.1.0 1978 | 1979 | create-require@1.1.1: {} 1980 | 1981 | cross-fetch@3.1.5: 1982 | dependencies: 1983 | node-fetch: 2.6.7 1984 | transitivePeerDependencies: 1985 | - encoding 1986 | 1987 | cross-spawn@7.0.3: 1988 | dependencies: 1989 | path-key: 3.1.1 1990 | shebang-command: 2.0.0 1991 | which: 2.0.2 1992 | 1993 | crypto-hash@1.3.0: {} 1994 | 1995 | date-fns@2.29.3: {} 1996 | 1997 | debug@4.3.4: 1998 | dependencies: 1999 | ms: 2.1.2 2000 | 2001 | deep-eql@4.1.3: 2002 | dependencies: 2003 | type-detect: 4.0.8 2004 | 2005 | defaults@1.0.3: 2006 | dependencies: 2007 | clone: 1.0.4 2008 | 2009 | delay@5.0.0: {} 2010 | 2011 | delayed-stream@1.0.0: {} 2012 | 2013 | diff-sequences@29.6.3: {} 2014 | 2015 | diff@4.0.2: {} 2016 | 2017 | dir-glob@3.0.1: 2018 | dependencies: 2019 | path-type: 4.0.0 2020 | 2021 | dot-case@3.0.4: 2022 | dependencies: 2023 | no-case: 3.0.4 2024 | tslib: 2.5.0 2025 | 2026 | dotenv@16.4.7: {} 2027 | 2028 | easy-table@1.1.0: 2029 | optionalDependencies: 2030 | wcwidth: 1.0.1 2031 | 2032 | emoji-regex@8.0.0: {} 2033 | 2034 | err-code@2.0.3: {} 2035 | 2036 | es6-promise@4.2.8: {} 2037 | 2038 | es6-promisify@5.0.0: 2039 | dependencies: 2040 | es6-promise: 4.2.8 2041 | 2042 | esbuild@0.18.16: 2043 | optionalDependencies: 2044 | '@esbuild/android-arm': 0.18.16 2045 | '@esbuild/android-arm64': 0.18.16 2046 | '@esbuild/android-x64': 0.18.16 2047 | '@esbuild/darwin-arm64': 0.18.16 2048 | '@esbuild/darwin-x64': 0.18.16 2049 | '@esbuild/freebsd-arm64': 0.18.16 2050 | '@esbuild/freebsd-x64': 0.18.16 2051 | '@esbuild/linux-arm': 0.18.16 2052 | '@esbuild/linux-arm64': 0.18.16 2053 | '@esbuild/linux-ia32': 0.18.16 2054 | '@esbuild/linux-loong64': 0.18.16 2055 | '@esbuild/linux-mips64el': 0.18.16 2056 | '@esbuild/linux-ppc64': 0.18.16 2057 | '@esbuild/linux-riscv64': 0.18.16 2058 | '@esbuild/linux-s390x': 0.18.16 2059 | '@esbuild/linux-x64': 0.18.16 2060 | '@esbuild/netbsd-x64': 0.18.16 2061 | '@esbuild/openbsd-x64': 0.18.16 2062 | '@esbuild/sunos-x64': 0.18.16 2063 | '@esbuild/win32-arm64': 0.18.16 2064 | '@esbuild/win32-ia32': 0.18.16 2065 | '@esbuild/win32-x64': 0.18.16 2066 | 2067 | escalade@3.1.1: {} 2068 | 2069 | escape-string-regexp@1.0.5: {} 2070 | 2071 | eventemitter3@4.0.7: {} 2072 | 2073 | execa@5.1.1: 2074 | dependencies: 2075 | cross-spawn: 7.0.3 2076 | get-stream: 6.0.1 2077 | human-signals: 2.1.0 2078 | is-stream: 2.0.1 2079 | merge-stream: 2.0.0 2080 | npm-run-path: 4.0.1 2081 | onetime: 5.1.2 2082 | signal-exit: 3.0.7 2083 | strip-final-newline: 2.0.0 2084 | 2085 | external-editor@3.1.0: 2086 | dependencies: 2087 | chardet: 0.7.0 2088 | iconv-lite: 0.4.24 2089 | tmp: 0.0.33 2090 | 2091 | eyes@0.1.8: {} 2092 | 2093 | fast-glob@3.2.12: 2094 | dependencies: 2095 | '@nodelib/fs.stat': 2.0.5 2096 | '@nodelib/fs.walk': 1.2.8 2097 | glob-parent: 5.1.2 2098 | merge2: 1.4.1 2099 | micromatch: 4.0.5 2100 | 2101 | fast-safe-stringify@2.1.1: {} 2102 | 2103 | fast-stable-stringify@1.0.0: {} 2104 | 2105 | fastq@1.13.0: 2106 | dependencies: 2107 | reusify: 1.0.4 2108 | 2109 | figures@3.2.0: 2110 | dependencies: 2111 | escape-string-regexp: 1.0.5 2112 | 2113 | file-uri-to-path@1.0.0: {} 2114 | 2115 | fill-range@7.0.1: 2116 | dependencies: 2117 | to-regex-range: 5.0.1 2118 | 2119 | follow-redirects@1.15.5: {} 2120 | 2121 | form-data@4.0.0: 2122 | dependencies: 2123 | asynckit: 0.4.0 2124 | combined-stream: 1.0.8 2125 | mime-types: 2.1.35 2126 | 2127 | fs-extra@10.1.0: 2128 | dependencies: 2129 | graceful-fs: 4.2.10 2130 | jsonfile: 6.1.0 2131 | universalify: 2.0.0 2132 | 2133 | fs.realpath@1.0.0: {} 2134 | 2135 | fsevents@2.3.2: 2136 | optional: true 2137 | 2138 | get-caller-file@2.0.5: {} 2139 | 2140 | get-func-name@2.0.2: {} 2141 | 2142 | get-stream@6.0.1: {} 2143 | 2144 | glob-parent@5.1.2: 2145 | dependencies: 2146 | is-glob: 4.0.3 2147 | 2148 | glob@7.1.6: 2149 | dependencies: 2150 | fs.realpath: 1.0.0 2151 | inflight: 1.0.6 2152 | inherits: 2.0.4 2153 | minimatch: 3.1.2 2154 | once: 1.4.0 2155 | path-is-absolute: 1.0.1 2156 | 2157 | glob@7.2.3: 2158 | dependencies: 2159 | fs.realpath: 1.0.0 2160 | inflight: 1.0.6 2161 | inherits: 2.0.4 2162 | minimatch: 3.1.2 2163 | once: 1.4.0 2164 | path-is-absolute: 1.0.1 2165 | 2166 | globby@11.1.0: 2167 | dependencies: 2168 | array-union: 2.1.0 2169 | dir-glob: 3.0.1 2170 | fast-glob: 3.2.12 2171 | ignore: 5.2.0 2172 | merge2: 1.4.1 2173 | slash: 3.0.0 2174 | 2175 | graceful-fs@4.2.10: {} 2176 | 2177 | has-flag@4.0.0: {} 2178 | 2179 | human-signals@2.1.0: {} 2180 | 2181 | humanize-ms@1.2.1: 2182 | dependencies: 2183 | ms: 2.1.2 2184 | 2185 | iconv-lite@0.4.24: 2186 | dependencies: 2187 | safer-buffer: 2.1.2 2188 | 2189 | ieee754@1.2.1: {} 2190 | 2191 | ignore@5.2.0: {} 2192 | 2193 | inflight@1.0.6: 2194 | dependencies: 2195 | once: 1.4.0 2196 | wrappy: 1.0.2 2197 | 2198 | inherits@2.0.4: {} 2199 | 2200 | inquirer@8.2.6: 2201 | dependencies: 2202 | ansi-escapes: 4.3.2 2203 | chalk: 4.1.2 2204 | cli-cursor: 3.1.0 2205 | cli-width: 3.0.0 2206 | external-editor: 3.1.0 2207 | figures: 3.2.0 2208 | lodash: 4.17.21 2209 | mute-stream: 0.0.8 2210 | ora: 5.4.1 2211 | run-async: 2.4.1 2212 | rxjs: 7.8.1 2213 | string-width: 4.2.3 2214 | strip-ansi: 6.0.1 2215 | through: 2.3.8 2216 | wrap-ansi: 6.2.0 2217 | 2218 | is-binary-path@2.1.0: 2219 | dependencies: 2220 | binary-extensions: 2.2.0 2221 | 2222 | is-extglob@2.1.1: {} 2223 | 2224 | is-fullwidth-code-point@3.0.0: {} 2225 | 2226 | is-glob@4.0.3: 2227 | dependencies: 2228 | is-extglob: 2.1.1 2229 | 2230 | is-interactive@1.0.0: {} 2231 | 2232 | is-number@7.0.0: {} 2233 | 2234 | is-stream@2.0.1: {} 2235 | 2236 | is-unicode-supported@0.1.0: {} 2237 | 2238 | isexe@2.0.0: {} 2239 | 2240 | isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): 2241 | dependencies: 2242 | ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) 2243 | 2244 | iterare@1.2.1: {} 2245 | 2246 | jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): 2247 | dependencies: 2248 | '@types/connect': 3.4.38 2249 | '@types/node': 12.20.55 2250 | '@types/ws': 7.4.7 2251 | JSONStream: 1.3.5 2252 | commander: 2.20.3 2253 | delay: 5.0.0 2254 | es6-promisify: 5.0.0 2255 | eyes: 0.1.8 2256 | isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) 2257 | json-stringify-safe: 5.0.1 2258 | uuid: 8.3.2 2259 | ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) 2260 | transitivePeerDependencies: 2261 | - bufferutil 2262 | - utf-8-validate 2263 | 2264 | joycon@3.1.1: {} 2265 | 2266 | js-sha256@0.9.0: {} 2267 | 2268 | json-stringify-safe@5.0.1: {} 2269 | 2270 | jsonc-parser@3.2.0: {} 2271 | 2272 | jsonfile@6.1.0: 2273 | dependencies: 2274 | universalify: 2.0.0 2275 | optionalDependencies: 2276 | graceful-fs: 4.2.10 2277 | 2278 | jsonparse@1.3.1: {} 2279 | 2280 | lilconfig@2.0.6: {} 2281 | 2282 | lines-and-columns@1.2.4: {} 2283 | 2284 | load-tsconfig@0.2.3: {} 2285 | 2286 | local-pkg@0.4.3: {} 2287 | 2288 | lodash.sortby@4.7.0: {} 2289 | 2290 | lodash@4.17.21: {} 2291 | 2292 | log-symbols@4.1.0: 2293 | dependencies: 2294 | chalk: 4.1.2 2295 | is-unicode-supported: 0.1.0 2296 | 2297 | loupe@2.3.7: 2298 | dependencies: 2299 | get-func-name: 2.0.2 2300 | 2301 | lower-case@2.0.2: 2302 | dependencies: 2303 | tslib: 2.5.0 2304 | 2305 | magic-string@0.30.5: 2306 | dependencies: 2307 | '@jridgewell/sourcemap-codec': 1.4.15 2308 | 2309 | make-error@1.3.6: {} 2310 | 2311 | merge-stream@2.0.0: {} 2312 | 2313 | merge2@1.4.1: {} 2314 | 2315 | micromatch@4.0.5: 2316 | dependencies: 2317 | braces: 3.0.2 2318 | picomatch: 2.3.1 2319 | 2320 | mime-db@1.52.0: {} 2321 | 2322 | mime-types@2.1.35: 2323 | dependencies: 2324 | mime-db: 1.52.0 2325 | 2326 | mimic-fn@2.1.0: {} 2327 | 2328 | minimatch@3.1.2: 2329 | dependencies: 2330 | brace-expansion: 1.1.11 2331 | 2332 | mlly@1.4.2: 2333 | dependencies: 2334 | acorn: 8.11.2 2335 | pathe: 1.1.1 2336 | pkg-types: 1.0.3 2337 | ufo: 1.3.2 2338 | 2339 | ms@2.1.2: {} 2340 | 2341 | mute-stream@0.0.8: {} 2342 | 2343 | mz@2.7.0: 2344 | dependencies: 2345 | any-promise: 1.3.0 2346 | object-assign: 4.1.1 2347 | thenify-all: 1.6.0 2348 | 2349 | nanoid@3.3.7: {} 2350 | 2351 | no-case@3.0.4: 2352 | dependencies: 2353 | lower-case: 2.0.2 2354 | tslib: 2.5.0 2355 | 2356 | node-fetch@2.6.7: 2357 | dependencies: 2358 | whatwg-url: 5.0.0 2359 | 2360 | node-fetch@2.7.0: 2361 | dependencies: 2362 | whatwg-url: 5.0.0 2363 | 2364 | node-gyp-build@4.7.1: 2365 | optional: true 2366 | 2367 | normalize-path@3.0.0: {} 2368 | 2369 | npm-run-path@4.0.1: 2370 | dependencies: 2371 | path-key: 3.1.1 2372 | 2373 | object-assign@4.1.1: {} 2374 | 2375 | once@1.4.0: 2376 | dependencies: 2377 | wrappy: 1.0.2 2378 | 2379 | onetime@5.1.2: 2380 | dependencies: 2381 | mimic-fn: 2.1.0 2382 | 2383 | ora@5.4.1: 2384 | dependencies: 2385 | bl: 4.1.0 2386 | chalk: 4.1.2 2387 | cli-cursor: 3.1.0 2388 | cli-spinners: 2.7.0 2389 | is-interactive: 1.0.0 2390 | is-unicode-supported: 0.1.0 2391 | log-symbols: 4.1.0 2392 | strip-ansi: 6.0.1 2393 | wcwidth: 1.0.1 2394 | 2395 | os-tmpdir@1.0.2: {} 2396 | 2397 | p-limit@4.0.0: 2398 | dependencies: 2399 | yocto-queue: 1.0.0 2400 | 2401 | pako@2.1.0: {} 2402 | 2403 | path-is-absolute@1.0.1: {} 2404 | 2405 | path-key@3.1.1: {} 2406 | 2407 | path-to-regexp@3.2.0: {} 2408 | 2409 | path-type@4.0.0: {} 2410 | 2411 | pathe@1.1.1: {} 2412 | 2413 | pathval@1.1.1: {} 2414 | 2415 | picocolors@1.0.0: {} 2416 | 2417 | picomatch@2.3.1: {} 2418 | 2419 | pirates@4.0.5: {} 2420 | 2421 | pkg-types@1.0.3: 2422 | dependencies: 2423 | jsonc-parser: 3.2.0 2424 | mlly: 1.4.2 2425 | pathe: 1.1.1 2426 | 2427 | postcss-load-config@4.0.1(postcss@8.4.32)(ts-node@10.9.1(@types/node@20.4.4)(typescript@5.1.6)): 2428 | dependencies: 2429 | lilconfig: 2.0.6 2430 | yaml: 2.3.1 2431 | optionalDependencies: 2432 | postcss: 8.4.32 2433 | ts-node: 10.9.1(@types/node@20.4.4)(typescript@5.1.6) 2434 | 2435 | postcss@8.4.32: 2436 | dependencies: 2437 | nanoid: 3.3.7 2438 | picocolors: 1.0.0 2439 | source-map-js: 1.0.2 2440 | 2441 | pretty-format@29.7.0: 2442 | dependencies: 2443 | '@jest/schemas': 29.6.3 2444 | ansi-styles: 5.2.0 2445 | react-is: 18.2.0 2446 | 2447 | promise-retry@2.0.1: 2448 | dependencies: 2449 | err-code: 2.0.3 2450 | retry: 0.12.0 2451 | 2452 | proxy-from-env@1.1.0: {} 2453 | 2454 | punycode@2.1.1: {} 2455 | 2456 | queue-microtask@1.2.3: {} 2457 | 2458 | react-is@18.2.0: {} 2459 | 2460 | readable-stream@3.6.0: 2461 | dependencies: 2462 | inherits: 2.0.4 2463 | string_decoder: 1.3.0 2464 | util-deprecate: 1.0.2 2465 | 2466 | readdirp@3.6.0: 2467 | dependencies: 2468 | picomatch: 2.3.1 2469 | 2470 | reflect-metadata@0.1.13: {} 2471 | 2472 | regenerator-runtime@0.14.0: {} 2473 | 2474 | require-directory@2.1.1: {} 2475 | 2476 | resolve-from@5.0.0: {} 2477 | 2478 | restore-cursor@3.1.0: 2479 | dependencies: 2480 | onetime: 5.1.2 2481 | signal-exit: 3.0.7 2482 | 2483 | retry@0.12.0: {} 2484 | 2485 | reusify@1.0.4: {} 2486 | 2487 | rollup@3.26.3: 2488 | optionalDependencies: 2489 | fsevents: 2.3.2 2490 | 2491 | rollup@3.29.4: 2492 | optionalDependencies: 2493 | fsevents: 2.3.2 2494 | 2495 | rpc-websockets@7.8.0: 2496 | dependencies: 2497 | '@babel/runtime': 7.23.6 2498 | eventemitter3: 4.0.7 2499 | uuid: 8.3.2 2500 | ws: 8.15.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) 2501 | optionalDependencies: 2502 | bufferutil: 4.0.8 2503 | utf-8-validate: 5.0.10 2504 | 2505 | run-async@2.4.1: {} 2506 | 2507 | run-parallel@1.2.0: 2508 | dependencies: 2509 | queue-microtask: 1.2.3 2510 | 2511 | rxjs@6.6.7: 2512 | dependencies: 2513 | tslib: 1.14.1 2514 | 2515 | rxjs@7.8.1: 2516 | dependencies: 2517 | tslib: 2.6.2 2518 | 2519 | safe-buffer@5.2.1: {} 2520 | 2521 | safer-buffer@2.1.2: {} 2522 | 2523 | shebang-command@2.0.0: 2524 | dependencies: 2525 | shebang-regex: 3.0.0 2526 | 2527 | shebang-regex@3.0.0: {} 2528 | 2529 | siginfo@2.0.0: {} 2530 | 2531 | signal-exit@3.0.7: {} 2532 | 2533 | slash@3.0.0: {} 2534 | 2535 | snake-case@3.0.4: 2536 | dependencies: 2537 | dot-case: 3.0.4 2538 | tslib: 2.5.0 2539 | 2540 | source-map-js@1.0.2: {} 2541 | 2542 | source-map@0.8.0-beta.0: 2543 | dependencies: 2544 | whatwg-url: 7.1.0 2545 | 2546 | spawn-command@0.0.2-1: {} 2547 | 2548 | stackback@0.0.2: {} 2549 | 2550 | std-env@3.6.0: {} 2551 | 2552 | string-width@4.2.3: 2553 | dependencies: 2554 | emoji-regex: 8.0.0 2555 | is-fullwidth-code-point: 3.0.0 2556 | strip-ansi: 6.0.1 2557 | 2558 | string_decoder@1.3.0: 2559 | dependencies: 2560 | safe-buffer: 5.2.1 2561 | 2562 | strip-ansi@6.0.1: 2563 | dependencies: 2564 | ansi-regex: 5.0.1 2565 | 2566 | strip-final-newline@2.0.0: {} 2567 | 2568 | strip-literal@1.3.0: 2569 | dependencies: 2570 | acorn: 8.11.2 2571 | 2572 | sucrase@3.28.0: 2573 | dependencies: 2574 | commander: 4.1.1 2575 | glob: 7.1.6 2576 | lines-and-columns: 1.2.4 2577 | mz: 2.7.0 2578 | pirates: 4.0.5 2579 | ts-interface-checker: 0.1.13 2580 | 2581 | superstruct@0.14.2: {} 2582 | 2583 | superstruct@0.15.5: {} 2584 | 2585 | supports-color@7.2.0: 2586 | dependencies: 2587 | has-flag: 4.0.0 2588 | 2589 | supports-color@8.1.1: 2590 | dependencies: 2591 | has-flag: 4.0.0 2592 | 2593 | text-encoding-utf-8@1.0.2: {} 2594 | 2595 | thenify-all@1.6.0: 2596 | dependencies: 2597 | thenify: 3.3.1 2598 | 2599 | thenify@3.3.1: 2600 | dependencies: 2601 | any-promise: 1.3.0 2602 | 2603 | through@2.3.8: {} 2604 | 2605 | tinybench@2.5.1: {} 2606 | 2607 | tinypool@0.7.0: {} 2608 | 2609 | tinyspy@2.2.0: {} 2610 | 2611 | tmp@0.0.33: 2612 | dependencies: 2613 | os-tmpdir: 1.0.2 2614 | 2615 | to-regex-range@5.0.1: 2616 | dependencies: 2617 | is-number: 7.0.0 2618 | 2619 | toml@3.0.0: {} 2620 | 2621 | tr46@0.0.3: {} 2622 | 2623 | tr46@1.0.1: 2624 | dependencies: 2625 | punycode: 2.1.1 2626 | 2627 | tree-kill@1.2.2: {} 2628 | 2629 | ts-interface-checker@0.1.13: {} 2630 | 2631 | ts-node@10.9.1(@types/node@20.4.4)(typescript@5.1.6): 2632 | dependencies: 2633 | '@cspotcode/source-map-support': 0.8.1 2634 | '@tsconfig/node10': 1.0.9 2635 | '@tsconfig/node12': 1.0.11 2636 | '@tsconfig/node14': 1.0.3 2637 | '@tsconfig/node16': 1.0.3 2638 | '@types/node': 20.4.4 2639 | acorn: 8.8.0 2640 | acorn-walk: 8.2.0 2641 | arg: 4.1.3 2642 | create-require: 1.1.1 2643 | diff: 4.0.2 2644 | make-error: 1.3.6 2645 | typescript: 5.1.6 2646 | v8-compile-cache-lib: 3.0.1 2647 | yn: 3.1.1 2648 | 2649 | tslib@1.14.1: {} 2650 | 2651 | tslib@2.5.0: {} 2652 | 2653 | tslib@2.6.2: {} 2654 | 2655 | tsup@7.1.0(postcss@8.4.32)(ts-node@10.9.1(@types/node@20.4.4)(typescript@5.1.6))(typescript@5.1.6): 2656 | dependencies: 2657 | bundle-require: 4.0.1(esbuild@0.18.16) 2658 | cac: 6.7.14 2659 | chokidar: 3.5.3 2660 | debug: 4.3.4 2661 | esbuild: 0.18.16 2662 | execa: 5.1.1 2663 | globby: 11.1.0 2664 | joycon: 3.1.1 2665 | postcss-load-config: 4.0.1(postcss@8.4.32)(ts-node@10.9.1(@types/node@20.4.4)(typescript@5.1.6)) 2666 | resolve-from: 5.0.0 2667 | rollup: 3.26.3 2668 | source-map: 0.8.0-beta.0 2669 | sucrase: 3.28.0 2670 | tree-kill: 1.2.2 2671 | optionalDependencies: 2672 | postcss: 8.4.32 2673 | typescript: 5.1.6 2674 | transitivePeerDependencies: 2675 | - supports-color 2676 | - ts-node 2677 | 2678 | type-detect@4.0.8: {} 2679 | 2680 | type-fest@0.21.3: {} 2681 | 2682 | typescript@5.1.6: {} 2683 | 2684 | ufo@1.3.2: {} 2685 | 2686 | uid@2.0.2: 2687 | dependencies: 2688 | '@lukeed/csprng': 1.1.0 2689 | 2690 | universalify@2.0.0: {} 2691 | 2692 | utf-8-validate@5.0.10: 2693 | dependencies: 2694 | node-gyp-build: 4.7.1 2695 | optional: true 2696 | 2697 | util-deprecate@1.0.2: {} 2698 | 2699 | uuid@8.3.2: {} 2700 | 2701 | v8-compile-cache-lib@3.0.1: {} 2702 | 2703 | vite-node@0.34.1(@types/node@20.4.4): 2704 | dependencies: 2705 | cac: 6.7.14 2706 | debug: 4.3.4 2707 | mlly: 1.4.2 2708 | pathe: 1.1.1 2709 | picocolors: 1.0.0 2710 | vite: 4.5.1(@types/node@20.4.4) 2711 | transitivePeerDependencies: 2712 | - '@types/node' 2713 | - less 2714 | - lightningcss 2715 | - sass 2716 | - stylus 2717 | - sugarss 2718 | - supports-color 2719 | - terser 2720 | 2721 | vite@4.5.1(@types/node@20.4.4): 2722 | dependencies: 2723 | esbuild: 0.18.16 2724 | postcss: 8.4.32 2725 | rollup: 3.29.4 2726 | optionalDependencies: 2727 | '@types/node': 20.4.4 2728 | fsevents: 2.3.2 2729 | 2730 | vitest@0.34.1: 2731 | dependencies: 2732 | '@types/chai': 4.3.11 2733 | '@types/chai-subset': 1.3.5 2734 | '@types/node': 20.4.4 2735 | '@vitest/expect': 0.34.1 2736 | '@vitest/runner': 0.34.1 2737 | '@vitest/snapshot': 0.34.1 2738 | '@vitest/spy': 0.34.1 2739 | '@vitest/utils': 0.34.1 2740 | acorn: 8.11.2 2741 | acorn-walk: 8.2.0 2742 | cac: 6.7.14 2743 | chai: 4.3.10 2744 | debug: 4.3.4 2745 | local-pkg: 0.4.3 2746 | magic-string: 0.30.5 2747 | pathe: 1.1.1 2748 | picocolors: 1.0.0 2749 | std-env: 3.6.0 2750 | strip-literal: 1.3.0 2751 | tinybench: 2.5.1 2752 | tinypool: 0.7.0 2753 | vite: 4.5.1(@types/node@20.4.4) 2754 | vite-node: 0.34.1(@types/node@20.4.4) 2755 | why-is-node-running: 2.2.2 2756 | transitivePeerDependencies: 2757 | - less 2758 | - lightningcss 2759 | - sass 2760 | - stylus 2761 | - sugarss 2762 | - supports-color 2763 | - terser 2764 | 2765 | wcwidth@1.0.1: 2766 | dependencies: 2767 | defaults: 1.0.3 2768 | 2769 | webidl-conversions@3.0.1: {} 2770 | 2771 | webidl-conversions@4.0.2: {} 2772 | 2773 | whatwg-url@5.0.0: 2774 | dependencies: 2775 | tr46: 0.0.3 2776 | webidl-conversions: 3.0.1 2777 | 2778 | whatwg-url@7.1.0: 2779 | dependencies: 2780 | lodash.sortby: 4.7.0 2781 | tr46: 1.0.1 2782 | webidl-conversions: 4.0.2 2783 | 2784 | which@2.0.2: 2785 | dependencies: 2786 | isexe: 2.0.0 2787 | 2788 | why-is-node-running@2.2.2: 2789 | dependencies: 2790 | siginfo: 2.0.0 2791 | stackback: 0.0.2 2792 | 2793 | wrap-ansi@6.2.0: 2794 | dependencies: 2795 | ansi-styles: 4.3.0 2796 | string-width: 4.2.3 2797 | strip-ansi: 6.0.1 2798 | 2799 | wrap-ansi@7.0.0: 2800 | dependencies: 2801 | ansi-styles: 4.3.0 2802 | string-width: 4.2.3 2803 | strip-ansi: 6.0.1 2804 | 2805 | wrappy@1.0.2: {} 2806 | 2807 | ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): 2808 | optionalDependencies: 2809 | bufferutil: 4.0.8 2810 | utf-8-validate: 5.0.10 2811 | 2812 | ws@8.15.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): 2813 | optionalDependencies: 2814 | bufferutil: 4.0.8 2815 | utf-8-validate: 5.0.10 2816 | 2817 | y18n@5.0.8: {} 2818 | 2819 | yaml@2.3.1: {} 2820 | 2821 | yargs-parser@20.2.9: {} 2822 | 2823 | yargs@16.2.0: 2824 | dependencies: 2825 | cliui: 7.0.4 2826 | escalade: 3.1.1 2827 | get-caller-file: 2.0.5 2828 | require-directory: 2.1.1 2829 | string-width: 4.2.3 2830 | y18n: 5.0.8 2831 | yargs-parser: 20.2.9 2832 | 2833 | yn@3.1.1: {} 2834 | 2835 | yocto-queue@1.0.0: {} 2836 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { SwapApi } from "../generated/apis/SwapApi"; 2 | import { ConfigurationParameters, Configuration } from "../generated/runtime"; 3 | 4 | // Define server URLs 5 | const PUBLIC_SERVER_URL = "https://lite-api.jup.ag/swap/v1"; 6 | const API_KEY_SERVER_URL = "https://api.jup.ag/swap/v1"; 7 | 8 | /** 9 | * Creates a Jupiter API client with optional API key support 10 | * @param config Configuration parameters 11 | * @returns SwapApi instance 12 | */ 13 | export const createJupiterApiClient = (config?: ConfigurationParameters) => { 14 | // Determine which server URL to use based on whether an API key is provided 15 | const hasApiKey = config?.apiKey !== undefined; 16 | 17 | // Create a new configuration with the appropriate base path 18 | const configWithServer: ConfigurationParameters = { 19 | ...config, 20 | basePath: hasApiKey ? API_KEY_SERVER_URL : PUBLIC_SERVER_URL, 21 | headers: hasApiKey ? { 'x-api-key': config?.apiKey as string } : undefined 22 | }; 23 | 24 | return new SwapApi(new Configuration(configWithServer)); 25 | }; 26 | 27 | export * from "../generated"; 28 | -------------------------------------------------------------------------------- /swagger.yaml: -------------------------------------------------------------------------------- 1 | openapi: '3.0.2' 2 | info: 3 | title: Swap API 4 | version: 1.0.0 5 | description: | 6 | The heart and soul of Jupiter lies in the Quote and Swap API. 7 | 8 | ### API Rate Limit 9 | Since 1 December 2024, we have updated our API structure. Please refer to [Developer Docs](https://dev.jup.ag/docs/) for further details on usage and rate limits. 10 | 11 | ### API Usage 12 | - API Wrapper Typescript [@jup-ag/api](https://github.com/jup-ag/jupiter-quote-api-node) 13 | 14 | ### Data Types To Note 15 | - Public keys are base58 encoded strings 16 | - Raw data such as Vec are base64 encoded strings 17 | 18 | servers: 19 | - url: https://lite-api.jup.ag/swap/v1 20 | description: Free tier API endpoint with rate limits 21 | - url: https://api.jup.ag/swap/v1 22 | description: Paid tier API endpoint with higher rate limits to be used with an API Key 23 | 24 | paths: 25 | /quote: 26 | get: 27 | operationId: QuoteGet 28 | tags: 29 | - Swap 30 | summary: quote 31 | description: | 32 | Request for a quote to be used in `POST /swap` 33 | 34 | :::note 35 | Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/get-quote) for more information 36 | ::: 37 | parameters: 38 | - $ref: '#/components/parameters/InputMintParameter' 39 | - $ref: '#/components/parameters/OutputMintParameter' 40 | - $ref: '#/components/parameters/AmountParameter' 41 | - $ref: '#/components/parameters/SlippageParameter' 42 | - $ref: '#/components/parameters/SwapModeParameter' 43 | - $ref: '#/components/parameters/DexesParameter' 44 | - $ref: '#/components/parameters/ExcludeDexesParameter' 45 | - $ref: '#/components/parameters/RestrictIntermediateTokensParameter' 46 | - $ref: '#/components/parameters/OnlyDirectRoutesParameter' 47 | - $ref: '#/components/parameters/AsLegacyTransactionParameter' 48 | - $ref: '#/components/parameters/PlatformFeeBpsParameter' 49 | - $ref: '#/components/parameters/MaxAccountsParameter' 50 | - $ref: '#/components/parameters/DynamicSlippage' 51 | responses: 52 | '200': 53 | description: "Successful response to be used in `/swap`" 54 | content: 55 | application/json: 56 | schema: 57 | $ref: '#/components/schemas/QuoteResponse' 58 | /swap: 59 | post: 60 | operationId: SwapPost 61 | tags: 62 | - Swap 63 | summary: swap 64 | description: | 65 | Request for a base64-encoded unsigned swap transaction based on the `/quote` response 66 | 67 | :::note 68 | Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/build-swap-transaction) for more information 69 | ::: 70 | requestBody: 71 | required: true 72 | content: 73 | application/json: 74 | schema: 75 | $ref: '#/components/schemas/SwapRequest' 76 | responses: 77 | '200': 78 | description: Successful response 79 | content: 80 | application/json: 81 | schema: 82 | $ref: '#/components/schemas/SwapResponse' 83 | /swap-instructions: 84 | post: 85 | operationId: SwapInstructionsPost 86 | tags: 87 | - Swap 88 | summary: swap-instructions 89 | description: | 90 | Request for swap instructions that you can use from the quote you get from `/quote` 91 | 92 | :::note 93 | Refer to [Swap API doc](https://dev.jup.ag/docs/swap-api/build-swap-transaction#build-your-own-transaction-with-instructions) for more information 94 | ::: 95 | requestBody: 96 | required: true 97 | content: 98 | application/json: 99 | schema: 100 | $ref: '#/components/schemas/SwapRequest' 101 | responses: 102 | '200': 103 | description: Successful response 104 | content: 105 | application/json: 106 | schema: 107 | $ref: '#/components/schemas/SwapInstructionsResponse' 108 | /program-id-to-label: 109 | get: 110 | operationId: ProgramIdToLabelGet 111 | tags: 112 | - Swap 113 | summary: program-id-to-label 114 | description: | 115 | Returns a hash, which key is the program id and value is the label. 116 | This is used to help map error from transaction by identifying the fault program id. 117 | This can be used in conjunction with the `excludeDexes` or `dexes` parameter. 118 | responses: 119 | '200': 120 | description: Default response 121 | content: 122 | application/json: 123 | schema: 124 | type: object 125 | additionalProperties: 126 | type: string 127 | 128 | components: 129 | schemas: 130 | Instruction: 131 | type: object 132 | properties: 133 | programId: 134 | type: string 135 | accounts: 136 | type: array 137 | items: 138 | $ref: '#/components/schemas/AccountMeta' 139 | data: 140 | type: string 141 | required: 142 | - programId 143 | - accounts 144 | - data 145 | 146 | AccountMeta: 147 | type: object 148 | properties: 149 | pubkey: 150 | type: string 151 | isSigner: 152 | type: boolean 153 | isWritable: 154 | type: boolean 155 | required: 156 | - pubkey 157 | - isSigner 158 | - isWritable 159 | 160 | QuoteResponse: 161 | type: object 162 | required: 163 | - inputMint 164 | - outputMint 165 | - inAmount 166 | - outAmount 167 | - otherAmountThreshold 168 | - swapMode 169 | - slippageBps 170 | - priceImpactPct 171 | - routePlan 172 | properties: 173 | inputMint: 174 | type: string 175 | inAmount: 176 | type: string 177 | outputMint: 178 | type: string 179 | outAmount: 180 | type: string 181 | description: | 182 | - Calculated output amount from routing engine 183 | - Exlcuding slippage or platform fees 184 | otherAmountThreshold: 185 | type: string 186 | description: | 187 | - Calculated minimum output amount after accounting for `slippageBps` and `platformFeeBps` 188 | - Not used by `/swap` endpoint to build transaction 189 | swapMode: 190 | $ref: '#/components/schemas/SwapMode' 191 | required: true 192 | slippageBps: 193 | type: integer 194 | format: int32 195 | platformFee: 196 | $ref: '#/components/schemas/PlatformFee' 197 | priceImpactPct: 198 | type: string 199 | routePlan: 200 | type: array 201 | items: 202 | $ref: '#/components/schemas/RoutePlanStep' 203 | contextSlot: 204 | type: number 205 | timeTaken: 206 | type: number 207 | 208 | SwapMode: 209 | type: string 210 | enum: 211 | - ExactIn 212 | - ExactOut 213 | 214 | PlatformFee: 215 | type: object 216 | properties: 217 | amount: 218 | type: string 219 | feeBps: 220 | type: integer 221 | format: int32 222 | 223 | RoutePlanStep: 224 | type: object 225 | properties: 226 | swapInfo: 227 | $ref: '#/components/schemas/SwapInfo' 228 | percent: 229 | type: integer 230 | format: int32 231 | required: 232 | - swapInfo 233 | - percent 234 | 235 | SwapInfo: 236 | type: object 237 | required: 238 | - ammKey 239 | - inputMint 240 | - outputMint 241 | - inAmount 242 | - outAmount 243 | - feeAmount 244 | - feeMint 245 | properties: 246 | ammKey: 247 | type: string 248 | label: 249 | type: string 250 | inputMint: 251 | type: string 252 | outputMint: 253 | type: string 254 | inAmount: 255 | type: string 256 | outAmount: 257 | type: string 258 | feeAmount: 259 | type: string 260 | feeMint: 261 | type: string 262 | 263 | SwapRequest: 264 | type: object 265 | required: 266 | - userPublicKey 267 | - quoteResponse 268 | properties: 269 | userPublicKey: 270 | type: string 271 | wrapAndUnwrapSol: 272 | description: | 273 | - To automatically wrap/unwrap SOL in the transaction 274 | - If false, it will use wSOL token account 275 | - Parameter will be ignored if `destinationTokenAccount` is set because the `destinationTokenAccount` may belong to a different user that we have no authority to close 276 | type: boolean 277 | default: true 278 | useSharedAccounts: 279 | description: | 280 | - The default is determined dynamically by the routing engine, allowing us to optimize for compute units, etc 281 | - This enables the usage of shared program accounts, this is essential as complex routing will require multiple intermediate token accounts which the user might not have 282 | - If true, you do not need to handle the creation of intermediate token accounts for the user 283 | - Do note, shared accounts route will fail on some new AMMs (low liquidity token) 284 | type: boolean 285 | feeAccount: 286 | description: | 287 | - An token account that will be used to collect fees 288 | - The mint of the token account **can only be either the input or output mint of the swap** 289 | - You no longer are required to use the Referral Program 290 | - See [Add Fees](/docs/swap-api/add-fees-to-swap) guide for more details 291 | type: string 292 | trackingAccount: 293 | description: | 294 | - Specify any public key that belongs to you to track the transactions 295 | - Useful for integrators to get all the swap transactions from this public key 296 | - Query the data using a block explorer like Solscan/SolanaFM or query like Dune/Flipside 297 | type: string 298 | prioritizationFeeLamports: 299 | description: | 300 | - To specify a level or amount of additional fees to prioritize the transaction 301 | - It can be used for EITHER priority fee OR Jito tip (not both at the same time) 302 | - If you want to include both, you will need to use `/swap-instructions` to add both at the same time 303 | type: object 304 | properties: 305 | priorityLevelWithMaxLamports: 306 | type: object 307 | properties: 308 | priorityLevel: 309 | type: string 310 | enum: 311 | - medium 312 | - high 313 | - veryHigh 314 | maxLamports: 315 | description: | 316 | - Maximum lamports to cap the priority fee estimation, to prevent overpaying 317 | type: integer 318 | jitoTipLamports: 319 | type: integer 320 | description: | 321 | - Exact amount of tip to use in a tip instruction 322 | - Refer to Jito docs on how to estimate the tip amount based on percentiles 323 | - It has to be used together with a connection to a Jito RPC 324 | - [See their docs](https://docs.jito.wtf/) 325 | asLegacyTransaction: 326 | description: | 327 | - Builds a legacy transaction rather than the default versioned transaction 328 | - Used together with `asLegacyTransaction` in `/quote`, otherwise the transaction might be too large 329 | type: boolean 330 | default: false 331 | destinationTokenAccount: 332 | description: | 333 | - Public key of a token account that will be used to receive the token out of the swap 334 | - If not provided, the signer's token account will be used 335 | - If provided, we assume that the token account is already initialized 336 | type: string 337 | dynamicComputeUnitLimit: 338 | description: | 339 | - When enabled, it will do a swap simulation to get the compute unit used and set it in ComputeBudget's compute unit limit 340 | - This incurs one extra RPC call to simulate this 341 | - We recommend to enable this to estimate compute unit correctly and reduce priority fees needed or have higher chance to be included in a block 342 | type: boolean 343 | default: false 344 | skipUserAccountsRpcCalls: 345 | description: | 346 | - When enabled, it will not do any additional RPC calls to check on required accounts 347 | - Enable it only when you already setup all the accounts needed for the trasaction, like wrapping or unwrapping sol, or destination account is already created 348 | type: boolean 349 | default: false 350 | dynamicSlippage: 351 | description: | 352 | - When enabled, it estimates slippage and apply it in the swap transaction directly, overwriting the `slippageBps` parameter in the quote response. 353 | - Used together with `dynamicSlippage` in `/quote`, otherwise the slippage used will be the one in the `/quote`'s `slippageBps` 354 | - [See notes for more information](/docs/swap-api/send-swap-transaction#how-jupiter-estimates-slippage) 355 | type: boolean 356 | default: false 357 | computeUnitPriceMicroLamports: 358 | description: | 359 | - To use an exact compute unit price to calculate priority fee 360 | - `computeUnitLimit (1400000) * computeUnitPriceMicroLamports` 361 | - We recommend using `prioritizationFeeLamports` and `dynamicComputeUnitLimit` instead of passing in your own compute unit price 362 | type: integer 363 | blockhashSlotsToExpiry: 364 | description: | 365 | - Pass in the number of slots we want the transaction to be valid for 366 | - Example: If you pass in 10 slots, the transaction will be valid for ~400ms * 10 = approximately 4 seconds before it expires 367 | type: integer 368 | quoteResponse: 369 | $ref: '#/components/schemas/QuoteResponse' 370 | 371 | SwapResponse: 372 | type: object 373 | properties: 374 | swapTransaction: 375 | type: string 376 | lastValidBlockHeight: 377 | type: integer 378 | prioritizationFeeLamports: 379 | type: integer 380 | required: 381 | - swapTransaction 382 | - lastValidBlockHeight 383 | 384 | SwapInstructionsResponse: 385 | type: object 386 | properties: 387 | otherInstructions: 388 | description: | 389 | - If you set `{\"prioritizationFeeLamports\": {\"jitoTipLamports\": 5000}}`, you will see a custom tip instruction to Jito here. 390 | type: array 391 | items: 392 | $ref: '#/components/schemas/Instruction' 393 | computeBudgetInstructions: 394 | description: | 395 | - To setup the compute budget for the transaction. 396 | type: array 397 | items: 398 | $ref: '#/components/schemas/Instruction' 399 | setupInstructions: 400 | description: | 401 | - To setup required token accounts for the users. 402 | type: array 403 | items: 404 | $ref: '#/components/schemas/Instruction' 405 | swapInstruction: 406 | description: | 407 | - The actual swap instruction. 408 | $ref: '#/components/schemas/Instruction' 409 | cleanupInstruction: 410 | description: | 411 | - To unwrap the SOL if `wrapAndUnwrapSol = true`. 412 | $ref: '#/components/schemas/Instruction' 413 | addressLookupTableAddresses: 414 | description: | 415 | - The lookup table addresses if you are using versioned transaction. 416 | type: array 417 | items: 418 | type: string 419 | required: 420 | - computeBudgetInstructions 421 | - setupInstructions 422 | - swapInstruction 423 | - addressLookupTableAddresses 424 | 425 | IndexedRouteMapResponse: 426 | type: object 427 | required: 428 | - mintKeys 429 | - indexedRouteMap 430 | properties: 431 | mintKeys: 432 | type: array 433 | items: 434 | type: string 435 | description: All the mints that are indexed to match in indexedRouteMap 436 | indexedRouteMap: 437 | type: object 438 | description: All the possible route and their corresponding output mints 439 | additionalProperties: 440 | type: array 441 | items: 442 | type: number 443 | example: 444 | '1': 445 | - 2 446 | - 3 447 | - 4 448 | '2': 449 | - 1 450 | - 3 451 | - 4 452 | 453 | parameters: 454 | InputMintParameter: 455 | name: inputMint 456 | in: query 457 | required: true 458 | schema: 459 | type: string 460 | OutputMintParameter: 461 | name: outputMint 462 | in: query 463 | required: true 464 | schema: 465 | type: string 466 | AmountParameter: 467 | name: amount 468 | description: | 469 | - Raw amount to swap (before decimals) 470 | - Input Amount if `SwapMode=ExactIn` 471 | - Output Amount if `SwapMode=ExactOut` 472 | in: query 473 | required: true 474 | schema: 475 | type: integer 476 | SlippageParameter: 477 | name: slippageBps 478 | in: query 479 | schema: 480 | type: integer 481 | SwapModeParameter: 482 | name: swapMode 483 | description: | 484 | - ExactOut is for supporting use cases where you need an exact output amount, like using [Swap API as a payment service](/docs/swap-api/payments-through-swap) 485 | - In the case of `ExactIn`, the slippage is on the output token 486 | - In the case of `ExactOut`, the slippage is on the input token 487 | - Not all AMMs support `ExactOut` 488 | in: query 489 | schema: 490 | type: string 491 | enum: 492 | - ExactIn 493 | - ExactOut 494 | default: ExactIn 495 | DexesParameter: 496 | name: dexes 497 | description: | 498 | - Multiple DEXes can be pass in by comma separating them 499 | - For example: `dexes=Raydium,Orca+V2,Meteora+DLMM` 500 | - If a DEX is indicated, the route will **only use** that DEX 501 | - [Full list of DEXes here](https://lite-api.jup.ag/swap/v1/program-id-to-label) 502 | in: query 503 | schema: 504 | type: array 505 | items: 506 | type: string 507 | ExcludeDexesParameter: 508 | name: excludeDexes 509 | description: | 510 | - Multiple DEXes can be pass in by comma separating them 511 | - For example: `excludeDexes=Raydium,Orca+V2,Meteora+DLMM` 512 | - If a DEX is indicated, the route will **not use** that DEX 513 | - [Full list of DEXes here](https://lite-api.jup.ag/swap/v1/program-id-to-label) 514 | in: query 515 | schema: 516 | type: array 517 | items: 518 | type: string 519 | RestrictIntermediateTokensParameter: 520 | name: restrictIntermediateTokens 521 | description: | 522 | - Restrict intermediate tokens within a route to a set of more stable tokens 523 | - This will help to reduce exposure to potential high slippage routes 524 | in: query 525 | schema: 526 | type: boolean 527 | default: true 528 | OnlyDirectRoutesParameter: 529 | name: onlyDirectRoutes 530 | description: | 531 | - Direct Routes limits Jupiter routing to single hop routes only 532 | - This may result in worse routes 533 | in: query 534 | schema: 535 | type: boolean 536 | default: false 537 | AsLegacyTransactionParameter: 538 | name: asLegacyTransaction 539 | description: | 540 | - Instead of using versioned transaction, this will use the legacy transaction 541 | in: query 542 | schema: 543 | type: boolean 544 | default: false 545 | MaxAccountsParameter: 546 | name: maxAccounts 547 | description: | 548 | - Rough estimate of the max accounts to be used for the quote 549 | - Useful if composing your own transaction or to be more precise in resource accounting for better routes 550 | in: query 551 | schema: 552 | type: integer 553 | default: 64 554 | PlatformFeeBpsParameter: 555 | name: platformFeeBps 556 | description: | 557 | - Take fees in basis points 558 | - Used together with `feeAccount` in /swap, see [Adding Fees](/docs/swap-api/add-fees-to-swap) guide 559 | in: query 560 | schema: 561 | type: integer 562 | DynamicSlippage: 563 | name: dynamicSlippage 564 | description: | 565 | - If true, `slippageBps` will be overriden by Dynamic Slippage's estimated value 566 | - The value is returned in `/swap` endpoint 567 | in: query 568 | schema: 569 | type: boolean 570 | default: false 571 | -------------------------------------------------------------------------------- /test.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jup-ag/jupiter-quote-api-node/0b7f8e3e06efec6cb4484336add4d8674b96258a/test.http -------------------------------------------------------------------------------- /tests/index.test.ts: -------------------------------------------------------------------------------- 1 | import { ResponseError, createJupiterApiClient } from "src"; 2 | import { describe, expect, it } from "vitest"; 3 | describe("api", () => { 4 | const apiClient = createJupiterApiClient(); 5 | it("success state", async () => { 6 | await apiClient.quoteGet({ 7 | inputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", 8 | amount: 35281, 9 | outputMint: "So11111111111111111111111111111111111111112", 10 | }); 11 | }); 12 | 13 | it("error state", async () => { 14 | try { 15 | await apiClient.quoteGet({ 16 | inputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", 17 | amount: 35281.123, // decimal 18 | outputMint: "So11111111111111111111111111111111111111112", 19 | }); 20 | } catch (e) { 21 | if (e instanceof ResponseError) { 22 | expect(await e.response.json()).toMatchInlineSnapshot(` 23 | { 24 | "error": "Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }", 25 | } 26 | `); 27 | } else { 28 | throw e; 29 | } 30 | } 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "commonjs", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "baseUrl": "." 16 | }, 17 | "include": ["**/*.ts", "**/*.tsx"], 18 | "exclude": ["node_modules"] 19 | } 20 | --------------------------------------------------------------------------------