diff --git a/agent/src/index.ts b/agent/src/index.ts index ea92ff84f5..e866ad264d 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -34,6 +34,7 @@ import { tradePlugin, tokenContractPlugin, webhookPlugin, + advancedTradePlugin, } from "@ai16z/plugin-coinbase"; import { confluxPlugin } from "@ai16z/plugin-conflux"; import { imageGenerationPlugin } from "@ai16z/plugin-image-generation"; @@ -400,7 +401,7 @@ export function createAgent( : null, ...(getSecret(character, "COINBASE_API_KEY") && getSecret(character, "COINBASE_PRIVATE_KEY") - ? [coinbaseMassPaymentsPlugin, tradePlugin, tokenContractPlugin] + ? [coinbaseMassPaymentsPlugin, tradePlugin, tokenContractPlugin, advancedTradePlugin] : []), getSecret(character, "COINBASE_API_KEY") && getSecret(character, "COINBASE_PRIVATE_KEY") && diff --git a/packages/plugin-coinbase/advanced-sdk-ts b/packages/plugin-coinbase/advanced-sdk-ts deleted file mode 160000 index 1fba324dc5..0000000000 --- a/packages/plugin-coinbase/advanced-sdk-ts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1fba324dc5bb2dc527d9cd09cbd0d4946e450252 diff --git a/packages/plugin-coinbase/advanced-sdk-ts/.eslintrc.js b/packages/plugin-coinbase/advanced-sdk-ts/.eslintrc.js new file mode 100644 index 0000000000..ec00d481ab --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/.eslintrc.js @@ -0,0 +1,21 @@ +/** @type {import('eslint').Linter.Config} */ +module.exports = { + parser: '@typescript-eslint/parser', + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier', + 'plugin:prettier/recommended', + ], + plugins: ['prettier'], + rules: { + 'prettier/prettier': 'error', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, + ignorePatterns: ['**/dist/**', '**/node_modules/**', '**/*.md'], + env: { + node: true, // Add this line to recognize Node.js globals + es2021: true, // Optionally include modern JavaScript features + }, +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/.gitignore b/packages/plugin-coinbase/advanced-sdk-ts/.gitignore new file mode 100644 index 0000000000..722ad2ade5 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/.gitignore @@ -0,0 +1,6 @@ +.env +src/rest/main.ts +dist/ +node_modules/ +.idea/ +package-lock.json \ No newline at end of file diff --git a/packages/plugin-coinbase/advanced-sdk-ts/.prettierrc b/packages/plugin-coinbase/advanced-sdk-ts/.prettierrc new file mode 100644 index 0000000000..c3e03287be --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": true, + "singleQuote": true, + "trailingComma": "es5" +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/CHANGELOG.md b/packages/plugin-coinbase/advanced-sdk-ts/CHANGELOG.md new file mode 100644 index 0000000000..eda768580a --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +## [0.1.0] - 2024-SEP-06 + +### Added + +- Support for all Coinbase Advanced API REST endpoints via central client +- Custom Request and Response objects for endpoints +- Custom error types diff --git a/packages/plugin-coinbase/advanced-sdk-ts/README.md b/packages/plugin-coinbase/advanced-sdk-ts/README.md new file mode 100644 index 0000000000..73f0bf459d --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/README.md @@ -0,0 +1,126 @@ +# Coinbase Advanced API TypeScript SDK + +Welcome to the Coinbase Advanced API TypeScript SDK. This TypeScript project was created to allow developers to easily plug into the [Coinbase Advanced API](https://docs.cdp.coinbase.com/advanced-trade/docs/welcome). + +Coinbase Advanced Trade offers a comprehensive API for traders, providing access to real-time market data, order management, and execution. Elevate your trading strategies and develop sophisticated solutions using our powerful tools and features. + +For more information on all the available REST endpoints, see the [API Reference](https://docs.cdp.coinbase.com/advanced-trade/reference/). + +--- + +## Installation + +```bash +npm install +``` + +--- + +## Build and Use + +To build the project, run the following command: + +```bash +npm run build +``` + +_Note: To avoid potential issues, do not forget to build your project again after making any changes to it._ + +After building the project, each `.ts` file will have its `.js` counterpart generated. + +To run a file, use the following command: + +``` +node dist/{INSERT-FILENAME}.js +``` + +For example, a `main.ts` file would be run like: + +```bash +node dist/main.js +``` + +--- + +## Coinbase Developer Platform (CDP) API Keys + +This SDK uses Cloud Developer Platform (CDP) API keys. To use this SDK, you will need to create a CDP API key and secret by following the instructions [here](https://docs.cdp.coinbase.com/advanced-trade/docs/getting-started). +Make sure to save your API key and secret in a safe place. You will not be able to retrieve your secret again. + +--- + +## Importing the RESTClient + +All the REST endpoints are available directly from the client, therefore it's all you need to import. + +``` +import { RESTClient } from './rest'; +``` + +--- + +## Authentication + +Authentication of CDP API Keys is handled automatically by the SDK when making a REST request. + +After creating your CDP API keys, store them using your desired method and simply pass them into the client during initialization like: + +``` +const client = new RESTClient(API_KEY, API_SECRET); +``` + +--- + +## Making Requests + +Here are a few examples requests: + +**[List Accounts](https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getaccounts)** + +``` +client + .listAccounts({}) + .then((result) => { + console.log(result); + }) + .catch((error) => { + console.error(error.message); + }); +``` + +**[Get Product](https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getproduct)** + +``` +client + .getProduct({productId: "BTC-USD"}) + .then((result) => { + console.log(result); + }) + .catch((error) => { + console.error(error.message); + }); +``` + +**[Create Order](https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_postorder)** + +_$10 Market Buy on BTC-USD_ + +``` +client + .createOrder({ + clientOrderId: "00000001", + productId: "BTC-USD", + side: OrderSide.BUY, + orderConfiguration:{ + market_market_ioc: { + quote_size: "10" + } + } + }) + .then((result) => { + console.log(result); + }) + .catch((error) => { + console.error(error.message); + }); +``` diff --git a/packages/plugin-coinbase/advanced-sdk-ts/package.json b/packages/plugin-coinbase/advanced-sdk-ts/package.json new file mode 100644 index 0000000000..78480e529e --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/package.json @@ -0,0 +1,34 @@ +{ + "name": "@coinbase-samples/advanced-sdk-ts", + "version": "0.1.0", + "main": "dist/main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "lint": "eslint . --ext .js,.ts", + "format": "prettier --write \"**/*.{js,ts,tsx,json,css,md}\"" + }, + "files": [ + "dist/" + ], + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "jsonwebtoken": "^9.0.2", + "node-fetch": "^2.6.1" + }, + "devDependencies": { + "@types/jsonwebtoken": "^9.0.7", + "@types/node-fetch": "^2.6.11", + "@typescript-eslint/eslint-plugin": "^5.59.0", + "@typescript-eslint/parser": "^5.59.0", + "dotenv": "^16.4.5", + "eslint": "^8.35.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "prettier": "^2.8.8", + "typescript": "^5.5.4" + } +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/constants.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/constants.ts new file mode 100644 index 0000000000..8962365907 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/constants.ts @@ -0,0 +1,6 @@ +export const BASE_URL = 'api.coinbase.com'; +export const API_PREFIX = '/api/v3/brokerage'; +export const ALGORITHM = 'ES256'; +export const VERSION = '0.1.0'; +export const USER_AGENT = `coinbase-advanced-ts/${VERSION}`; +export const JWT_ISSUER = 'cdp'; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/jwt-generator.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/jwt-generator.ts new file mode 100644 index 0000000000..275fc876e6 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/jwt-generator.ts @@ -0,0 +1,31 @@ +import jwt from 'jsonwebtoken'; +import { BASE_URL, ALGORITHM, JWT_ISSUER } from './constants'; +import crypto from 'crypto'; + +export function generateToken( + requestMethod: string, + requestPath: string, + apiKey: string, + apiSecret: string +): string { + const uri = `${requestMethod} ${BASE_URL}${requestPath}`; + const payload = { + iss: JWT_ISSUER, + nbf: Math.floor(Date.now() / 1000), + exp: Math.floor(Date.now() / 1000) + 120, + sub: apiKey, + uri, + }; + + const header = { + alg: ALGORITHM, + kid: apiKey, + nonce: crypto.randomBytes(16).toString('hex'), + }; + const options: jwt.SignOptions = { + algorithm: ALGORITHM as jwt.Algorithm, + header: header, + }; + + return jwt.sign(payload, apiSecret as string, options); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/accounts.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/accounts.ts new file mode 100644 index 0000000000..04cec4b934 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/accounts.ts @@ -0,0 +1,36 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + GetAccountRequest, + GetAccountResponse, + ListAccountsRequest, + ListAccountsResponse, +} from './types/accounts-types'; +import { method } from './types/request-types'; + +// [GET] Get Account +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getaccount +export function getAccount( + this: RESTBase, + { accountUuid }: GetAccountRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/accounts/${accountUuid}`, + isPublic: false, + }); +} + +// [GET] List Accounts +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getaccounts +export function listAccounts( + this: RESTBase, + requestParams: ListAccountsRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/accounts`, + queryParams: requestParams, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/converts.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/converts.ts new file mode 100644 index 0000000000..435a807e28 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/converts.ts @@ -0,0 +1,53 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + CommitConvertTradeRequest, + CommitConvertTradeResponse, + CreateConvertQuoteRequest, + CreateConvertQuoteResponse, + GetConvertTradeRequest, + GetConvertTradeResponse, +} from './types/converts-types'; +import { method } from './types/request-types'; + +// [POST] Create Convert Quote +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_createconvertquote +export function createConvertQuote( + this: RESTBase, + requestParams: CreateConvertQuoteRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/convert/quote`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Convert Trade +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getconverttrade +export function getConvertTrade( + this: RESTBase, + { tradeId, ...requestParams }: GetConvertTradeRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/convert/trade/${tradeId}`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [POST] Commit Connvert Trade +// https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_commitconverttrade +export function commitConvertTrade( + this: RESTBase, + { tradeId, ...requestParams }: CommitConvertTradeRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/convert/trade/${tradeId}`, + bodyParams: requestParams, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/dataAPI.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/dataAPI.ts new file mode 100644 index 0000000000..2adc646607 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/dataAPI.ts @@ -0,0 +1,17 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; + +import { method } from './types/request-types'; +import { GetAPIKeyPermissionsResponse } from './types/dataAPI-types'; + +// [GET] Get API Key Permissions +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getapikeypermissions +export function getAPIKeyPermissions( + this: RESTBase +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/key_permissions`, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/errors.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/errors.ts new file mode 100644 index 0000000000..5d9695ef67 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/errors.ts @@ -0,0 +1,36 @@ +import { Response } from 'node-fetch'; + +class CoinbaseError extends Error { + statusCode: number; + response: Response; + + constructor(message: string, statusCode: number, response: Response) { + super(message); + this.name = 'CoinbaseError'; + this.statusCode = statusCode; + this.response = response; + } +} + +export function handleException( + response: Response, + responseText: string, + reason: string +) { + let message: string | undefined; + + if ( + (400 <= response.status && response.status <= 499) || + (500 <= response.status && response.status <= 599) + ) { + if ( + response.status == 403 && + responseText.includes('"error_details":"Missing required scopes"') + ) { + message = `${response.status} Coinbase Error: Missing Required Scopes. Please verify your API keys include the necessary permissions.`; + } else + message = `${response.status} Coinbase Error: ${reason} ${responseText}`; + + throw new CoinbaseError(message, response.status, response); + } +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/fees.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/fees.ts new file mode 100644 index 0000000000..9f9c08e5cf --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/fees.ts @@ -0,0 +1,21 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + GetTransactionsSummaryRequest, + GetTransactionsSummaryResponse, +} from './types/fees-types'; +import { method } from './types/request-types'; + +// [GET] Get Transaction Summary +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_commitconverttrade +export function getTransactionSummary( + this: RESTBase, + requestParams: GetTransactionsSummaryRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/transaction_summary`, + queryParams: requestParams, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/futures.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/futures.ts new file mode 100644 index 0000000000..82412ec4e3 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/futures.ts @@ -0,0 +1,133 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + CancelPendingFuturesSweep, + GetCurrentMarginWindowRequest, + GetCurrentMarginWindowResponse, + GetFuturesBalanceSummaryResponse, + GetFuturesPositionRequest, + GetFuturesPositionResponse, + GetIntradayMarginSettingResponse, + ListFuturesPositionsResponse, + ListFuturesSweepsResponse, + ScheduleFuturesSweepRequest, + ScheduleFuturesSweepResponse, + SetIntradayMarginSettingRequest, + SetIntradayMarginSettingResponse, +} from './types/futures-types'; +import { method } from './types/request-types'; + +// [GET] Get Futures Balance Summary +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getfcmbalancesummary +export function getFuturesBalanceSummary( + this: RESTBase +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/cfm/balance_summary`, + isPublic: false, + }); +} + +// [GET] Get Intraday Margin Setting +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getintradaymarginsetting +export function getIntradayMarginSetting( + this: RESTBase +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/cfm/intraday/margin_setting`, + isPublic: false, + }); +} + +// [POST] Set Intraday Margin Setting +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_setintradaymarginsetting +export function setIntradayMarginSetting( + this: RESTBase, + requestParams: SetIntradayMarginSettingRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/cfm/intraday/margin_setting`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Current Margin Window +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getcurrentmarginwindow +export function getCurrentMarginWindow( + this: RESTBase, + requestParams: GetCurrentMarginWindowRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/cfm/intraday/current_margin_window`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] List Futures Positions +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getfcmpositions +export function listFuturesPositions( + this: RESTBase +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/cfm/positions`, + isPublic: false, + }); +} + +// [GET] Get Futures Position +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getfcmposition +export function getFuturesPosition( + this: RESTBase, + { productId }: GetFuturesPositionRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/cfm/positions/${productId}`, + isPublic: false, + }); +} + +// [POST] Schedule Futures Sweep +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_schedulefcmsweep +export function scheduleFuturesSweep( + this: RESTBase, + requestParams: ScheduleFuturesSweepRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/cfm/sweeps/schedule`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [GET] List Futures Sweeps +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getfcmsweeps +export function listFuturesSweeps( + this: RESTBase +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/cfm/sweeps`, + isPublic: false, + }); +} + +// [DELETE] Cancel Pending Futures Sweep +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_cancelfcmsweep +export function cancelPendingFuturesSweep( + this: RESTBase +): Promise { + return this.request({ + method: method.DELETE, + endpoint: `${API_PREFIX}/cfm/sweeps`, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/index.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/index.ts new file mode 100644 index 0000000000..101223a645 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/index.ts @@ -0,0 +1,95 @@ +import { RESTBase } from './rest-base'; +import * as Accounts from './accounts'; +import * as Converts from './converts'; +import * as DataAPI from './dataAPI'; +import * as Fees from './fees'; +import * as Futures from './futures'; +import * as Orders from './orders'; +import * as Payments from './payments'; +import * as Perpetuals from './perpetuals'; +import * as Portfolios from './portfolios'; +import * as Products from './products'; +import * as Public from './public'; + +export class RESTClient extends RESTBase { + constructor(key?: string | undefined, secret?: string | undefined) { + super(key, secret); + } + + // =============== ACCOUNTS endpoints =============== + public getAccount = Accounts.getAccount.bind(this); + public listAccounts = Accounts.listAccounts.bind(this); + + // =============== CONVERTS endpoints =============== + public createConvertQuote = Converts.createConvertQuote.bind(this); + public commitConvertTrade = Converts.commitConvertTrade.bind(this); + public getConvertTrade = Converts.getConvertTrade.bind(this); + + // =============== DATA API endpoints =============== + public getAPIKeyPermissions = DataAPI.getAPIKeyPermissions.bind(this); + + // =============== FEES endpoints =============== + public getTransactionSummary = Fees.getTransactionSummary.bind(this); + + // =============== FUTURES endpoints =============== + public getFuturesBalanceSummary = Futures.getFuturesBalanceSummary.bind(this); + public getIntradayMarginSetting = Futures.getIntradayMarginSetting.bind(this); + public setIntradayMarginSetting = Futures.setIntradayMarginSetting.bind(this); + public getCurrentMarginWindow = Futures.getCurrentMarginWindow.bind(this); + public listFuturesPositions = Futures.listFuturesPositions.bind(this); + public getFuturesPosition = Futures.getFuturesPosition.bind(this); + public scheduleFuturesSweep = Futures.scheduleFuturesSweep.bind(this); + public listFuturesSweeps = Futures.listFuturesSweeps.bind(this); + public cancelPendingFuturesSweep = + Futures.cancelPendingFuturesSweep.bind(this); + + // =============== ORDERS endpoints =============== + public createOrder = Orders.createOrder.bind(this); + public cancelOrders = Orders.cancelOrders.bind(this); + public editOrder = Orders.editOrder.bind(this); + public editOrderPreview = Orders.editOrderPreview.bind(this); + public listOrders = Orders.listOrders.bind(this); + public listFills = Orders.listFills.bind(this); + public getOrder = Orders.getOrder.bind(this); + public previewOrder = Orders.previewOrder.bind(this); + public closePosition = Orders.closePosition.bind(this); + + // =============== PAYMENTS endpoints =============== + public listPaymentMethods = Payments.listPaymentMethods.bind(this); + public getPaymentMethod = Payments.getPaymentMethod.bind(this); + + // =============== PERPETUALS endpoints =============== + public allocatePortfolio = Perpetuals.allocatePortfolio.bind(this); + public getPerpetualsPortfolioSummary = + Perpetuals.getPerpetualsPortfolioSummary.bind(this); + public listPerpetualsPositions = + Perpetuals.listPerpetualsPositions.bind(this); + public getPerpetualsPosition = Perpetuals.getPerpertualsPosition.bind(this); + public getPortfolioBalances = Perpetuals.getPortfolioBalances.bind(this); + public optInOutMultiAssetCollateral = + Perpetuals.optInOutMultiAssetCollateral.bind(this); + + // =============== PORTFOLIOS endpoints =============== + public listPortfolios = Portfolios.listPortfolios.bind(this); + public createPortfolio = Portfolios.createPortfolio.bind(this); + public deletePortfolio = Portfolios.deletePortfolio.bind(this); + public editPortfolio = Portfolios.editPortfolio.bind(this); + public movePortfolioFunds = Portfolios.movePortfolioFunds.bind(this); + public getPortfolioBreakdown = Portfolios.getPortfolioBreakdown.bind(this); + + // =============== PRODUCTS endpoints =============== + public getBestBidAsk = Products.getBestBidAsk.bind(this); + public getProductBook = Products.getProductBook.bind(this); + public listProducts = Products.listProducts.bind(this); + public getProduct = Products.getProduct.bind(this); + public getProductCandles = Products.getProductCandles.bind(this); + public getMarketTrades = Products.getMarketTrades.bind(this); + + // =============== PUBLIC endpoints =============== + public getServerTime = Public.getServerTime.bind(this); + public getPublicProductBook = Public.getPublicProductBook.bind(this); + public listPublicProducts = Public.listPublicProducts.bind(this); + public getPublicProduct = Public.getPublicProduct.bind(this); + public getPublicProductCandles = Public.getPublicProductCandles.bind(this); + public getPublicMarketTrades = Public.getPublicMarketTrades.bind(this); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/orders.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/orders.ts new file mode 100644 index 0000000000..04bf2aefbc --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/orders.ts @@ -0,0 +1,149 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + CancelOrdersRequest, + CancelOrdersResponse, + ClosePositionRequest, + ClosePositionResponse, + CreateOrderRequest, + CreateOrderResponse, + EditOrderPreviewRequest, + EditOrderPreviewResponse, + EditOrderRequest, + EditOrderResponse, + GetOrderRequest, + GetOrderResponse, + ListFillsRequest, + ListFillsResponse, + ListOrdersRequest, + ListOrdersResponse, + PreviewOrderRequest, + PreviewOrderResponse, +} from './types/orders-types'; +import { method } from './types/request-types'; + +// [POST] Create Order +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_postorder +export function createOrder( + this: RESTBase, + requestParams: CreateOrderRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/orders`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [POST] Cancel Orders +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_cancelorders +export function cancelOrders( + this: RESTBase, + requestParams: CancelOrdersRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/orders/batch_cancel`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [POST] Edit Order +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_editorder +export function editOrder( + this: RESTBase, + requestParams: EditOrderRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/orders/edit`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [POST] Edit Order Preview +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_previeweditorder +export function editOrderPreview( + this: RESTBase, + requestParams: EditOrderPreviewRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/orders/edit_preview`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [GET] List Orders +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_gethistoricalorders +export function listOrders( + this: RESTBase, + requestParams: ListOrdersRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/orders/historical/batch`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] List Fills +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getfills +export function listFills( + this: RESTBase, + requestParams: ListFillsRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/orders/historical/fills`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Order +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_gethistoricalorder +export function getOrder( + this: RESTBase, + { orderId }: GetOrderRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/orders/historical/${orderId}`, + isPublic: false, + }); +} + +// [POST] Preview Order +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_previeworder +export function previewOrder( + this: RESTBase, + requestParams: PreviewOrderRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/orders/preview`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [POST] Close Position +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_closeposition +export function closePosition( + this: RESTBase, + requestParams: ClosePositionRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/orders/close_position`, + queryParams: undefined, + bodyParams: requestParams, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/payments.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/payments.ts new file mode 100644 index 0000000000..defa3f4dd6 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/payments.ts @@ -0,0 +1,33 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + GetPaymentMethodRequest, + GetPaymentMethodResponse, + ListPaymentMethodsResponse, +} from './types/payments-types'; +import { method } from './types/request-types'; + +// [GET] List Payment Methods +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getpaymentmethods +export function listPaymentMethods( + this: RESTBase +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/payment_methods`, + isPublic: false, + }); +} + +// [GET] Get Payment Method +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getpaymentmethod +export function getPaymentMethod( + this: RESTBase, + { paymentMethodId }: GetPaymentMethodRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/payment_methods/${paymentMethodId}`, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/perpetuals.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/perpetuals.ts new file mode 100644 index 0000000000..6e1c568d69 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/perpetuals.ts @@ -0,0 +1,97 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + AllocatePortfolioRequest, + AllocatePortfolioResponse, + GetPerpetualsPortfolioSummaryRequest, + GetPerpetualsPortfolioSummaryResponse, + GetPerpetualsPositionRequest, + GetPerpetualsPositionResponse, + GetPortfolioBalancesRequest, + GetPortfolioBalancesResponse, + ListPerpetualsPositionsRequest, + ListPerpetualsPositionsResponse, + OptInOutMultiAssetCollateralRequest, + OptInOutMultiAssetCollateralResponse, +} from './types/perpetuals-types'; +import { method } from './types/request-types'; + +// [POST] Allocate Portfolio +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_allocateportfolio +export function allocatePortfolio( + this: RESTBase, + requestParams: AllocatePortfolioRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/intx/allocate`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Perpetuals Portfolio Summary +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getintxportfoliosummary +export function getPerpetualsPortfolioSummary( + this: RESTBase, + { portfolioUuid }: GetPerpetualsPortfolioSummaryRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/intx/portfolio/${portfolioUuid}`, + isPublic: false, + }); +} + +// [GET] List Perpetuals Positions +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getintxpositions +export function listPerpetualsPositions( + this: RESTBase, + { portfolioUuid }: ListPerpetualsPositionsRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/intx/positions/${portfolioUuid}`, + isPublic: false, + }); +} + +// [GET] Get Perpetuals Position +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getintxposition +export function getPerpertualsPosition( + this: RESTBase, + { portfolioUuid, symbol }: GetPerpetualsPositionRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/intx/positions/${portfolioUuid}/${symbol}`, + isPublic: false, + }); +} + +// [GET] Get Portfolio Balances +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getintxbalances +export function getPortfolioBalances( + this: RESTBase, + { portfolioUuid }: GetPortfolioBalancesRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/intx/balances/${portfolioUuid}`, + isPublic: false, + }); +} + +// [POST] Opt In or Out of Multi Asset Collateral +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_intxmultiassetcollateral +export function optInOutMultiAssetCollateral( + this: RESTBase, + requestParams: OptInOutMultiAssetCollateralRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/intx/multi_asset_collateral`, + bodyParams: requestParams, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/portfolios.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/portfolios.ts new file mode 100644 index 0000000000..df5e5791f8 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/portfolios.ts @@ -0,0 +1,100 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + CreatePortfolioRequest, + CreatePortfolioResponse, + DeletePortfolioRequest, + DeletePortfolioResponse, + EditPortfolioRequest, + EditPortfolioResponse, + GetPortfolioBreakdownRequest, + GetPortfolioBreakdownResponse, + ListPortfoliosRequest, + ListPortfoliosResponse, + MovePortfolioFundsRequest, + MovePortfolioFundsResponse, +} from './types/portfolios-types'; +import { method } from './types/request-types'; + +// [GET] List Portfolios +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getportfolios +export function listPortfolios( + this: RESTBase, + requestParams: ListPortfoliosRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/portfolios`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [POST] Create Portfolio +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_createportfolio +export function createPortfolio( + this: RESTBase, + requestParams: CreatePortfolioRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/portfolios`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [POST] Move Portfolio Funds +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_moveportfoliofunds +export function movePortfolioFunds( + this: RESTBase, + requestParams: MovePortfolioFundsRequest +): Promise { + return this.request({ + method: method.POST, + endpoint: `${API_PREFIX}/portfolios/move_funds`, + bodyParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Portfolio Breakdown +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getportfoliobreakdown +export function getPortfolioBreakdown( + this: RESTBase, + { portfolioUuid, ...requestParams }: GetPortfolioBreakdownRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/portfolios/${portfolioUuid}`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [DELETE] Delete Portfolio +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_deleteportfolio +export function deletePortfolio( + this: RESTBase, + { portfolioUuid }: DeletePortfolioRequest +): Promise { + return this.request({ + method: method.DELETE, + endpoint: `${API_PREFIX}/portfolios/${portfolioUuid}`, + isPublic: false, + }); +} + +// [PUT] Edit Portfolio +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_editportfolio +export function editPortfolio( + this: RESTBase, + { portfolioUuid, ...requestParams }: EditPortfolioRequest +): Promise { + return this.request({ + method: method.PUT, + endpoint: `${API_PREFIX}/portfolios/${portfolioUuid}`, + bodyParams: requestParams, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/products.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/products.ts new file mode 100644 index 0000000000..7cd2ca1f0a --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/products.ts @@ -0,0 +1,101 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + GetBestBidAskRequest, + GetBestBidAskResponse, + GetMarketTradesRequest, + GetMarketTradesResponse, + GetProductBookRequest, + GetProductBookResponse, + GetProductCandlesRequest, + GetProductCandlesResponse, + GetProductRequest, + GetProductResponse, + ListProductsRequest, + ListProductsResponse, +} from './types/products-types'; +import { method } from './types/request-types'; + +// [GET] Get Best Bid Ask +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getbestbidask +export function getBestBidAsk( + this: RESTBase, + requestParams: GetBestBidAskRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/best_bid_ask`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Product Book +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getproductbook +export function getProductBook( + this: RESTBase, + requestParams: GetProductBookRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/product_book`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] List Products +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getproducts +export function listProducts( + this: RESTBase, + requestParams: ListProductsRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/products`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Product +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getproduct +export function getProduct( + this: RESTBase, + { productId, ...requestParams }: GetProductRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/products/${productId}`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Product Candles +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getcandles +export function getProductCandles( + this: RESTBase, + { productId, ...requestParams }: GetProductCandlesRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/products/${productId}/candles`, + queryParams: requestParams, + isPublic: false, + }); +} + +// [GET] Get Market Trades +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getmarkettrades +export function getMarketTrades( + this: RESTBase, + { productId, ...requestParams }: GetMarketTradesRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/products/${productId}/ticker`, + queryParams: requestParams, + isPublic: false, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/public.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/public.ts new file mode 100644 index 0000000000..1b9577e514 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/public.ts @@ -0,0 +1,95 @@ +import { API_PREFIX } from '../constants'; +import { RESTBase } from './rest-base'; +import { + GetPublicMarketTradesRequest, + GetPublicMarketTradesResponse, + GetPublicProductBookRequest, + GetPublicProductBookResponse, + GetPublicProductCandlesRequest, + GetPublicProductCandlesResponse, + GetPublicProductRequest, + GetPublicProductResponse, + GetServerTimeResponse, + ListPublicProductsRequest, + ListPublicProductsResponse, +} from './types/public-types'; +import { method } from './types/request-types'; + +// [GET] Get Server Time +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getservertime +export function getServerTime(this: RESTBase): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/time`, + isPublic: true, + }); +} + +// [GET] Get Public Product Book +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getpublicproductbook +export function getPublicProductBook( + this: RESTBase, + requestParams: GetPublicProductBookRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/market/product_book`, + queryParams: requestParams, + isPublic: true, + }); +} + +// [GET] List Public Products +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getpublicproducts +export function listPublicProducts( + this: RESTBase, + requestParams: ListPublicProductsRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/market/products`, + queryParams: requestParams, + isPublic: true, + }); +} + +// [GET] Get Public Product +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getpublicproduct +export function getPublicProduct( + this: RESTBase, + { productId }: GetPublicProductRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/market/products/${productId}`, + isPublic: true, + }); +} + +// [GET] Get Public Product Candles +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getpubliccandles +export function getPublicProductCandles( + this: RESTBase, + { productId, ...requestParams }: GetPublicProductCandlesRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/market/products/${productId}/candles`, + queryParams: requestParams, + isPublic: true, + }); +} + +// [GET] Get Public Market Trades +// Official Documentation: https://docs.cdp.coinbase.com/advanced-trade/reference/retailbrokerageapi_getpublicmarkettrades +export function getPublicMarketTrades( + this: RESTBase, + { productId, ...requestParams }: GetPublicMarketTradesRequest +): Promise { + return this.request({ + method: method.GET, + endpoint: `${API_PREFIX}/products/${productId}/ticker`, + queryParams: requestParams, + isPublic: true, + }); +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/rest-base.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/rest-base.ts new file mode 100644 index 0000000000..9084df5612 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/rest-base.ts @@ -0,0 +1,123 @@ +import { generateToken } from '../jwt-generator'; +import fetch, { Headers, RequestInit, Response } from 'node-fetch'; +import { BASE_URL, USER_AGENT } from '../constants'; +import { RequestOptions } from './types/request-types'; +import { handleException } from './errors'; + +export class RESTBase { + private apiKey: string | undefined; + private apiSecret: string | undefined; + + constructor(key?: string, secret?: string) { + if (!key || !secret) { + console.log('Could not authenticate. Only public endpoints accessible.'); + } + this.apiKey = key; + this.apiSecret = secret; + } + + request(options: RequestOptions): Promise { + const { method, endpoint, isPublic } = options; + let { queryParams, bodyParams } = options; + + queryParams = queryParams ? this.filterParams(queryParams) : {}; + + if (bodyParams !== undefined) + bodyParams = bodyParams ? this.filterParams(bodyParams) : {}; + + return this.prepareRequest( + method, + endpoint, + queryParams, + bodyParams, + isPublic + ); + } + + prepareRequest( + httpMethod: string, + urlPath: string, + queryParams?: Record, + bodyParams?: Record, + isPublic?: boolean + ) { + const headers: Headers = this.setHeaders(httpMethod, urlPath, isPublic); + + const requestOptions: RequestInit = { + method: httpMethod, + headers: headers, + body: JSON.stringify(bodyParams), + }; + + const queryString = this.buildQueryString(queryParams); + const url = `https://${BASE_URL}${urlPath}${queryString}`; + + return this.sendRequest(headers, requestOptions, url); + } + + async sendRequest( + headers: Headers, + requestOptions: RequestInit, + url: string + ) { + const response: Response = await fetch(url, requestOptions); + const responseText = await response.text(); + handleException(response, responseText, response.statusText); + + return responseText; + } + + setHeaders(httpMethod: string, urlPath: string, isPublic?: boolean) { + const headers: Headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('User-Agent', USER_AGENT); + if (this.apiKey !== undefined && this.apiSecret !== undefined) + headers.append( + 'Authorization', + `Bearer ${generateToken( + httpMethod, + urlPath, + this.apiKey, + this.apiSecret + )}` + ); + else if (isPublic == undefined || isPublic == false) + throw new Error( + 'Attempting to access authenticated endpoint with invalid API_KEY or API_SECRET.' + ); + + return headers; + } + + filterParams(data: Record) { + const filteredParams: Record = {}; + + for (const key in data) { + if (data[key] !== undefined) { + filteredParams[key] = data[key]; + } + } + + return filteredParams; + } + + buildQueryString(queryParams?: Record): string { + if (!queryParams || Object.keys(queryParams).length === 0) { + return ''; + } + + const queryString = Object.entries(queryParams) + .flatMap(([key, value]) => { + if (Array.isArray(value)) { + return value.map( + (item) => `${encodeURIComponent(key)}=${encodeURIComponent(item)}` + ); + } else { + return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + } + }) + .join('&'); + + return `?${queryString}`; + } +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/accounts-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/accounts-types.ts new file mode 100644 index 0000000000..ca1301c3f4 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/accounts-types.ts @@ -0,0 +1,26 @@ +import { Account } from './common-types'; + +// Get Account +export type GetAccountRequest = { + // Path Params + accountUuid: string; +}; + +export type GetAccountResponse = { + account?: Account; +}; + +// List Accounts +export type ListAccountsRequest = { + // Query Params + limit?: number; + cursor?: string; + retailPortfolioId?: string; +}; + +export type ListAccountsResponse = { + accounts?: Account[]; + has_next: boolean; + cursor?: string; + size?: number; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/common-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/common-types.ts new file mode 100644 index 0000000000..a27d9fb34e --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/common-types.ts @@ -0,0 +1,447 @@ +// ----- ENUMS ----- +export enum ProductType { + UNKNOWN = 'UNKNOWN_PRODUCT_TYPE', + SPOT = 'SPOT', + FUTURE = 'FUTURE', +} + +export enum ContractExpiryType { + UNKNOWN = 'UNKNOWN_CONTRACT_EXPIRY_TYPE', + EXPIRING = 'EXPIRING', + PERPETUAL = 'PERPETUAL', +} + +export enum ExpiringContractStatus { + UNKNOWN = 'UNKNOWN_EXPIRING_CONTRACT_STATUS', + UNEXPIRED = 'STATUS_UNEXPIRED', + EXPIRED = 'STATUS_EXPIRED', + ALL = 'STATUS_ALL', +} + +export enum PortfolioType { + UNDEFINED = 'UNDEFINED', + DEFAULT = 'DEFAULT', + CONSUMER = 'CONSUMER', + INTX = 'INTX', +} + +export enum MarginType { + CROSS = 'CROSS', + ISOLATED = 'ISOLATED', +} + +export enum OrderPlacementSource { + UNKNOWN = 'UNKNOWN_PLACEMENT_SOURCE', + RETAIL_SIMPLE = 'RETAIL_SIMPLE', + RETAIL_ADVANCED = 'RETAIL_ADVANCED', +} + +export enum SortBy { + UNKNOWN = 'UNKNOWN_SORT_BY', + LIMIT_PRICE = 'LIMIT_PRICE', + LAST_FILL_TIME = 'LAST_FILL_TIME', +} + +export enum OrderSide { + BUY = 'BUY', + SELL = 'SELL', +} + +export enum StopDirection { + UP = 'STOP_DIRECTION_STOP_UP', + DOWN = 'STOP_DIRECTION_STOP_DOWN', +} + +export enum Granularity { + UNKNOWN = 'UNKNOWN_GRANULARITY', + ONE_MINUTE = 'ONE_MINUTE', + FIVE_MINUTE = 'FIVE_MINUTE', + FIFTEEN_MINUTE = 'FIFTEEN_MINUTE', + THIRTY_MINUTE = 'THIRTY_MINUTE', + ONE_HOUR = 'ONE_HOUR', + TWO_HOUR = 'TWO_HOUR', + SIX_HOUR = 'SIX_HOUR', + ONE_DAY = 'ONE_DAY', +} + +export enum ProductVenue { + UNKNOWN = 'UNKNOWN_VENUE_TYPE', + CBE = 'CBE', + FCM = 'FCM', + INTX = 'INTX', +} + +export enum IntradayMarginSetting { + UNSPECIFIED = 'INTRADAY_MARGIN_SETTING_UNSPECIFIED', + STANDARD = 'INTRADAY_MARGIN_SETTING_STANDARD', + INTRADAY = 'INTRADAY_MARGIN_SETTING_INTRADAY', +} + +// ----- TYPES ----- +export type Account = { + uuid?: string; + name?: string; + currency?: string; + available_balance?: Record; + default?: boolean; + active?: boolean; + created_at?: string; + updated_at?: string; + deleted_at?: string; + type?: Record; + ready?: boolean; + hold?: Record; + retail_portfolio_id?: string; +}; + +export type TradeIncentiveMetadata = { + userIncentiveId?: string; + codeVal?: string; +}; + +export type OrderConfiguration = + | { market_market_ioc: MarketMarketIoc } + | { sor_limit_ioc: SorLimitIoc } + | { limit_limit_gtc: LimitLimitGtc } + | { limit_limit_gtd: LimitLimitGtd } + | { limit_limit_fok: LimitLimitFok } + | { stop_limit_stop_limit_gtc: StopLimitStopLimitGtc } + | { stop_limit_stop_limit_gtd: StopLimitStopLimitGtd } + | { trigger_bracket_gtc: TriggerBracketGtc } + | { trigger_bracket_gtd: TriggerBracketGtd }; + +export type MarketMarketIoc = { quote_size: string } | { base_size: string }; + +export type SorLimitIoc = { + baseSize: string; + limitPrice: string; +}; + +export type LimitLimitGtc = { + baseSize: string; + limitPrice: string; + postOnly: boolean; +}; + +export type LimitLimitGtd = { + baseSize: string; + limitPrice: string; + endTime: string; + postOnly: boolean; +}; + +export type LimitLimitFok = { + baseSize: string; + limitPrice: string; +}; + +export type StopLimitStopLimitGtc = { + baseSize: string; + limitPrice: string; + stopPrice: string; + stopDirection: StopDirection; +}; + +export type StopLimitStopLimitGtd = { + baseSize: string; + limitPrice: string; + stopPrice: string; + endTime: string; + stopDirection: StopDirection; +}; + +export type TriggerBracketGtc = { + baseSize: string; + limitPrice: string; + stopTriggerPrice: string; +}; + +export type TriggerBracketGtd = { + baseSize: string; + limitPrice: string; + stopTriggerPrice: string; + endTime: string; +}; + +export type RatConvertTrade = { + id?: string; + status?: Record; + user_entered_amount?: Record; + amount?: Record; + subtotal?: Record; + total?: Record; + fees?: Record; + total_fee?: Record; + source?: Record; + target?: Record; + unit_price?: Record; + user_warnings?: Record; + user_reference?: string; + source_curency?: string; + cancellation_reason?: Record; + source_id?: string; + target_id?: string; + subscription_info?: Record; + exchange_rate?: Record; + tax_details?: Record; + trade_incentive_info?: Record; + total_fee_without_tax?: Record; + fiat_denoted_total?: Record; +}; + +export type FCMBalanceSummary = { + futures_buying_power?: Record; + total_usd_balance?: Record; + cbi_usd_balance?: Record; + cfm_usd_balance?: Record; + total_open_orders_hold_amount?: Record; + unrealized_pnl?: Record; + daily_realized_pnl?: Record; + initial_margin?: Record; + available_margin?: Record; + liquidation_threshold?: Record; + liquidation_buffer_amount?: Record; + liquidation_buffer_percentage?: string; + intraday_margin_window_measure?: Record; + overnight_margin_window_measure?: Record; +}; + +export type FCMPosition = { + product_id?: string; + expiration_time?: Record; + side?: Record; + number_of_contracts?: string; + current_price?: string; + avg_entry_price?: string; + unrealized_pnl?: string; + daily_realized_pnl?: string; +}; + +export type FCMSweep = { + id: string; + requested_amount: Record; + should_sweep_all: boolean; + status: Record; + schedule_time: Record; +}; + +export type CancelOrderObject = { + success: boolean; + failure_reason: Record; + order_id: string; +}; + +export type Order = { + order_id: string; + product_id: string; + user_id: string; + order_configuration: OrderConfiguration; + side: OrderSide; + client_order_id: string; + status: Record; + time_in_force?: Record; + created_time: Record; + completion_percentage: string; + filled_size?: string; + average_filled_price: string; + fee?: string; + number_of_fills: string; + filled_value?: string; + pending_cancel: boolean; + size_in_quote: boolean; + total_fees: string; + size_inclusive_of_fees: boolean; + total_value_after_fees: string; + trigger_status?: Record; + order_type?: Record; + reject_reason?: Record; + settled?: boolean; + product_type?: ProductType; + reject_message?: string; + cancel_message?: string; + order_placement_source?: OrderPlacementSource; + outstanding_hold_amount?: string; + is_liquidation?: boolean; + last_fill_time?: Record; + edit_history?: Record[]; + leverage?: string; + margin_type?: MarginType; + retail_portfolio_id?: string; + originating_order_id?: string; + attached_order_id?: string; +}; + +export type PaymentMethod = { + id?: string; + type?: string; + name?: string; + currency?: string; + verified?: boolean; + allow_buy?: boolean; + allow_sell?: boolean; + allow_deposit?: boolean; + allow_withdraw?: boolean; + created_at?: string; + updated_at?: string; +}; + +export type PerpetualPortfolio = { + portfolio_uuid?: string; + collateral?: string; + position_notional?: string; + open_position_notional?: string; + pending_fees?: string; + borrow?: string; + accrued_interest?: string; + rolling_debt?: string; + portfolio_initial_margin?: string; + portfolio_im_notional?: Record; + liquidation_percentage?: string; + liquidation_buffer?: string; + margin_type?: Record; + margin_flags?: Record; + liquidation_status?: Record; + unrealized_pnl?: Record; + total_balance?: Record; +}; + +export type PortfolioSummary = { + unrealized_pnl?: Record; + buying_power?: Record; + total_balance?: Record; + max_withdrawal_amount?: Record; +}; + +export type PositionSummary = { + aggregated_pnl?: Record; +}; + +export type Position = { + product_id?: string; + product_uuid?: string; + portfolio_uuid?: string; + symbol?: string; + vwap?: Record; + entry_vwap?: Record; + position_side?: Record; + margin_type?: Record; + net_size?: string; + buy_order_size?: string; + sell_order_size?: string; + im_contribution?: string; + unrealized_pnl?: Record; + mark_price?: Record; + liquidation_price?: Record; + leverage?: string; + im_notional?: Record; + mm_notional?: Record; + position_notional?: Record; + aggregated_pnl?: Record; +}; + +export type Balance = { + asset: Record; + quantity: string; + hold: string; + transfer_hold: string; + collateral_value: string; + collateral_weight: string; + max_withdraw_amount: string; + loan: string; + loan_collateral_requirement_usd: string; + pledged_quantity: string; +}; + +export type Portfolio = { + name?: string; + uuid?: string; + type?: string; +}; + +export type PortfolioBreakdown = { + portfolio?: Portfolio; + portfolio_balances?: Record; + spot_positions?: Record[]; + perp_positions?: Record[]; + futures_positions?: Record[]; +}; + +export type PriceBook = { + product_id: string; + bids: Record[]; + asks: Record[]; + time?: Record; +}; + +export type Products = { + products?: Product[]; + num_products?: number; +}; + +export type Product = { + product_id: string; + price: string; + price_percentage_change_24h: string; + volume_24h: string; + volume_percentage_change_24h: string; + base_increment: string; + quote_increment: string; + quote_min_size: string; + quote_max_size: string; + base_min_size: string; + base_max_size: string; + base_name: string; + quote_name: string; + watched: boolean; + is_disabled: boolean; + new: boolean; + status: string; + cancel_only: boolean; + limit_only: boolean; + post_only: boolean; + trading_disabled: boolean; + auction_mode: boolean; + product_type?: ProductType; + quote_currency_id?: string; + base_currency_id?: string; + fcm_trading_session_details?: Record; + mid_market_price?: string; + alias?: string; + alias_to?: string[]; + base_display_symbol: string; + quote_display_symbol?: string; + view_only?: boolean; + price_increment?: string; + display_name?: string; + product_venue?: ProductVenue; + approximate_quote_24h_volume?: string; + future_product_details?: Record; +}; + +export type Candles = { + candles?: Candle[]; +}; + +export type Candle = { + start?: string; + low?: string; + high?: string; + open?: string; + close?: string; + volume?: string; +}; + +export type HistoricalMarketTrade = { + trade_id?: string; + product_id?: string; + price?: string; + size?: string; + time?: string; + side?: OrderSide; +}; + +export type PortfolioBalance = { + portfolio_uuid?: string; + balances?: Balance[]; + is_margin_limit_reached?: boolean; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/converts-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/converts-types.ts new file mode 100644 index 0000000000..8724b89d19 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/converts-types.ts @@ -0,0 +1,42 @@ +// Create Convert Quote +import { RatConvertTrade, TradeIncentiveMetadata } from './common-types'; + +export type CreateConvertQuoteRequest = { + // Body Params + fromAccount: string; + toAccount: string; + amount: string; + tradeIncentiveMetadata?: TradeIncentiveMetadata; +}; + +export type CreateConvertQuoteResponse = { + trade?: RatConvertTrade; +}; + +// Get Convert Trade +export type GetConvertTradeRequest = { + // Path Params + tradeId: string; + + //Query Params + fromAccount: string; + toAccount: string; +}; + +export type GetConvertTradeResponse = { + trade?: RatConvertTrade; +}; + +// Commit Convert Trade +export type CommitConvertTradeRequest = { + // Path Params + tradeId: string; + + // Body Params + fromAccount: string; + toAccount: string; +}; + +export type CommitConvertTradeResponse = { + trade?: RatConvertTrade; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/dataAPI-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/dataAPI-types.ts new file mode 100644 index 0000000000..7a773a0e8f --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/dataAPI-types.ts @@ -0,0 +1,10 @@ +import { PortfolioType } from './common-types'; + +// Get API Key Permissions +export type GetAPIKeyPermissionsResponse = { + can_view?: boolean; + can_trade?: boolean; + can_transfer?: boolean; + portfolio_uuid?: string; + portfolio_type?: PortfolioType; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/fees-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/fees-types.ts new file mode 100644 index 0000000000..e9db653b37 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/fees-types.ts @@ -0,0 +1,23 @@ +import { ContractExpiryType, ProductType, ProductVenue } from './common-types'; + +// Get Transactions Summary +export type GetTransactionsSummaryRequest = { + // Query Params + productType?: ProductType; + contractExpiryType?: ContractExpiryType; + productVenue?: ProductVenue; +}; + +export type GetTransactionsSummaryResponse = { + total_volume: number; + total_fees: number; + fee_tier: Record; + margin_rate?: Record; + goods_and_services_tax?: Record; + advanced_trade_only_volumes?: number; + advanced_trade_only_fees?: number; + coinbase_pro_volume?: number; // deprecated + coinbase_pro_fees?: number; // deprecated + total_balance?: string; + has_promo_fee?: boolean; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/futures-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/futures-types.ts new file mode 100644 index 0000000000..61bbf97b1d --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/futures-types.ts @@ -0,0 +1,71 @@ +import { + FCMBalanceSummary, + FCMPosition, + FCMSweep, + IntradayMarginSetting, +} from './common-types'; + +// Get Futures Balance Summary +export type GetFuturesBalanceSummaryResponse = { + balance_summary?: FCMBalanceSummary; +}; + +// Get Intraday Margin Setting +export type GetIntradayMarginSettingResponse = { + setting?: IntradayMarginSetting; +}; + +// Set Intraday Margin Setting +export type SetIntradayMarginSettingRequest = { + // Body Params + setting?: IntradayMarginSetting; +}; + +export type SetIntradayMarginSettingResponse = Record; + +// Get Current Margin Window +export type GetCurrentMarginWindowRequest = { + // Query Params + marginProfileType?: string; +}; + +export type GetCurrentMarginWindowResponse = { + margin_window?: Record; + is_intraday_margin_killswitch_enabled?: boolean; + is_intraday_margin_enrollment_killswitch_enabled?: boolean; +}; + +// List Futures Positions +export type ListFuturesPositionsResponse = { + positions?: FCMPosition[]; +}; + +// Get Futures Position +export type GetFuturesPositionRequest = { + // Path Params + productId: string; +}; + +export type GetFuturesPositionResponse = { + position?: FCMPosition; +}; + +// Schedule Futures Sweep +export type ScheduleFuturesSweepRequest = { + // Body Params + usdAmount?: string; +}; + +export type ScheduleFuturesSweepResponse = { + success?: boolean; +}; + +// List Futures Sweeps +export type ListFuturesSweepsResponse = { + sweeps: FCMSweep[]; +}; + +// Cancel Pending Futures Sweep = { +export type CancelPendingFuturesSweep = { + success?: boolean; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/orders-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/orders-types.ts new file mode 100644 index 0000000000..486d93cd16 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/orders-types.ts @@ -0,0 +1,185 @@ +import { + CancelOrderObject, + ContractExpiryType, + MarginType, + Order, + OrderConfiguration, + OrderPlacementSource, + OrderSide, + ProductType, + SortBy, +} from './common-types'; + +// Create Order +export type CreateOrderRequest = { + // Body Params + clientOrderId: string; + productId: string; + side: OrderSide; + orderConfiguration: OrderConfiguration; + selfTradePreventionId?: string; + leverage?: string; + marginType?: MarginType; + retailPortfolioId?: string; +}; + +export type CreateOrderResponse = { + success: boolean; + failure_reason?: Record; // deprecated + order_id?: string; // deprecated + response?: + | { success_response: Record } + | { error_response: Record }; + order_configuration?: OrderConfiguration; +}; + +// Cancel Orders +export type CancelOrdersRequest = { + // Body Params + orderIds: string[]; +}; + +export type CancelOrdersResponse = { + results?: CancelOrderObject[]; +}; + +// Edit Order +export type EditOrderRequest = { + // Body Params + orderId: string; + price?: string; + size?: string; +}; + +export type EditOrderResponse = { + success: boolean; + response?: + | { success_response: Record } // deprecated + | { error_response: Record }; // deprecated + errors?: Record[]; +}; + +// Edit Order Preview +export type EditOrderPreviewRequest = { + // Body Params + orderId: string; + price?: string; + size?: string; +}; + +export type EditOrderPreviewResponse = { + errors: Record[]; + slippage?: string; + order_total?: string; + commission_total?: string; + quote_size?: string; + base_size?: string; + best_bid?: string; + average_filled_price?: string; +}; + +// List Orders +export type ListOrdersRequest = { + // Query Params + orderIds?: string[]; + productIds?: string[]; + orderStatus?: string[]; + limit?: number; + startDate?: string; + endDate?: string; + orderType?: string; + orderSide?: OrderSide; + cursor?: string; + productType?: ProductType; + orderPlacementSource?: OrderPlacementSource; + contractExpiryType?: ContractExpiryType; + assetFilters?: string[]; + retailPortfolioId?: string; + timeInForces?: string; + sortBy?: SortBy; +}; + +export type ListOrdersResponse = { + orders: Order[]; + sequence?: number; // deprecated + has_next: boolean; + cursor?: string; +}; + +// List Fills +export type ListFillsRequest = { + // Query Params + orderIds?: string[]; + tradeIds?: string[]; + productIds?: string[]; + startSequenceTimestamp?: string; + endSequenceTimestamp?: string; + retailPortfolioId?: string; + limit?: number; + cursor?: string; + sortBy?: SortBy; +}; + +export type ListFillsResponse = { + fills?: Record[]; + cursor?: string; +}; + +// Get Order +export type GetOrderRequest = { + // Path Params + orderId: string; +}; + +export type GetOrderResponse = { + order?: Order; +}; + +// Preview Order +export type PreviewOrderRequest = { + // Body Params + productId: string; + side: OrderSide; + orderConfiguration: OrderConfiguration; + leverage?: string; + marginType?: MarginType; + retailPortfolioId?: string; +}; + +export type PreviewOrderResponse = { + order_total: string; + commission_total: string; + errs: Record[]; + warning: Record[]; + quote_size: string; + base_size: string; + best_bid: string; + best_ask: string; + is_max: boolean; + order_margin_total?: string; + leverage?: string; + long_leverage?: string; + short_leverage?: string; + slippage?: string; + preview_id?: string; + current_liquidation_buffer?: string; + projected_liquidation_buffer?: string; + max_leverage?: string; + pnl_configuration?: Record; +}; + +// Close Position +export type ClosePositionRequest = { + // Body Params + clientOrderId: string; + productId: string; + size?: string; +}; + +export type ClosePositionResponse = { + success: boolean; + response?: + | { success_response: Record } + | { error_response: Record }; + order_configuration?: OrderConfiguration; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/payments-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/payments-types.ts new file mode 100644 index 0000000000..064046f85a --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/payments-types.ts @@ -0,0 +1,16 @@ +import { PaymentMethod } from './common-types'; + +// List Payment Methods +export type ListPaymentMethodsResponse = { + paymentMethods?: PaymentMethod; +}; + +// Get Payment Method +export type GetPaymentMethodRequest = { + // Path Params + paymentMethodId: string; +}; + +export type GetPaymentMethodResponse = { + paymentMethod?: PaymentMethod; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/perpetuals-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/perpetuals-types.ts new file mode 100644 index 0000000000..d1c1235a1e --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/perpetuals-types.ts @@ -0,0 +1,72 @@ +import { + PerpetualPortfolio, + PortfolioBalance, + PortfolioSummary, + Position, + PositionSummary, +} from './common-types'; + +// Allocate Portfolio +export type AllocatePortfolioRequest = { + // Body Params + portfolioUuid: string; + symbol: string; + amount: string; + currency: string; +}; + +export type AllocatePortfolioResponse = Record; + +// Get Perpetuals Portfolio Summary +export type GetPerpetualsPortfolioSummaryRequest = { + // Path Params + portfolioUuid: string; +}; + +export type GetPerpetualsPortfolioSummaryResponse = { + portfolios?: PerpetualPortfolio[]; + summary?: PortfolioSummary; +}; + +// List Perpetuals Positions +export type ListPerpetualsPositionsRequest = { + // Path Params + portfolioUuid: string; +}; + +export type ListPerpetualsPositionsResponse = { + positions?: Position[]; + summary?: PositionSummary; +}; + +// Get Perpetuals Position +export type GetPerpetualsPositionRequest = { + // Path Params + portfolioUuid: string; + symbol: string; +}; + +export type GetPerpetualsPositionResponse = { + position?: Position; +}; + +// Get Portfolio Balances +export type GetPortfolioBalancesRequest = { + // Path Params + portfolioUuid: string; +}; + +export type GetPortfolioBalancesResponse = { + portfolio_balancces?: PortfolioBalance[]; +}; + +// Opt In or Out of Multi Asset Collateral +export type OptInOutMultiAssetCollateralRequest = { + // Body Params + portfolioUuid?: string; + multiAssetCollateralEnabled?: boolean; +}; + +export type OptInOutMultiAssetCollateralResponse = { + cross_collateral_enabled?: boolean; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/portfolios-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/portfolios-types.ts new file mode 100644 index 0000000000..e26698da0c --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/portfolios-types.ts @@ -0,0 +1,68 @@ +import { Portfolio, PortfolioBreakdown, PortfolioType } from './common-types'; + +// List Portfolios +export type ListPortfoliosRequest = { + // Query Params + portfolioType?: PortfolioType; +}; + +export type ListPortfoliosResponse = { + portfolios?: Portfolio[]; +}; + +// Create Portfolio +export type CreatePortfolioRequest = { + // Body Params + name: string; +}; + +export type CreatePortfolioResponse = { + portfolio?: Portfolio; +}; + +// Move Portfolio Funds +export type MovePortfolioFundsRequest = { + // Body Params + funds: Record; + sourcePortfolioUuid: string; + targetPortfolioUuid: string; +}; + +export type MovePortfolioFundsResponse = { + source_portfolio_uuid?: string; + target_portfolio_uuid?: string; +}; + +// Get Portfolio Breakdown +export type GetPortfolioBreakdownRequest = { + // Path Params + portfolioUuid: string; + + // Query Params + currency?: string; +}; + +export type GetPortfolioBreakdownResponse = { + breakdown?: PortfolioBreakdown; +}; + +// Delete Portfolio +export type DeletePortfolioRequest = { + // Path Params + portfolioUuid: string; +}; + +export type DeletePortfolioResponse = Record; + +// Edit Portfolio +export type EditPortfolioRequest = { + // Path Params + portfolioUuid: string; + + // Body Params + name: string; +}; + +export type EditPortfolioResponse = { + portfolio?: Portfolio; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/products-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/products-types.ts new file mode 100644 index 0000000000..9713e617df --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/products-types.ts @@ -0,0 +1,96 @@ +import { + Candles, + ContractExpiryType, + ExpiringContractStatus, + Granularity, + HistoricalMarketTrade, + PriceBook, + Product, + Products, + ProductType, +} from './common-types'; + +// Get Best Bid Ask +export type GetBestBidAskRequest = { + // Query Params + productIds?: string[]; +}; + +export type GetBestBidAskResponse = { + pricebooks: PriceBook[]; +}; + +// Get Product Book +export type GetProductBookRequest = { + // Query Params + productId: string; + limit?: number; + aggregationPriceIncrement?: number; +}; + +export type GetProductBookResponse = { + pricebook: PriceBook; +}; + +// List Products +export type ListProductsRequest = { + // Query Params + limit?: number; + offset?: number; + productType?: ProductType; + productIds?: string[]; + contractExpiryType?: ContractExpiryType; + expiringContractStatus?: ExpiringContractStatus; + getTradabilityStatus?: boolean; + getAllProducts?: boolean; +}; + +export type ListProductsResponse = { + body?: Products; +}; + +// Get Product +export type GetProductRequest = { + // Path Params + productId: string; + + // Query Params + getTradabilityStatus?: boolean; +}; + +export type GetProductResponse = { + body?: Product; +}; + +// Get Product Candles +export type GetProductCandlesRequest = { + // Path Params + productId: string; + + // Query Params + start: string; + end: string; + granularity: Granularity; + limit?: number; +}; + +export type GetProductCandlesResponse = { + body?: Candles; +}; + +// Get Market Trades +export type GetMarketTradesRequest = { + // Path Params + productId: string; + + // Query Params + limit: number; + start?: string; + end?: string; +}; + +export type GetMarketTradesResponse = { + trades?: HistoricalMarketTrade[]; + best_bid?: string; + best_ask?: string; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/public-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/public-types.ts new file mode 100644 index 0000000000..4f5bbe4a4e --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/public-types.ts @@ -0,0 +1,88 @@ +import { + Candles, + ContractExpiryType, + ExpiringContractStatus, + HistoricalMarketTrade, + PriceBook, + Product, + Products, + ProductType, +} from './common-types'; + +// Get Server Time +export type GetServerTimeResponse = { + iso?: string; + epochSeconds?: number; + epochMillis?: number; +}; + +// Get Public Product Book +export type GetPublicProductBookRequest = { + // Query Params + productId: string; + limit?: number; + aggregationPriceIncrement?: number; +}; + +export type GetPublicProductBookResponse = { + pricebook: PriceBook; +}; + +// List Public Products +export type ListPublicProductsRequest = { + // Query Params + limit?: number; + offset?: number; + productType?: ProductType; + productIds?: string[]; + contractExpiryType?: ContractExpiryType; + expiringContractStatus?: ExpiringContractStatus; + getAllProducts?: boolean; +}; + +export type ListPublicProductsResponse = { + body?: Products; +}; + +// Get Public Product +export type GetPublicProductRequest = { + // Path Params + productId: string; +}; + +export type GetPublicProductResponse = { + body?: Product; +}; + +//Get Public Product Candles +export type GetPublicProductCandlesRequest = { + // Path Params + productId: string; + + // Query Params + start: string; + end: string; + granularity: string; + limit?: number; +}; + +export type GetPublicProductCandlesResponse = { + body?: Candles; +}; + +// Get Public Market Trades +export type GetPublicMarketTradesRequest = { + // Path Params + productId: string; + + // Query Params + limit: number; + start?: string; + end?: string; +}; + +export type GetPublicMarketTradesResponse = { + trades?: HistoricalMarketTrade[]; + best_bid?: string; + best_ask?: string; +}; diff --git a/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/request-types.ts b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/request-types.ts new file mode 100644 index 0000000000..56c7a926a9 --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/src/rest/types/request-types.ts @@ -0,0 +1,14 @@ +export enum method { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + DELETE = 'DELETE', +} + +export interface RequestOptions { + method: method; + endpoint: string; + queryParams?: Record; + bodyParams?: Record; + isPublic: boolean; +} diff --git a/packages/plugin-coinbase/advanced-sdk-ts/tsconfig.json b/packages/plugin-coinbase/advanced-sdk-ts/tsconfig.json new file mode 100644 index 0000000000..9a8f3ef63b --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts/tsconfig.json @@ -0,0 +1,106 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + /* Language and Environment */ + "target": "es6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": [ + "src/**/*.ts" + ], // Include all .ts files in the src directory and subdirectories + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/plugin-coinbase/package.json b/packages/plugin-coinbase/package.json index 492ae8e6d8..01b4bd3a1a 100644 --- a/packages/plugin-coinbase/package.json +++ b/packages/plugin-coinbase/package.json @@ -6,10 +6,15 @@ "types": "dist/index.d.ts", "dependencies": { "@ai16z/eliza": "workspace:*", - "coinbase-api": "1.0.5" + "coinbase-api": "1.0.5", + "coinbase-advanced-sdk": "file:../../packages/plugin-coinbase/advanced-sdk-ts", + "jsonwebtoken": "^9.0.2", + "@types/jsonwebtoken": "^9.0.7", + "node-fetch": "^2.6.1" }, "devDependencies": { - "tsup": "8.3.5" + "tsup": "8.3.5", + "@types/node": "^20.0.0" }, "scripts": { "build": "tsup --format esm --dts", diff --git a/packages/plugin-coinbase/src/index.ts b/packages/plugin-coinbase/src/index.ts index 280f8f4b71..69d4c83826 100644 --- a/packages/plugin-coinbase/src/index.ts +++ b/packages/plugin-coinbase/src/index.ts @@ -3,6 +3,7 @@ import { coinbaseCommercePlugin } from "./plugins/commerce"; import { tradePlugin } from "./plugins/trade"; import { tokenContractPlugin } from "./plugins/tokenContract"; import { webhookPlugin } from "./plugins/webhooks"; +import { advancedTradePlugin } from "./plugins/advancedTrade"; export const plugins = { coinbaseMassPaymentsPlugin, @@ -10,6 +11,7 @@ export const plugins = { tradePlugin, tokenContractPlugin, webhookPlugin, + advancedTradePlugin, }; export * from "./plugins/massPayments"; @@ -17,3 +19,4 @@ export * from "./plugins/commerce"; export * from "./plugins/trade"; export * from "./plugins/tokenContract"; export * from "./plugins/webhooks"; +export * from "./plugins/advancedTrade"; diff --git a/packages/plugin-coinbase/src/plugins/advancedTrade.ts b/packages/plugin-coinbase/src/plugins/advancedTrade.ts new file mode 100644 index 0000000000..472616e2d1 --- /dev/null +++ b/packages/plugin-coinbase/src/plugins/advancedTrade.ts @@ -0,0 +1,372 @@ +import { RESTClient } from '../../advanced-sdk-ts/src/rest'; +import { + Action, + Plugin, + elizaLogger, + IAgentRuntime, + Memory, + HandlerCallback, + State, + composeContext, + generateObjectV2, + ModelClass, + Provider, +} from "@ai16z/eliza"; +import { advancedTradeTemplate } from "../templates"; +import { isAdvancedTradeContent, AdvancedTradeSchema } from "../types"; +import { readFile } from "fs/promises"; +import { parse } from "csv-parse/sync"; +import path from "path"; +import { fileURLToPath } from "url"; +import fs from "fs"; +import { createArrayCsvWriter } from "csv-writer"; +import { OrderSide, OrderConfiguration } from '../../advanced-sdk-ts/src/rest/types/common-types'; +import { CreateOrderResponse } from '../../advanced-sdk-ts/src/rest/types/orders-types'; + +// File path setup remains the same +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const baseDir = path.resolve(__dirname, "../../plugin-coinbase/src/plugins"); +const tradeCsvFilePath = path.join(baseDir, "advanced_trades.csv"); + +const tradeProvider: Provider = { + get: async (runtime: IAgentRuntime, _message: Memory) => { + try { + const client = new RESTClient( + runtime.getSetting("COINBASE_API_KEY") ?? process.env.COINBASE_API_KEY, + runtime.getSetting("COINBASE_PRIVATE_KEY") ?? process.env.COINBASE_PRIVATE_KEY + ); + + // Get accounts and products information + let accounts, products; + try { + accounts = await client.listAccounts({}); + } catch (error) { + elizaLogger.error("Error fetching accounts:", error); + return []; + } + + try { + products = await client.listProducts({}); + } catch (error) { + elizaLogger.error("Error fetching products:", error); + return []; + } + + // Read CSV file logic remains the same + if (!fs.existsSync(tradeCsvFilePath)) { + const csvWriter = createArrayCsvWriter({ + path: tradeCsvFilePath, + header: [ + "Order ID", + "Success", + "Order Configuration", + "Response", + ], + }); + await csvWriter.writeRecords([]); + } + + let csvData, records; + try { + csvData = await readFile(tradeCsvFilePath, "utf-8"); + } catch (error) { + elizaLogger.error("Error reading CSV file:", error); + return []; + } + + try { + records = parse(csvData, { + columns: true, + skip_empty_lines: true, + }); + } catch (error) { + elizaLogger.error("Error parsing CSV data:", error); + return []; + } + + return { + accounts: accounts.accounts, + products: products.products, + trades: records + }; + } catch (error) { + elizaLogger.error("Error in tradeProvider:", error); + return []; + } + }, +}; + +export async function appendTradeToCsv(tradeResult: any) { + try { + const csvWriter = createArrayCsvWriter({ + path: tradeCsvFilePath, + header: [ + "Order ID", + "Success", + "Order Configuration", + "Response", + ], + append: true, + }); + elizaLogger.info("Trade result:", tradeResult); + + + // Format trade data based on success/failure + const formattedTrade = [ + tradeResult.success_response?.order_id || tradeResult.failure_response?.order_id || '', + tradeResult.success, + // JSON.stringify(tradeResult.order_configuration || {}), + // JSON.stringify(tradeResult.success_response || tradeResult.failure_response || {}) + ]; + + elizaLogger.info("Formatted trade for CSV:", formattedTrade); + await csvWriter.writeRecords([formattedTrade]); + elizaLogger.info("Trade written to CSV successfully"); + } catch (error) { + elizaLogger.error("Error writing trade to CSV:", error); + // Log the actual error for debugging + if (error instanceof Error) { + elizaLogger.error("Error details:", error.message); + } + } +} + +async function hasEnoughBalance(client: RESTClient, currency: string, amount: number, side: string): Promise { + try { + const response = await client.listAccounts({}); + const accounts = JSON.parse(response); + elizaLogger.info("Accounts:", accounts); + const checkCurrency = side === "BUY" ? "USD" : currency; + elizaLogger.info(`Checking balance for ${side} order of ${amount} ${checkCurrency}`); + + // Find account with exact currency match + const account = accounts?.accounts.find(acc => + acc.currency === checkCurrency && + (checkCurrency === "USD" ? acc.type === "ACCOUNT_TYPE_FIAT" : acc.type === "ACCOUNT_TYPE_CRYPTO") + ); + + if (!account) { + elizaLogger.error(`No ${checkCurrency} account found`); + return false; + } + + const available = parseFloat(account.available_balance.value); + // Add buffer for fees only on USD purchases + const requiredAmount = side === "BUY" ? amount * 1.01 : amount; + elizaLogger.info(`Required amount (including buffer): ${requiredAmount} ${checkCurrency}`); + + const hasBalance = available >= requiredAmount; + elizaLogger.info(`Has sufficient balance: ${hasBalance}`); + + return hasBalance; + } catch (error) { + elizaLogger.error("Balance check failed with error:", { + error: error instanceof Error ? error.message : 'Unknown error', + currency, + amount, + side + }); + return false; + } +} + +export const executeAdvancedTradeAction: Action = { + name: "EXECUTE_ADVANCED_TRADE", + description: "Execute a trade using Coinbase Advanced Trading API", + validate: async (runtime: IAgentRuntime) => { + return !!(runtime.getSetting("COINBASE_API_KEY") || process.env.COINBASE_API_KEY) && + !!(runtime.getSetting("COINBASE_PRIVATE_KEY") || process.env.COINBASE_PRIVATE_KEY); + }, + similes: [ + "EXECUTE_ADVANCED_TRADE", + "ADVANCED_MARKET_ORDER", + "ADVANCED_LIMIT_ORDER", + "COINBASE_PRO_TRADE", + "PROFESSIONAL_TRADE" + ], + handler: async ( + runtime: IAgentRuntime, + _message: Memory, + state: State, + _options: any, + callback: HandlerCallback + ) => { + let client: RESTClient; + + // Initialize client + try { + client = new RESTClient( + runtime.getSetting("COINBASE_API_KEY") ?? process.env.COINBASE_API_KEY, + runtime.getSetting("COINBASE_PRIVATE_KEY") ?? process.env.COINBASE_PRIVATE_KEY + ); + elizaLogger.info("Advanced trade client initialized"); + } catch (error) { + elizaLogger.error("Client initialization failed:", error); + callback({ + text: "Failed to initialize trading client. Please check your API credentials." + }, []); + return; + } + + // Generate trade details + let tradeDetails; + try { + tradeDetails = await generateObjectV2({ + runtime, + context: composeContext({ state, template: advancedTradeTemplate }), + modelClass: ModelClass.LARGE, + schema: AdvancedTradeSchema, + }); + elizaLogger.info("Trade details generated:", tradeDetails.object); + } catch (error) { + elizaLogger.error("Trade details generation failed:", error); + callback({ + text: "Failed to generate trade details. Please provide valid trading parameters." + }, []); + return; + } + + // Validate trade content + if (!isAdvancedTradeContent(tradeDetails.object)) { + elizaLogger.error("Invalid trade content:", tradeDetails.object); + callback({ + text: "Invalid trade details. Please check your input parameters." + }, []); + return; + } + + const { productId, amount, side, orderType, limitPrice } = tradeDetails.object; + + // Configure order + let orderConfiguration: OrderConfiguration; + try { + if (orderType === "MARKET") { + orderConfiguration = side === "BUY" ? { + market_market_ioc: { + quote_size: amount.toString() + } + } : { + market_market_ioc: { + base_size: amount.toString() + } + }; + } else { + if (!limitPrice) { + throw new Error("Limit price is required for limit orders"); + } + orderConfiguration = { + limit_limit_gtc: { + baseSize: amount.toString(), + limitPrice: limitPrice.toString(), + postOnly: false + } + }; + } + elizaLogger.info("Order configuration created:", orderConfiguration); + } catch (error) { + elizaLogger.error("Order configuration failed:", error); + callback({ + text: error instanceof Error ? error.message : "Failed to configure order parameters." + }, []); + return; + } + + // Execute trade + let order: CreateOrderResponse; + try { + if (!(await hasEnoughBalance(client, productId.split('-')[0], amount, side))) { + callback({ + text: `Insufficient ${side === "BUY" ? "USD" : productId.split('-')[0]} balance to execute this trade` + }, []); + return; + } + + order = await client.createOrder({ + clientOrderId: crypto.randomUUID(), + productId, + side: side === "BUY" ? OrderSide.BUY : OrderSide.SELL, + orderConfiguration + }); + + elizaLogger.info("Trade executed successfully:", order); + } catch (error) { + elizaLogger.error("Trade execution failed:", error?.message); + callback({ + text: `Failed to execute trade: ${error instanceof Error ? error.message : "Unknown error occurred"}` + }, []); + return; + } + // Log trade to CSV + try { + // await appendTradeToCsv(order); + elizaLogger.info("Trade logged to CSV"); + } catch (csvError) { + elizaLogger.warn("Failed to log trade to CSV:", csvError); + // Continue execution as this is non-critical + } + + callback({ + text: `Advanced Trade executed successfully: +- Product: ${productId} +- Type: ${orderType} Order +- Side: ${side} +- Amount: ${amount} +- ${orderType === "LIMIT" ? `- Limit Price: ${limitPrice}\n` : ""}- Order ID: ${order.order_id} +- Status: ${order.success} +- Order Id: ${order.order_id} +- Response: ${JSON.stringify(order.response)} +- Order Configuration: ${JSON.stringify(order.order_configuration)}` + }, []); + }, + examples: [ + [ + { + user: "{{user1}}", + content: { text: "Place an advanced market order to buy $1 worth of BTC" } + }, + { + user: "{{agentName}}", + content: { + text: `Advanced Trade executed successfully: +- Product: BTC-USD +- Type: Market Order +- Side: BUY +- Amount: 1000 +- Order ID: CB-ADV-12345 +- Success: true +- Response: {"success_response":{}} +- Order Configuration: {"market_market_ioc":{"quote_size":"1000"}}` + } + } + ], + [ + { + user: "{{user1}}", + content: { text: "Set a limit order to sell 0.5 ETH at $2000" } + }, + { + user: "{{agentName}}", + content: { + text: `Advanced Trade executed successfully: +- Product: ETH-USD +- Type: Limit Order +- Side: SELL +- Amount: 0.5 +- Limit Price: 2000 +- Order ID: CB-ADV-67890 +- Success: true +- Response: {"success_response":{}} +- Order Configuration: {"limit_limit_gtc":{"baseSize":"0.5","limitPrice":"2000","postOnly":false}}` + } + } + ] + ] +}; + +export const advancedTradePlugin: Plugin = { + name: "advancedTradePlugin", + description: "Enables advanced trading using Coinbase Advanced Trading API", + actions: [executeAdvancedTradeAction], + providers: [tradeProvider], +}; \ No newline at end of file diff --git a/packages/plugin-coinbase/src/plugins/commerce.ts b/packages/plugin-coinbase/src/plugins/commerce.ts index c89b48c430..95d651df6d 100644 --- a/packages/plugin-coinbase/src/plugins/commerce.ts +++ b/packages/plugin-coinbase/src/plugins/commerce.ts @@ -506,8 +506,14 @@ export const chargeProvider: Provider = { elizaLogger.log("Current Balances:", balances); elizaLogger.log("Last Transactions:", transactions); } - elizaLogger.log("Charges:", charges); - return { charges: charges.data, balances, transactions }; + const formattedCharges = charges.map(charge => ({ + id: charge.id, + name: charge.name, + description: charge.description, + pricing: charge.pricing, + })); + elizaLogger.log("Charges:", formattedCharges); + return { charges: formattedCharges, balances, transactions }; }, }; diff --git a/packages/plugin-coinbase/src/plugins/webhooks.ts b/packages/plugin-coinbase/src/plugins/webhooks.ts index 5a722833d9..33be86c496 100644 --- a/packages/plugin-coinbase/src/plugins/webhooks.ts +++ b/packages/plugin-coinbase/src/plugins/webhooks.ts @@ -15,6 +15,7 @@ import { import { WebhookSchema, isWebhookContent, WebhookContent } from "../types"; import { webhookTemplate } from "../templates"; import { appendWebhooksToCsv } from "../utils"; + export const webhookProvider: Provider = { get: async (runtime: IAgentRuntime, _message: Memory) => { try { @@ -95,7 +96,7 @@ export const createWebhookAction: Action = { const webhookDetails = await generateObjectV2({ runtime, context, - modelClass: ModelClass.SMALL, + modelClass: ModelClass.LARGE, schema: WebhookSchema, }); diff --git a/packages/plugin-coinbase/src/templates.ts b/packages/plugin-coinbase/src/templates.ts index a5546a1492..a24f528d1d 100644 --- a/packages/plugin-coinbase/src/templates.ts +++ b/packages/plugin-coinbase/src/templates.ts @@ -84,11 +84,13 @@ Extract the following details for processing a trade using the Coinbase SDK: - **amount** (number): The amount to trade. - **sourceAsset** (string): The asset ID to trade from (must be one of: ETH, SOL, USDC, WETH, GWEI, LAMPORT). - **targetAsset** (string): The asset ID to trade to (must be one of: ETH, SOL, USDC, WETH, GWEI, LAMPORT). +- **side** (string): The side of the trade (must be either "BUY" or "SELL"). Ensure that: 1. **network** is one of the supported networks: "base", "sol", "eth", "arb", or "pol". 2. **sourceAsset** and **targetAsset** are valid assets from the provided list. 3. **amount** is a positive number. +4. **side** is either "BUY" or "SELL". Provide the details in the following JSON format: @@ -97,7 +99,8 @@ Provide the details in the following JSON format: "network": "", "amount": , "sourceAsset": "", - "targetAsset": "" + "targetAsset": "", + "side": "" } \`\`\` @@ -105,6 +108,38 @@ Here are the recent user messages for context: {{recentMessages}} `; +export const advancedTradeTemplate = ` +Extract the following details for processing an advanced trade using the Coinbase Advanced Trading API: +- **productId** (string): The trading pair ID (e.g., "BTC-USD", "ETH-USD", "SOL-USD") +- **side** (string): The side of the trade (must be either "BUY" or "SELL") +- **amount** (number): The amount to trade +- **orderType** (string): The type of order (must be either "MARKET" or "LIMIT") +- **limitPrice** (number, optional): The limit price for limit orders + +Ensure that: +1. **productId** follows the format "ASSET-USD" (e.g., "BTC-USD") +2. **side** is either "BUY" or "SELL" +3. **amount** is a positive number +4. **orderType** is either "MARKET" or "LIMIT" +5. **limitPrice** is provided when orderType is "LIMIT" + +Provide the details in the following JSON format: + +\`\`\`json +{ + "productId": "", + "side": "", + "amount": , + "orderType": "", + "limitPrice": +} +\`\`\` + +Here are the recent user messages for context: +{{recentMessages}} +`; + + export const tokenContractTemplate = ` Extract the following details for deploying a token contract using the Coinbase SDK: - **contractType** (string): The type of token contract to deploy (ERC20, ERC721, or ERC1155) diff --git a/packages/plugin-coinbase/src/types.ts b/packages/plugin-coinbase/src/types.ts index 5e070c1be8..02034744b7 100644 --- a/packages/plugin-coinbase/src/types.ts +++ b/packages/plugin-coinbase/src/types.ts @@ -59,7 +59,7 @@ export const TradeSchema = z.object({ amount: z.number(), sourceAsset: z.enum(assetValues), targetAsset: z.enum(assetValues), - leverage: z.number().optional(), // Optional leverage for leveraged trades + side: z.enum(["BUY", "SELL"]), }); export interface TradeContent { @@ -67,6 +67,8 @@ export interface TradeContent { amount: number; sourceAsset: string; targetAsset: string; + side: "BUY" | "SELL"; + } export const isTradeContent = (object: any): object is TradeContent => { @@ -153,4 +155,24 @@ export type WebhookContent = z.infer; export const isWebhookContent = (object: any): object is WebhookContent => { return WebhookSchema.safeParse(object).success; +}; + +export const AdvancedTradeSchema = z.object({ + productId: z.string(), + side: z.enum(["BUY", "SELL"]), + amount: z.number(), + orderType: z.enum(["MARKET", "LIMIT"]), + limitPrice: z.number().optional(), +}); + +export interface AdvancedTradeContent { + productId: string; + side: "BUY" | "SELL"; + amount: number; + orderType: "MARKET" | "LIMIT"; + limitPrice?: number; +} + +export const isAdvancedTradeContent = (object: any): object is AdvancedTradeContent => { + return AdvancedTradeSchema.safeParse(object).success; }; \ No newline at end of file diff --git a/packages/plugin-coinbase/src/utils.ts b/packages/plugin-coinbase/src/utils.ts index 9b96db423f..c3e801a45f 100644 --- a/packages/plugin-coinbase/src/utils.ts +++ b/packages/plugin-coinbase/src/utils.ts @@ -356,9 +356,8 @@ export async function getWalletDetails( })); // Fetch the wallet's recent transactions - const walletAddress = await wallet.getDefaultAddress(); - const transactions = await walletAddress.listTransactions(); - const transactionsData = transactions?.data ?? []; + + const transactionsData = []; const formattedTransactions = transactionsData.map((transaction) => { const content = transaction.content(); return { diff --git a/packages/plugin-coinbase/tsconfig.json b/packages/plugin-coinbase/tsconfig.json index 834c4dce26..4751d6174f 100644 --- a/packages/plugin-coinbase/tsconfig.json +++ b/packages/plugin-coinbase/tsconfig.json @@ -2,12 +2,17 @@ "extends": "../core/tsconfig.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", + "rootDir": ".", + "rootDirs": [ + "src", + "advanced-sdk-ts" + ], "types": [ "node" ] }, "include": [ - "src/**/*.ts" + "src/**/*.ts", + "advanced-sdk-ts/src/**/*.ts", ] } \ No newline at end of file diff --git a/packages/plugin-coinbase/tsup.config.ts b/packages/plugin-coinbase/tsup.config.ts index 91b5946d0a..42a69c634f 100644 --- a/packages/plugin-coinbase/tsup.config.ts +++ b/packages/plugin-coinbase/tsup.config.ts @@ -5,22 +5,44 @@ export default defineConfig({ outDir: "dist", sourcemap: true, clean: true, - format: ["esm"], // Ensure you're targeting CommonJS + format: ["cjs", "esm"], + dts: true, + splitting: false, + bundle: true, + minify: false, external: [ - "dotenv", // Externalize dotenv to prevent bundling - "fs", // Externalize fs to use Node.js built-in module - "path", // Externalize other built-ins if necessary + "@coinbase/coinbase-sdk", + "form-data", + "combined-stream", + "axios", + "util", + "stream", + "http", + "https", + "events", + "crypto", + "buffer", + "url", + "zlib", + "querystring", + "os", "@reflink/reflink", "@node-llama-cpp", - "https", - "http", "agentkeepalive", - "@coinbase/coinbase-sdk", "fs/promises", "csv-writer", "csv-parse/sync", - "path", - "url", - // Add other modules you want to externalize + "dotenv", + "coinbase-advanced-sdk", + "advanced-sdk-ts", + "jsonwebtoken", + "whatwg-url" ], + platform: 'node', + target: 'node18', + esbuildOptions(options) { + options.bundle = true; + options.platform = 'node'; + options.target = 'node18'; + } }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 680e51821f..a848765db7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,7 +19,7 @@ importers: version: 0.10.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) '@vitest/eslint-plugin': specifier: 1.0.1 - version: 1.0.1(@typescript-eslint/utils@8.16.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0)) + version: 1.0.1(@typescript-eslint/utils@8.16.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0)) amqplib: specifier: 0.10.5 version: 0.10.5 @@ -89,10 +89,10 @@ importers: version: 5.6.3 vite: specifier: 5.4.11 - version: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + version: 5.4.11(@types/node@22.8.4)(terser@5.37.0) vitest: specifier: 2.1.5 - version: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + version: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) agent: dependencies: @@ -231,7 +231,7 @@ importers: version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.10.0(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3))) vite-plugin-top-level-await: specifier: 1.4.4 - version: 1.4.4(@swc/helpers@0.5.15)(rollup@4.28.0)(vite@client+@tanstack+router-plugin+vite) + version: 1.4.4(@swc/helpers@0.5.15)(rollup@4.28.1)(vite@client+@tanstack+router-plugin+vite) vite-plugin-wasm: specifier: 3.3.0 version: 3.3.0(vite@client+@tanstack+router-plugin+vite) @@ -528,7 +528,7 @@ importers: version: link:../core '@neynar/nodejs-sdk': specifier: ^2.0.3 - version: 2.0.5(bufferutil@4.0.8)(class-transformer@0.5.1)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + version: 2.0.6(bufferutil@4.0.8)(class-transformer@0.5.1)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) devDependencies: tsup: specifier: ^8.3.5 @@ -610,7 +610,7 @@ importers: version: 0.0.55(zod@3.23.8) '@ai-sdk/google-vertex': specifier: 0.0.43 - version: 0.0.43(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(zod@3.23.8) + version: 0.0.43(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(zod@3.23.8) '@ai-sdk/groq': specifier: 0.0.3 version: 0.0.3(zod@3.23.8) @@ -628,7 +628,7 @@ importers: version: 10.0.0 ai: specifier: 3.4.33 - version: 3.4.33(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.6.1))(svelte@5.6.1)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) + version: 3.4.33(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.8.0))(svelte@5.8.0)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) anthropic-vertex-ai: specifier: 1.0.2 version: 1.0.2(encoding@0.1.13)(zod@3.23.8) @@ -652,7 +652,7 @@ importers: version: 1.0.15 langchain: specifier: 0.3.6 - version: 0.3.6(@langchain/core@0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(handlebars@4.7.8)(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) + version: 0.3.6(@langchain/core@0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(handlebars@4.7.8)(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) ollama-ai-provider: specifier: 0.16.1 version: 0.16.1(zod@3.23.8) @@ -728,7 +728,7 @@ importers: version: 8.16.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3) '@vitest/coverage-v8': specifier: 2.1.5 - version: 2.1.5(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0)) + version: 2.1.5(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0)) dotenv: specifier: 16.4.5 version: 16.4.5 @@ -810,7 +810,7 @@ importers: version: link:../plugin-trustdb '@aptos-labs/ts-sdk': specifier: ^1.26.0 - version: 1.33.0 + version: 1.33.1 bignumber: specifier: 1.1.0 version: 1.1.0 @@ -828,7 +828,7 @@ importers: version: 8.3.5(@swc/core@1.10.0(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) vitest: specifier: 2.1.4 - version: 2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + version: 2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) whatwg-url: specifier: 7.1.0 version: 7.1.0 @@ -868,10 +868,25 @@ importers: '@ai16z/eliza': specifier: workspace:* version: link:../core + '@types/jsonwebtoken': + specifier: ^9.0.7 + version: 9.0.7 + coinbase-advanced-sdk: + specifier: file:../../packages/plugin-coinbase/advanced-sdk-ts + version: '@coinbase-samples/advanced-sdk-ts@file:packages/plugin-coinbase/advanced-sdk-ts(encoding@0.1.13)' coinbase-api: specifier: 1.0.5 version: 1.0.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + node-fetch: + specifier: ^2.6.1 + version: 2.7.0(encoding@0.1.13) devDependencies: + '@types/node': + specifier: ^20.0.0 + version: 20.17.9 tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.0(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) @@ -965,7 +980,7 @@ importers: version: 8.3.5(@swc/core@1.10.0(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) vitest: specifier: 2.1.4 - version: 2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + version: 2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) packages/plugin-goat: dependencies: @@ -1240,13 +1255,13 @@ importers: version: 5.1.2 pumpdotfun-sdk: specifier: 1.3.2 - version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.28.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.28.1)(typescript@5.6.3)(utf-8-validate@5.0.10) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.0(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) vitest: specifier: 2.1.4 - version: 2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + version: 2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) whatwg-url: specifier: 7.1.0 version: 7.1.0 @@ -1276,7 +1291,7 @@ importers: version: 8.3.5(@swc/core@1.10.0(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) vitest: specifier: 2.1.5 - version: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + version: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) whatwg-url: specifier: 7.1.0 version: 7.1.0 @@ -1309,7 +1324,7 @@ importers: version: 5.1.2 pumpdotfun-sdk: specifier: 1.3.2 - version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.28.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.28.1)(typescript@5.6.3)(utf-8-validate@5.0.10) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.0(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) @@ -1336,7 +1351,7 @@ importers: version: 11.0.3 vitest: specifier: 2.1.5 - version: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + version: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) whatwg-url: specifier: 7.1.0 version: 7.1.0 @@ -1376,7 +1391,7 @@ importers: version: link:../core axios: specifier: 1.7.8 - version: 1.7.8(debug@4.3.7) + version: 1.7.8(debug@4.4.0) devDependencies: '@types/jest': specifier: 29.5.14 @@ -1701,8 +1716,8 @@ packages: resolution: {integrity: sha512-kJsoy4fAPTOhzVr7Vwq8s/AUg6BQiJDa7WOqRzev4zsuIS3+JCuIZ6vUd7UBsjnxtmguJJulMRs9qWCzVBt2XA==} engines: {node: '>=15.10.0'} - '@aptos-labs/ts-sdk@1.33.0': - resolution: {integrity: sha512-svdlPH5r2dlSue2D9WXaaTslsmX18WLytAho6IRZJxQjEssglk64I6c1G9S8BTjRQj/ug6ahTwp6lx3eWuyd8Q==} + '@aptos-labs/ts-sdk@1.33.1': + resolution: {integrity: sha512-d6nWtUI//fyEN8DeLjm3+ro87Ad6+IKwR9pCqfrs/Azahso1xR1Llxd/O6fj/m1DDsuDj/HAsCsy5TC/aKD6Eg==} engines: {node: '>=11.0.0'} '@avnu/avnu-sdk@2.1.1': @@ -2495,16 +2510,16 @@ packages: resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/standalone@7.26.3': - resolution: {integrity: sha512-igZRkDAv14+pqOCUIXjJG/ammWHmUIp+JBvMJ3/KnolyjxOF35B6mN5IRdryhaYZ9R9nibsFkStPsAKTThgF3A==} + '@babel/standalone@7.26.4': + resolution: {integrity: sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==} engines: {node: '>=6.9.0'} '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.3': - resolution: {integrity: sha512-yTmc8J+Sj8yLzwr4PD5Xb/WF3bOYu2C2OoSZPzbuqRm4n98XirsbzaX+GloeO376UnSYIYJ4NCanwV5/ugZkwA==} + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} '@babel/types@7.26.3': @@ -2557,6 +2572,9 @@ packages: resolution: {integrity: sha512-d7TeUl5t+TOMJe7/CRYtf+x6hbd8N25DtH7guQTIjjr3AFVortxiAIgNejGvVqy0by4eNByw+oVil15oqxz2Eg==} deprecated: This project has been renamed to @ghostery/adblocker. Install using @ghostery/adblocker instead + '@coinbase-samples/advanced-sdk-ts@file:packages/plugin-coinbase/advanced-sdk-ts': + resolution: {directory: packages/plugin-coinbase/advanced-sdk-ts, type: directory} + '@coinbase/coinbase-sdk@0.10.0': resolution: {integrity: sha512-sqLH7dE/0XSn5jHddjVrC1PR77sQUEytYcQAlH2d8STqRARcvddxVAByECUIL32MpbdJY7Wca3KfSa6qo811Mg==} @@ -3674,12 +3692,12 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.0': - resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.9.0': - resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@2.1.4': @@ -3698,12 +3716,12 @@ packages: resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.3': - resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ethersproject/abstract-provider@5.7.0': @@ -3794,8 +3812,8 @@ packages: '@goat-sdk/core': 0.3.4 viem: ^2.21.49 - '@google-cloud/vertexai@1.9.0': - resolution: {integrity: sha512-8brlcJwFXI4fPuBtsDNQqCdWZmz8gV9jeEKOU0vc5H2SjehCQpXK/NwuSEr916zbhlBHtg/sU37qQQdgvh5BRA==} + '@google-cloud/vertexai@1.9.2': + resolution: {integrity: sha512-pJSUG3r5QIvCFNfkz7/y7kEqvEJaVAk0jZbZoKbcPCRUnXaUeAq7p8I0oklqetGyxbUcZ2FOGpt+Y+4uIltVPg==} engines: {node: '>=18.0.0'} '@hapi/hoek@9.3.0': @@ -4087,8 +4105,8 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@langchain/core@0.3.20': - resolution: {integrity: sha512-29yg7dccRkJ1MdGFW4FSp6+yM8LoisBHWjXsoi+hTRTQBael3yhjnevrNtVjhF8FMAt/rDQan6bHsGCQkwcScA==} + '@langchain/core@0.3.22': + resolution: {integrity: sha512-9rwEbxJi3Fgs8XuealNYxB6s0FCOnvXLnpiV5/oKgmEJtCRS91IqgJCWA8d59s4YkaEply/EsZVc2azNPK6Wjw==} engines: {node: '>=18'} '@langchain/openai@0.3.14': @@ -4222,8 +4240,8 @@ packages: '@nestjs/websockets': optional: true - '@neynar/nodejs-sdk@2.0.5': - resolution: {integrity: sha512-mHXwogEM+HXhzBucRaMhCDaZ/VJNnD14ywBn123Cxh15FCT0axxpq8NZ+RmYRitG/8ODM2DPJ/hyvED1EfdOew==} + '@neynar/nodejs-sdk@2.0.6': + resolution: {integrity: sha512-fEpuwyp14cyKQbZYo8LbKuwJXQqqEQlZEto4ptOd+qUyD97vmS0u4xXRr7kXeOvhSXoqFTZVnFzthHToItul5w==} engines: {node: '>=19.9.0'} '@noble/curves@1.2.0': @@ -5199,50 +5217,56 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@reflink/reflink-darwin-arm64@0.1.18': - resolution: {integrity: sha512-R+wUp6riOR821I+pko9aqk6nMBV5a8cnOcKj5dVOGBk/A1g7VsnhQWvhUxcZ2kdlwPESHJJ/Q4bLlxXgbSaubw==} + '@reflink/reflink-darwin-arm64@0.1.19': + resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@reflink/reflink-linux-arm64-gnu@0.1.18': - resolution: {integrity: sha512-x1UMCbBF/bK89krsAmi7a92J7md0XK+SyHDvLDpAqCBv7rDwd2vTH84tEYVf7ob3JwuVbC7vDvtanNWxUgASxQ==} + '@reflink/reflink-darwin-x64@0.1.19': + resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@reflink/reflink-linux-arm64-gnu@0.1.19': + resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@reflink/reflink-linux-arm64-musl@0.1.18': - resolution: {integrity: sha512-lJ2hYabWUJxnnwOSGsQRrmqGCwngyyTKVEfBRNsDxRGpb9Lbn2iPp6wUn8xOk/xPo7yux39AjEfRqVycRCubAQ==} + '@reflink/reflink-linux-arm64-musl@0.1.19': + resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@reflink/reflink-linux-x64-gnu@0.1.18': - resolution: {integrity: sha512-3sa7tRIoYSK3s52HayRokJfwTCrDNm9N9OBeipEwlFvsr3tlYvnU0ZP6ikAfyGF9E7vMABlJicHBF17X+hTwGg==} + '@reflink/reflink-linux-x64-gnu@0.1.19': + resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@reflink/reflink-linux-x64-musl@0.1.18': - resolution: {integrity: sha512-eVCQlKY5/iRiRtRERwz2c7n01VQm3oC50PEa/neBWp0drXfF7sAa6piomWGPQB3RnJNMf66TtO99QLNcHZ7iXg==} + '@reflink/reflink-linux-x64-musl@0.1.19': + resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@reflink/reflink-win32-arm64-msvc@0.1.18': - resolution: {integrity: sha512-9sr4rssysM8p8M2EYs5YF5liuWre3owCAEwdZ73KThTkDNsgUEMNaVWxMyucQrcU0Hm+jGPADx9MTGY4QpJmFg==} + '@reflink/reflink-win32-arm64-msvc@0.1.19': + resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@reflink/reflink-win32-x64-msvc@0.1.18': - resolution: {integrity: sha512-FMtRXHnOqMJ1ZhGG+WY0+5e+9/ouYMgQ6ttZVJrZ1MHuWaO7QiykQ4qHztW+zqeAu/xIHfw+RZcW0uHolh67pg==} + '@reflink/reflink-win32-x64-msvc@0.1.19': + resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@reflink/reflink@0.1.18': - resolution: {integrity: sha512-p444sFAuJbMBlB9PG5WnwPaYJH8xmj9XXruPfvYVtlYjN1CzzAxqf1ofkdjoGPp1ukk+jYy78I7BKIlgrTbo2A==} + '@reflink/reflink@0.1.19': + resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==} engines: {node: '>= 10'} '@remix-run/router@1.15.1': @@ -5352,93 +5376,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.28.0': - resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.28.0': - resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.28.0': - resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.28.0': - resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.28.0': - resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.28.0': - resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': - resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.28.0': - resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.28.0': - resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.28.0': - resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': - resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.28.0': - resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.28.0': - resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.28.0': - resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.28.0': - resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.28.0': - resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.28.0': - resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.28.0': - resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} cpu: [x64] os: [win32] @@ -6345,8 +6374,8 @@ packages: '@types/fluent-ffmpeg@2.1.27': resolution: {integrity: sha512-QiDWjihpUhriISNoBi2hJBRUUmoj/BMTYcfz+F+ZM9hHWBYABFAE6hjP/TbCZC0GWwlpa3FzvHH9RzFeRusZ7A==} - '@types/geojson@7946.0.14': - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + '@types/geojson@7946.0.15': + resolution: {integrity: sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==} '@types/glob@8.1.0': resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} @@ -6396,6 +6425,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/jsonwebtoken@9.0.7': + resolution: {integrity: sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==} + '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -6472,8 +6504,8 @@ packages: '@types/prismjs@1.26.5': resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} '@types/qs@6.9.17': resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} @@ -7713,8 +7745,12 @@ packages: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind-apply-helpers@1.0.0: + resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} callsites@3.1.0: @@ -7751,8 +7787,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001686: - resolution: {integrity: sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==} + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -8733,6 +8769,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} @@ -9025,6 +9070,10 @@ packages: doublearray@0.0.2: resolution: {integrity: sha512-aw55FtZzT6AmiamEj2kvmR6BuFqvYgKZUkfQ7teqVRNqD5UE0rw8IeW/3gieHNKQ5sPuDKlljWEn4bzv5+1bHw==} + dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + engines: {node: '>= 0.4'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -9069,8 +9118,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.68: - resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==} + electron-to-chromium@1.5.71: + resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -9165,8 +9214,8 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: @@ -10123,8 +10172,8 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.1.0: - resolution: {integrity: sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} has-symbols@1.1.0: @@ -11249,8 +11298,8 @@ packages: resolution: {integrity: sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==} engines: {node: '>=16.0.0'} - langsmith@0.2.8: - resolution: {integrity: sha512-wKVNZoYtd8EqQWUEsfDZlZ77rH7vVqgNtONXRwynUp7ZFMFUIPhSlqE9pXqrmYPE8ZTBFj7diag2lFgUuaOEKw==} + langsmith@0.2.10: + resolution: {integrity: sha512-yuEhRRdQqtXkLVcNxwk2sNFkj4oDvlG1SYZbAXmTM+vlIvxGkT0vWqgLNJLd31+SqxyG3TBPvCCpiYTMCWV8BA==} peerDependencies: openai: '*' peerDependenciesMeta: @@ -12681,8 +12730,8 @@ packages: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} - package-manager-detector@0.2.6: - resolution: {integrity: sha512-9vPH3qooBlYRJdmdYP00nvjZOulm40r5dhtal8st18ctf+6S1k7pi5yIHLvI4w5D70x0Y+xdVD9qITH0QO/A8A==} + package-manager-detector@0.2.7: + resolution: {integrity: sha512-g4+387DXDKlZzHkP+9FLt8yKj8+/3tOkPv7DVTJGGRm00RkEWgqbFstX1mXJ4M0VDYhUqsTOiISqNOJnhAu3PQ==} pacote@18.0.6: resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==} @@ -14463,8 +14512,8 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true - rollup@4.28.0: - resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -15124,8 +15173,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.6.1: - resolution: {integrity: sha512-Ot+Ata5PgqQsMV3xuBKxsEFzqZbffG4WYM93eq7USApxXq2ohQ+5LLhlakK1pygifudGTa230Pm3o2oM0wNsDA==} + svelte@5.8.0: + resolution: {integrity: sha512-ET/JQmx355DOJ2+KFi1u9ufU0bjASaXS7IjiyLbzBYk1FTyJBX2DKiABRns6W2qtEifB04rpvKXuF9pSNpNBeQ==} engines: {node: '>=18'} svg-parser@2.0.4: @@ -15229,8 +15278,8 @@ packages: uglify-js: optional: true - terser@5.36.0: - resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} engines: {node: '>=10'} hasBin: true @@ -15242,8 +15291,8 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - text-decoder@1.2.1: - resolution: {integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==} + text-decoder@1.2.2: + resolution: {integrity: sha512-/MDslo7ZyWTA2vnk1j7XoDVfXsGk3tp+zFEJHJGm0UjIlQifonVFwlVbQDFh8KJzTBnT8ie115TYqir6bclddA==} text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} @@ -15942,10 +15991,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - use-sync-external-store@1.2.2: - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} @@ -16296,8 +16345,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.97.0: - resolution: {integrity: sha512-CWT8v7ShSfj7tGs4TLRtaOLmOCPWhoKEvp+eA7FVx8Xrjb3XfT0aXdxDItnRZmE8sHcH+a8ayDrJCOjXKxVFfQ==} + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -16627,7 +16676,7 @@ snapshots: '@acuminous/bitsyntax@0.1.2': dependencies: buffer-more-ints: 1.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) safe-buffer: 5.1.2 transitivePeerDependencies: - supports-color @@ -16642,11 +16691,11 @@ snapshots: '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) zod: 3.23.8 - '@ai-sdk/google-vertex@0.0.43(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(zod@3.23.8)': + '@ai-sdk/google-vertex@0.0.43(@google-cloud/vertexai@1.9.2(encoding@0.1.13))(zod@3.23.8)': dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) - '@google-cloud/vertexai': 1.9.0(encoding@0.1.13) + '@google-cloud/vertexai': 1.9.2(encoding@0.1.13) zod: 3.23.8 '@ai-sdk/google@0.0.55(zod@3.23.8)': @@ -16723,13 +16772,13 @@ snapshots: transitivePeerDependencies: - zod - '@ai-sdk/svelte@0.0.57(svelte@5.6.1)(zod@3.23.8)': + '@ai-sdk/svelte@0.0.57(svelte@5.8.0)(zod@3.23.8)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) - sswr: 2.1.0(svelte@5.6.1) + sswr: 2.1.0(svelte@5.8.0) optionalDependencies: - svelte: 5.6.1 + svelte: 5.8.0 transitivePeerDependencies: - zod @@ -16945,7 +16994,7 @@ snapshots: '@antfu/install-pkg@0.4.1': dependencies: - package-manager-detector: 0.2.6 + package-manager-detector: 0.2.7 tinyexec: 0.3.1 '@antfu/utils@0.7.10': {} @@ -16988,7 +17037,7 @@ snapshots: transitivePeerDependencies: - debug - '@aptos-labs/ts-sdk@1.33.0': + '@aptos-labs/ts-sdk@1.33.1': dependencies: '@aptos-labs/aptos-cli': 1.0.2 '@aptos-labs/aptos-client': 0.1.1 @@ -17533,10 +17582,10 @@ snapshots: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 '@babel/types': 7.26.3 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -17571,7 +17620,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -17588,7 +17637,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -17596,14 +17645,14 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -17613,7 +17662,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -17628,7 +17677,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -17637,13 +17686,13 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -17657,7 +17706,7 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: '@babel/template': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -17675,7 +17724,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -17702,7 +17751,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -17821,7 +17870,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -17867,7 +17916,7 @@ snapshots: '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -17928,7 +17977,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -17974,7 +18023,7 @@ snapshots: '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -18311,7 +18360,7 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/standalone@7.26.3': {} + '@babel/standalone@7.26.4': {} '@babel/template@7.25.9': dependencies: @@ -18319,14 +18368,14 @@ snapshots: '@babel/parser': 7.26.3 '@babel/types': 7.26.3 - '@babel/traverse@7.26.3': + '@babel/traverse@7.26.4': dependencies: '@babel/code-frame': 7.26.2 '@babel/generator': 7.26.3 '@babel/parser': 7.26.3 '@babel/template': 7.25.9 '@babel/types': 7.26.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -18389,11 +18438,18 @@ snapshots: '@types/firefox-webext-browser': 120.0.4 tldts-experimental: 6.1.65 + '@coinbase-samples/advanced-sdk-ts@file:packages/plugin-coinbase/advanced-sdk-ts(encoding@0.1.13)': + dependencies: + jsonwebtoken: 9.0.2 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + '@coinbase/coinbase-sdk@0.10.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: '@scure/bip32': 1.6.0 abitype: 1.0.7(typescript@5.6.3)(zod@3.23.8) - axios: 1.7.8(debug@4.3.7) + axios: 1.7.8(debug@4.4.0) axios-mock-adapter: 1.22.0(axios@1.7.8) axios-retry: 4.5.0(axios@1.7.8) bip32: 4.0.0 @@ -18962,7 +19018,7 @@ snapshots: '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 '@babel/runtime-corejs3': 7.26.0 - '@babel/traverse': 7.26.3 + '@babel/traverse': 7.26.4 '@docusaurus/logger': 3.6.3 '@docusaurus/utils': 3.6.3(@swc/core@1.10.0(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) babel-plugin-dynamic-import-node: 2.3.3 @@ -18987,25 +19043,25 @@ snapshots: '@docusaurus/logger': 3.6.3 '@docusaurus/types': 3.6.3(@swc/core@1.10.0(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.6.3(@swc/core@1.10.0(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) clean-css: 5.3.3 - copy-webpack-plugin: 11.0.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) - css-loader: 6.11.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + copy-webpack-plugin: 11.0.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) + css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) cssnano: 6.1.2(postcss@8.4.49) - file-loader: 6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + file-loader: 6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) html-minifier-terser: 7.2.0 - mini-css-extract-plugin: 2.9.2(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) - null-loader: 4.0.1(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + mini-css-extract-plugin: 2.9.2(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) + null-loader: 4.0.1(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) postcss: 8.4.49 - postcss-loader: 7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + postcss-loader: 7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) postcss-preset-env: 10.1.1(postcss@8.4.49) - react-dev-utils: 12.0.1(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) - terser-webpack-plugin: 5.3.10(@swc/core@1.10.0(@swc/helpers@0.5.15))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + react-dev-utils: 12.0.1(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.0(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) - webpackbar: 6.0.1(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpackbar: 6.0.1(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -19048,17 +19104,17 @@ snapshots: eval: 0.1.8 fs-extra: 11.2.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.3(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + html-webpack-plugin: 5.6.3(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) leven: 3.1.0 lodash: 4.17.21 p-map: 4.0.0 prompts: 2.4.2 react: 18.3.1 - react-dev-utils: 12.0.1(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + react-dev-utils: 12.0.1(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) react-router: 5.3.4(react@18.3.1) react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) @@ -19068,9 +19124,9 @@ snapshots: shelljs: 0.8.5 tslib: 2.8.1 update-notifier: 6.0.2 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) webpack-bundle-analyzer: 4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - webpack-dev-server: 4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + webpack-dev-server: 4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) webpack-merge: 6.0.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -19104,10 +19160,10 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/lqip-loader@3.6.3(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)))': + '@docusaurus/lqip-loader@3.6.3(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)))': dependencies: '@docusaurus/logger': 3.6.3 - file-loader: 6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + file-loader: 6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) lodash: 4.17.21 sharp: 0.32.6 tslib: 2.8.1 @@ -19123,7 +19179,7 @@ snapshots: '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.2.1 - file-loader: 6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + file-loader: 6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) fs-extra: 11.2.0 image-size: 1.1.1 mdast-util-mdx: 3.0.0 @@ -19139,9 +19195,9 @@ snapshots: tslib: 2.8.1 unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) vfile: 6.0.3 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@swc/core' - acorn @@ -19192,7 +19248,7 @@ snapshots: tslib: 2.8.1 unist-util-visit: 5.0.0 utility-types: 3.11.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -19234,7 +19290,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 utility-types: 3.11.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -19267,7 +19323,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -19411,7 +19467,7 @@ snapshots: '@docusaurus/plugin-ideal-image@3.6.3(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@swc/core@1.10.0(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.16.0(jiti@2.4.0))(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: '@docusaurus/core': 3.6.3(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@swc/core@1.10.0(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.16.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/lqip-loader': 3.6.3(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + '@docusaurus/lqip-loader': 3.6.3(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) '@docusaurus/responsive-loader': 1.7.0(sharp@0.32.6) '@docusaurus/theme-translations': 3.6.3 '@docusaurus/types': 3.6.3(@swc/core@1.10.0(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -19422,7 +19478,7 @@ snapshots: react-waypoint: 10.3.0(react@18.3.1) sharp: 0.32.6 tslib: 2.8.1 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -19701,7 +19757,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) utility-types: 3.11.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' @@ -19753,7 +19809,7 @@ snapshots: '@docusaurus/utils-common': 3.6.3(@swc/core@1.10.0(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@svgr/webpack': 8.1.0(typescript@5.6.3) escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + file-loader: 6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -19766,9 +19822,9 @@ snapshots: resolve-pathname: 3.0.0 shelljs: 0.8.5 tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) utility-types: 3.11.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@swc/core' - acorn @@ -20052,20 +20108,22 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.0': + '@eslint/config-array@0.19.1': dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7(supports-color@5.5.0) + '@eslint/object-schema': 2.1.5 + debug: 4.4.0(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.9.0': {} + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -20079,7 +20137,7 @@ snapshots: '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -20094,9 +20152,9 @@ snapshots: '@eslint/js@9.16.0': {} - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.5': {} - '@eslint/plugin-kit@0.2.3': + '@eslint/plugin-kit@0.2.4': dependencies: levn: 0.4.1 @@ -20257,7 +20315,7 @@ snapshots: '@goat-sdk/core': 0.3.8(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10) viem: 2.21.53(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@google-cloud/vertexai@1.9.0(encoding@0.1.13)': + '@google-cloud/vertexai@1.9.2(encoding@0.1.13)': dependencies: google-auth-library: 9.15.0(encoding@0.1.13) transitivePeerDependencies: @@ -20291,7 +20349,7 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -20313,7 +20371,7 @@ snapshots: '@antfu/install-pkg': 0.4.1 '@antfu/utils': 0.7.10 '@iconify/types': 2.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) kolorist: 1.8.0 local-pkg: 0.5.1 mlly: 1.7.3 @@ -20430,7 +20488,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -20443,14 +20501,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.10.0(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) + jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20475,7 +20533,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -20493,7 +20551,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.8.4 + '@types/node': 20.17.9 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -20515,7 +20573,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.8.4 + '@types/node': 20.17.9 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -20585,7 +20643,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -20620,19 +20678,19 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color '@kwsites/promise-deferred@1.1.1': {} - '@langchain/core@0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))': + '@langchain/core@0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))': dependencies: ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.15 - langsmith: 0.2.8(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) + langsmith: 0.2.10(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -20642,9 +20700,9 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/openai@0.3.14(@langchain/core@0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13)': + '@langchain/openai@0.3.14(@langchain/core@0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13)': dependencies: - '@langchain/core': 0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) + '@langchain/core': 0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) js-tiktoken: 1.0.15 openai: 4.73.0(encoding@0.1.13)(zod@3.23.8) zod: 3.23.8 @@ -20652,9 +20710,9 @@ snapshots: transitivePeerDependencies: - encoding - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))': + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))': dependencies: - '@langchain/core': 0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) + '@langchain/core': 0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) js-tiktoken: 1.0.15 '@leichtgewicht/ip-codec@2.0.5': {} @@ -20910,7 +20968,7 @@ snapshots: transitivePeerDependencies: - encoding - '@neynar/nodejs-sdk@2.0.5(bufferutil@4.0.8)(class-transformer@0.5.1)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': + '@neynar/nodejs-sdk@2.0.6(bufferutil@4.0.8)(class-transformer@0.5.1)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: '@openapitools/openapi-generator-cli': 2.15.3(class-transformer@0.5.1)(encoding@0.1.13) semver: 7.6.3 @@ -21853,7 +21911,7 @@ snapshots: async: 3.2.6 chalk: 3.0.0 dayjs: 1.8.36 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7 eventemitter2: 5.0.1 fast-json-patch: 3.1.1 fclone: 1.0.11 @@ -21871,7 +21929,7 @@ snapshots: '@pm2/io@6.0.1': dependencies: async: 2.6.4 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7 eventemitter2: 6.4.9 require-in-the-middle: 5.2.0 semver: 7.5.4 @@ -21884,7 +21942,7 @@ snapshots: '@pm2/js-api@0.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: async: 2.6.4 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7 eventemitter2: 6.4.9 extrareqp2: 1.0.0(debug@4.3.7) ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -21895,7 +21953,7 @@ snapshots: '@pm2/pm2-version-check@1.0.4': dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -22173,36 +22231,40 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@reflink/reflink-darwin-arm64@0.1.18': + '@reflink/reflink-darwin-arm64@0.1.19': optional: true - '@reflink/reflink-linux-arm64-gnu@0.1.18': + '@reflink/reflink-darwin-x64@0.1.19': optional: true - '@reflink/reflink-linux-arm64-musl@0.1.18': + '@reflink/reflink-linux-arm64-gnu@0.1.19': optional: true - '@reflink/reflink-linux-x64-gnu@0.1.18': + '@reflink/reflink-linux-arm64-musl@0.1.19': optional: true - '@reflink/reflink-linux-x64-musl@0.1.18': + '@reflink/reflink-linux-x64-gnu@0.1.19': optional: true - '@reflink/reflink-win32-arm64-msvc@0.1.18': + '@reflink/reflink-linux-x64-musl@0.1.19': optional: true - '@reflink/reflink-win32-x64-msvc@0.1.18': + '@reflink/reflink-win32-arm64-msvc@0.1.19': optional: true - '@reflink/reflink@0.1.18': + '@reflink/reflink-win32-x64-msvc@0.1.19': + optional: true + + '@reflink/reflink@0.1.19': optionalDependencies: - '@reflink/reflink-darwin-arm64': 0.1.18 - '@reflink/reflink-linux-arm64-gnu': 0.1.18 - '@reflink/reflink-linux-arm64-musl': 0.1.18 - '@reflink/reflink-linux-x64-gnu': 0.1.18 - '@reflink/reflink-linux-x64-musl': 0.1.18 - '@reflink/reflink-win32-arm64-msvc': 0.1.18 - '@reflink/reflink-win32-x64-msvc': 0.1.18 + '@reflink/reflink-darwin-arm64': 0.1.19 + '@reflink/reflink-darwin-x64': 0.1.19 + '@reflink/reflink-linux-arm64-gnu': 0.1.19 + '@reflink/reflink-linux-arm64-musl': 0.1.19 + '@reflink/reflink-linux-x64-gnu': 0.1.19 + '@reflink/reflink-linux-x64-musl': 0.1.19 + '@reflink/reflink-win32-arm64-msvc': 0.1.19 + '@reflink/reflink-win32-x64-msvc': 0.1.19 optional: true '@remix-run/router@1.15.1': {} @@ -22262,11 +22324,11 @@ snapshots: optionalDependencies: rollup: 3.29.5 - '@rollup/plugin-json@6.1.0(rollup@4.28.0)': + '@rollup/plugin-json@6.1.0(rollup@4.28.1)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.3(rollup@4.28.1) optionalDependencies: - rollup: 4.28.0 + rollup: 4.28.1 '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': dependencies: @@ -22304,7 +22366,7 @@ snapshots: '@rollup/plugin-terser@0.1.0(rollup@2.79.2)': dependencies: - terser: 5.36.0 + terser: 5.37.0 optionalDependencies: rollup: 2.79.2 @@ -22317,9 +22379,9 @@ snapshots: rollup: 2.79.2 tslib: 2.8.1 - '@rollup/plugin-virtual@3.0.2(rollup@4.28.0)': + '@rollup/plugin-virtual@3.0.2(rollup@4.28.1)': optionalDependencies: - rollup: 4.28.0 + rollup: 4.28.1 '@rollup/pluginutils@5.1.3(rollup@2.79.2)': dependencies: @@ -22337,66 +22399,69 @@ snapshots: optionalDependencies: rollup: 3.29.5 - '@rollup/pluginutils@5.1.3(rollup@4.28.0)': + '@rollup/pluginutils@5.1.3(rollup@4.28.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.28.0 + rollup: 4.28.1 - '@rollup/rollup-android-arm-eabi@4.28.0': + '@rollup/rollup-android-arm-eabi@4.28.1': optional: true - '@rollup/rollup-android-arm64@4.28.0': + '@rollup/rollup-android-arm64@4.28.1': optional: true - '@rollup/rollup-darwin-arm64@4.28.0': + '@rollup/rollup-darwin-arm64@4.28.1': optional: true - '@rollup/rollup-darwin-x64@4.28.0': + '@rollup/rollup-darwin-x64@4.28.1': optional: true - '@rollup/rollup-freebsd-arm64@4.28.0': + '@rollup/rollup-freebsd-arm64@4.28.1': optional: true - '@rollup/rollup-freebsd-x64@4.28.0': + '@rollup/rollup-freebsd-x64@4.28.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.28.0': + '@rollup/rollup-linux-arm-musleabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.28.0': + '@rollup/rollup-linux-arm64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.28.0': + '@rollup/rollup-linux-arm64-musl@4.28.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.28.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.28.0': + '@rollup/rollup-linux-riscv64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.28.0': + '@rollup/rollup-linux-s390x-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-musl@4.28.0': + '@rollup/rollup-linux-x64-gnu@4.28.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.28.0': + '@rollup/rollup-linux-x64-musl@4.28.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.28.0': + '@rollup/rollup-win32-arm64-msvc@4.28.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.28.0': + '@rollup/rollup-win32-ia32-msvc@4.28.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true '@sapphire/async-queue@1.5.5': {} @@ -23415,7 +23480,7 @@ snapshots: '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/body-parser@1.19.5': dependencies: @@ -23424,13 +23489,13 @@ snapshots: '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/responselike': 1.0.3 '@types/chrome@0.0.278': @@ -23441,11 +23506,11 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.2 - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/connect@3.4.38': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/cors@2.8.17': dependencies: @@ -23468,7 +23533,7 @@ snapshots: '@types/d3-contour@3.0.6': dependencies: '@types/d3-array': 3.2.1 - '@types/geojson': 7946.0.14 + '@types/geojson': 7946.0.15 '@types/d3-delaunay@6.0.4': {} @@ -23492,7 +23557,7 @@ snapshots: '@types/d3-geo@3.1.0': dependencies: - '@types/geojson': 7946.0.14 + '@types/geojson': 7946.0.15 '@types/d3-hierarchy@3.1.7': {} @@ -23602,14 +23667,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.2': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -23640,7 +23705,7 @@ snapshots: dependencies: '@types/node': 22.8.4 - '@types/geojson@7946.0.14': {} + '@types/geojson@7946.0.15': {} '@types/glob@8.1.0': dependencies: @@ -23649,7 +23714,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/gtag.js@0.0.12': {} @@ -23673,7 +23738,7 @@ snapshots: '@types/http-proxy@1.17.15': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/istanbul-lib-coverage@2.0.6': {} @@ -23692,9 +23757,13 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/jsonwebtoken@9.0.7': + dependencies: + '@types/node': 20.17.9 + '@types/keyv@3.1.4': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/mdast@4.0.4': dependencies: @@ -23716,12 +23785,12 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 form-data: 4.0.1 '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/node@10.17.60': {} @@ -23768,7 +23837,7 @@ snapshots: '@types/prismjs@1.26.5': {} - '@types/prop-types@15.7.13': {} + '@types/prop-types@15.7.14': {} '@types/qs@6.9.17': {} @@ -23797,25 +23866,25 @@ snapshots: '@types/react@18.3.12': dependencies: - '@types/prop-types': 15.7.13 + '@types/prop-types': 15.7.14 csstype: 3.1.3 '@types/resolve@1.20.2': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/retry@0.12.0': {} '@types/sax@1.2.7': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/serve-index@1.9.4': dependencies: @@ -23824,12 +23893,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/sql.js@1.4.9': dependencies: @@ -23859,11 +23928,11 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/ws@8.5.13': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 '@types/yargs-parser@21.0.3': {} @@ -23873,7 +23942,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 optional: true '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)': @@ -23918,7 +23987,7 @@ snapshots: '@typescript-eslint/types': 8.11.0 '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.11.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) eslint: 9.16.0(jiti@2.4.0) optionalDependencies: typescript: 5.6.3 @@ -23931,7 +24000,7 @@ snapshots: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.16.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) eslint: 9.16.0(jiti@2.4.0) optionalDependencies: typescript: 5.6.3 @@ -23952,7 +24021,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) '@typescript-eslint/utils': 8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) ts-api-utils: 1.4.3(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 @@ -23964,7 +24033,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3) '@typescript-eslint/utils': 8.16.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) eslint: 9.16.0(jiti@2.4.0) ts-api-utils: 1.4.3(typescript@5.6.3) optionalDependencies: @@ -23980,7 +24049,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.11.0 '@typescript-eslint/visitor-keys': 8.11.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -23995,7 +24064,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -24079,11 +24148,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.5(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0))': + '@vitest/coverage-v8@2.1.5(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -24093,17 +24162,17 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + vitest: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.16.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0))': + '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.16.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0))': dependencies: eslint: 9.16.0(jiti@2.4.0) optionalDependencies: '@typescript-eslint/utils': 8.16.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3) typescript: 5.6.3 - vitest: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0) + vitest: 2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0) '@vitest/expect@2.1.4': dependencies: @@ -24119,21 +24188,21 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.4(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0))': + '@vitest/mocker@2.1.4(vite@5.4.11(@types/node@22.8.4)(terser@5.37.0))': dependencies: '@vitest/spy': 2.1.4 estree-walker: 3.0.3 magic-string: 0.30.14 optionalDependencies: - vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + vite: 5.4.11(@types/node@22.8.4)(terser@5.37.0) - '@vitest/mocker@2.1.5(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0))': + '@vitest/mocker@2.1.5(vite@5.4.11(@types/node@22.8.4)(terser@5.37.0))': dependencies: '@vitest/spy': 2.1.5 estree-walker: 3.0.3 magic-string: 0.30.14 optionalDependencies: - vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + vite: 5.4.11(@types/node@22.8.4)(terser@5.37.0) '@vitest/pretty-format@2.1.4': dependencies: @@ -24646,13 +24715,13 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -24677,13 +24746,13 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@3.4.33(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.6.1))(svelte@5.6.1)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8): + ai@3.4.33(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.8.0))(svelte@5.8.0)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8): dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) '@ai-sdk/react': 0.0.70(react@18.3.1)(zod@3.23.8) '@ai-sdk/solid': 0.0.54(zod@3.23.8) - '@ai-sdk/svelte': 0.0.57(svelte@5.6.1)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.57(svelte@5.8.0)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) '@ai-sdk/vue': 0.0.59(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) '@opentelemetry/api': 1.9.0 @@ -24695,8 +24764,8 @@ snapshots: optionalDependencies: openai: 4.73.0(encoding@0.1.13)(zod@3.23.8) react: 18.3.1 - sswr: 2.1.0(svelte@5.6.1) - svelte: 5.6.1 + sswr: 2.1.0(svelte@5.8.0) + svelte: 5.8.0 zod: 3.23.8 transitivePeerDependencies: - solid-js @@ -24949,7 +25018,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001687 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -24962,25 +25031,25 @@ snapshots: axios-mock-adapter@1.22.0(axios@1.7.8): dependencies: - axios: 1.7.8(debug@4.3.7) + axios: 1.7.8(debug@4.4.0) fast-deep-equal: 3.1.3 is-buffer: 2.0.5 axios-retry@4.5.0(axios@1.7.8): dependencies: - axios: 1.7.8(debug@4.3.7) + axios: 1.7.8(debug@4.4.0) is-retry-allowed: 2.2.0 axios@0.27.2: dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.1 transitivePeerDependencies: - debug axios@1.7.4: dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -24988,15 +25057,15 @@ snapshots: axios@1.7.7: dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - axios@1.7.8(debug@4.3.7): + axios@1.7.8(debug@4.4.0): dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -25019,12 +25088,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) babel-plugin-dynamic-import-node@2.3.3: dependencies: @@ -25325,8 +25394,8 @@ snapshots: browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001686 - electron-to-chromium: 1.5.68 + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.71 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -25477,11 +25546,15 @@ snapshots: normalize-url: 6.1.0 responselike: 2.0.1 - call-bind@1.0.7: + call-bind-apply-helpers@1.0.0: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-define-property: 1.0.1 get-intrinsic: 1.2.4 set-function-length: 1.2.2 @@ -25516,11 +25589,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001687 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001686: {} + caniuse-lite@1.0.30001687: {} canvas@2.11.2(encoding@0.1.13): dependencies: @@ -25782,8 +25855,8 @@ snapshots: cmake-js@7.3.0: dependencies: - axios: 1.7.8(debug@4.3.7) - debug: 4.3.7(supports-color@5.5.0) + axios: 1.7.8(debug@4.4.0) + debug: 4.4.0(supports-color@5.5.0) fs-extra: 11.2.0 lodash.isplainobject: 4.0.6 memory-stream: 1.0.0 @@ -25804,7 +25877,7 @@ snapshots: coinbase-api@1.0.5(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: - axios: 1.7.8(debug@4.3.7) + axios: 1.7.8(debug@4.4.0) isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)) jsonwebtoken: 9.0.2 nanoid: 3.3.8 @@ -26063,7 +26136,7 @@ snapshots: copy-text-to-clipboard@3.2.0: {} - copy-webpack-plugin@11.0.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + copy-webpack-plugin@11.0.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -26071,7 +26144,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) core-js-compat@3.39.0: dependencies: @@ -26143,7 +26216,7 @@ snapshots: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.9) + jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -26225,7 +26298,7 @@ snapshots: postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 - css-loader@6.11.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + css-loader@6.11.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -26236,9 +26309,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 6.1.2(postcss@8.4.49) @@ -26246,7 +26319,7 @@ snapshots: postcss: 8.4.49 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) optionalDependencies: clean-css: 5.3.3 @@ -26627,7 +26700,7 @@ snapshots: debug-fabulous@2.0.2: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) memoizee: 0.4.17 transitivePeerDependencies: - supports-color @@ -26653,7 +26726,11 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.3.7(supports-color@5.5.0): + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 optionalDependencies: @@ -26709,7 +26786,7 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 @@ -26790,7 +26867,7 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -26943,6 +27020,12 @@ snapshots: doublearray@0.0.2: {} + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer@0.1.2: {} duplexify@4.1.3: @@ -27027,7 +27110,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.68: {} + electron-to-chromium@1.5.71: {} elliptic@6.5.4: dependencies: @@ -27119,9 +27202,7 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -27282,7 +27363,7 @@ snapshots: '@es-joy/jsdoccomment': 0.41.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint: 8.57.1 esquery: 1.6.0 @@ -27332,7 +27413,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -27366,11 +27447,11 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.0)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.0 - '@eslint/core': 0.9.0 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 '@eslint/eslintrc': 3.2.0 '@eslint/js': 9.16.0 - '@eslint/plugin-kit': 0.2.3 + '@eslint/plugin-kit': 0.2.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.1 @@ -27379,7 +27460,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 @@ -27505,7 +27586,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 require-like: 0.1.2 event-emitter@0.3.5: @@ -27639,7 +27720,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -27759,11 +27840,11 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-loader@6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + file-loader@6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) file-uri-to-path@1.0.0: {} @@ -27854,7 +27935,11 @@ snapshots: follow-redirects@1.15.9(debug@4.3.7): optionalDependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7 + + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0(supports-color@5.5.0) for-in@0.1.8: {} @@ -27871,7 +27956,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@babel/code-frame': 7.26.2 '@types/json-schema': 7.0.15 @@ -27887,7 +27972,7 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.6.3 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) optionalDependencies: eslint: 9.16.0(jiti@2.4.0) @@ -28025,7 +28110,7 @@ snapshots: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.1.0 + has-proto: 1.2.0 has-symbols: 1.1.0 hasown: 2.0.2 @@ -28076,7 +28161,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -28372,11 +28457,11 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 - has-proto@1.1.0: + has-proto@1.2.0: dependencies: - call-bind: 1.0.7 + dunder-proto: 1.0.0 has-symbols@1.1.0: {} @@ -28624,7 +28709,7 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.36.0 + terser: 5.37.0 html-minifier-terser@7.2.0: dependencies: @@ -28634,7 +28719,7 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.36.0 + terser: 5.37.0 html-tags@3.3.1: {} @@ -28648,7 +28733,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + html-webpack-plugin@5.6.3(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -28656,7 +28741,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) htmlparser2@6.1.0: dependencies: @@ -28696,7 +28781,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -28715,7 +28800,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -28745,21 +28830,21 @@ snapshots: https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -28926,7 +29011,7 @@ snapshots: stdout-update: 4.0.1 strip-ansi: 7.1.0 optionalDependencies: - '@reflink/reflink': 0.1.18 + '@reflink/reflink': 0.1.19 iron-webcrypto@1.2.1: {} @@ -29162,7 +29247,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -29171,7 +29256,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -29230,7 +29315,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -29259,7 +29344,7 @@ snapshots: create-jest: 29.7.0(@types/node@20.17.9) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.9) + jest-config: 29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -29307,7 +29392,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.17.9): + jest-config@29.7.0(@types/node@20.17.9)(ts-node@10.9.2(@swc/core@1.10.0(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -29333,6 +29418,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.17.9 + ts-node: 10.9.2(@swc/core@1.10.0(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -29392,7 +29478,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -29402,7 +29488,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.8.4 + '@types/node': 20.17.9 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -29441,7 +29527,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -29476,7 +29562,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -29504,7 +29590,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -29550,7 +29636,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -29569,7 +29655,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.8.4 + '@types/node': 20.17.9 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -29578,13 +29664,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.8.4 + '@types/node': 20.17.9 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -29733,7 +29819,7 @@ snapshots: json-stable-stringify@1.1.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 @@ -29848,15 +29934,15 @@ snapshots: doublearray: 0.0.2 zlibjs: 0.3.1 - langchain@0.3.6(@langchain/core@0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(handlebars@4.7.8)(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)): + langchain@0.3.6(@langchain/core@0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(handlebars@4.7.8)(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)): dependencies: - '@langchain/core': 0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) - '@langchain/openai': 0.3.14(@langchain/core@0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.20(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))) + '@langchain/core': 0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) + '@langchain/openai': 0.3.14(@langchain/core@0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.22(openai@4.73.0(encoding@0.1.13)(zod@3.23.8))) js-tiktoken: 1.0.15 js-yaml: 4.1.0 jsonpointer: 5.0.1 - langsmith: 0.2.8(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) + langsmith: 0.2.10(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)) openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 @@ -29864,7 +29950,7 @@ snapshots: zod: 3.23.8 zod-to-json-schema: 3.23.5(zod@3.23.8) optionalDependencies: - axios: 1.7.8(debug@4.3.7) + axios: 1.7.8(debug@4.4.0) handlebars: 4.7.8 transitivePeerDependencies: - encoding @@ -29878,7 +29964,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 - langsmith@0.2.8(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)): + langsmith@0.2.10(openai@4.73.0(encoding@0.1.13)(zod@3.23.8)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 @@ -30051,7 +30137,7 @@ snapshots: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7 execa: 8.0.1 lilconfig: 3.1.3 listr2: 8.2.5 @@ -30931,7 +31017,7 @@ snapshots: micromark@4.0.1: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.2 @@ -31003,11 +31089,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.2(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + mini-css-extract-plugin@2.9.2(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) minimalistic-assert@1.0.1: {} @@ -31194,7 +31280,7 @@ snapshots: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.1.2 + minimatch: 3.0.5 mustache@4.2.0: {} @@ -31402,7 +31488,7 @@ snapshots: nodemon@3.1.7: dependencies: chokidar: 3.6.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 @@ -31528,11 +31614,11 @@ snapshots: dependencies: boolbase: 1.0.0 - null-loader@4.0.1(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + null-loader@4.0.1(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) nwsapi@2.2.16: {} @@ -31543,7 +31629,7 @@ snapshots: '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 - axios: 1.7.8(debug@4.3.7) + axios: 1.7.8(debug@4.4.0) chalk: 4.1.0 cli-cursor: 3.1.0 cli-spinners: 2.6.1 @@ -31608,7 +31694,7 @@ snapshots: object.assign@4.1.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 has-symbols: 1.1.0 object-keys: 1.1.1 @@ -31880,7 +31966,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) get-uri: 6.0.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 @@ -31903,7 +31989,7 @@ snapshots: registry-url: 6.0.1 semver: 7.6.3 - package-manager-detector@0.2.6: {} + package-manager-detector@0.2.7: {} pacote@18.0.6: dependencies: @@ -32214,7 +32300,7 @@ snapshots: pm2-axon-rpc@0.7.1: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -32222,7 +32308,7 @@ snapshots: dependencies: amp: 0.3.1 amp-message: 0.1.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) escape-string-regexp: 4.0.0 transitivePeerDependencies: - supports-color @@ -32239,7 +32325,7 @@ snapshots: pm2-sysmonit@1.2.8: dependencies: async: 3.2.6 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) pidusage: 2.0.21 systeminformation: 5.23.5 tx2: 1.0.5 @@ -32261,7 +32347,7 @@ snapshots: commander: 2.15.1 croner: 4.1.97 dayjs: 1.11.13 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) enquirer: 2.3.6 eventemitter2: 5.0.1 fclone: 1.0.11 @@ -32536,13 +32622,13 @@ snapshots: postcss: 8.4.49 yaml: 2.6.1 - postcss-loader@7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + postcss-loader@7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: cosmiconfig: 8.3.6(typescript@5.6.3) jiti: 1.21.6 postcss: 8.4.49 semver: 7.6.3 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - typescript @@ -33103,7 +33189,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.8.4 + '@types/node': 20.17.9 long: 5.2.3 protocols@2.0.1: {} @@ -33116,7 +33202,7 @@ snapshots: proxy-agent@6.3.1: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -33129,7 +33215,7 @@ snapshots: proxy-agent@6.4.0: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -33154,10 +33240,10 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 - pumpdotfun-sdk@1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.28.0)(typescript@5.6.3)(utf-8-validate@5.0.10): + pumpdotfun-sdk@1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.28.1)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@rollup/plugin-json': 6.1.0(rollup@4.28.0) + '@rollup/plugin-json': 6.1.0(rollup@4.28.1) '@solana/spl-token': 0.4.6(@solana/web3.js@1.95.8(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10) '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -33199,7 +33285,7 @@ snapshots: puppeteer-extra-plugin-capsolver@2.0.1(bufferutil@4.0.8)(encoding@0.1.13)(puppeteer-core@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10))(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: - axios: 1.7.8(debug@4.3.7) + axios: 1.7.8(debug@4.4.0) capsolver-npm: 2.0.2 puppeteer: 19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10) puppeteer-extra: 3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10)) @@ -33218,7 +33304,7 @@ snapshots: puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10))): dependencies: '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) merge-deep: 3.0.3 optionalDependencies: puppeteer-extra: 3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10)) @@ -33228,7 +33314,7 @@ snapshots: puppeteer-extra@3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) deepmerge: 4.3.1 optionalDependencies: puppeteer: 19.11.1(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.6.3)(utf-8-validate@5.0.10) @@ -33324,7 +33410,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dev-utils@12.0.1(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + react-dev-utils@12.0.1(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@babel/code-frame': 7.26.2 address: 1.2.2 @@ -33335,7 +33421,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -33350,7 +33436,7 @@ snapshots: shell-quote: 1.8.2 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -33393,11 +33479,11 @@ snapshots: dependencies: react: 18.3.1 - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@babel/runtime': 7.26.0 react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) react-refresh@0.14.2: {} @@ -33813,7 +33899,7 @@ snapshots: require-in-the-middle@5.2.0: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -33917,28 +34003,29 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.28.0: + rollup@4.28.1: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.28.0 - '@rollup/rollup-android-arm64': 4.28.0 - '@rollup/rollup-darwin-arm64': 4.28.0 - '@rollup/rollup-darwin-x64': 4.28.0 - '@rollup/rollup-freebsd-arm64': 4.28.0 - '@rollup/rollup-freebsd-x64': 4.28.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 - '@rollup/rollup-linux-arm-musleabihf': 4.28.0 - '@rollup/rollup-linux-arm64-gnu': 4.28.0 - '@rollup/rollup-linux-arm64-musl': 4.28.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 - '@rollup/rollup-linux-riscv64-gnu': 4.28.0 - '@rollup/rollup-linux-s390x-gnu': 4.28.0 - '@rollup/rollup-linux-x64-gnu': 4.28.0 - '@rollup/rollup-linux-x64-musl': 4.28.0 - '@rollup/rollup-win32-arm64-msvc': 4.28.0 - '@rollup/rollup-win32-ia32-msvc': 4.28.0 - '@rollup/rollup-win32-x64-msvc': 4.28.0 + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 fsevents: 2.3.3 roughjs@4.6.6: @@ -34253,7 +34340,7 @@ snapshots: side-channel@1.0.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.3 @@ -34296,7 +34383,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -34361,7 +34448,7 @@ snapshots: socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -34428,7 +34515,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -34439,7 +34526,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -34508,9 +34595,9 @@ snapshots: dependencies: minipass: 7.1.2 - sswr@2.1.0(svelte@5.6.1): + sswr@2.1.0(svelte@5.8.0): dependencies: - svelte: 5.6.1 + svelte: 5.8.0 swrev: 4.0.0 stack-utils@2.0.6: @@ -34566,7 +34653,7 @@ snapshots: dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 - text-decoder: 1.2.1 + text-decoder: 1.2.2 optionalDependencies: bare-events: 2.5.0 @@ -34713,7 +34800,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.6.1: + svelte@5.8.0: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -34745,7 +34832,7 @@ snapshots: dependencies: client-only: 0.0.1 react: 18.3.1 - use-sync-external-store: 1.2.2(react@18.3.1) + use-sync-external-store: 1.4.0(react@18.3.1) swrev@4.0.0: {} @@ -34847,7 +34934,7 @@ snapshots: dependencies: '@telegraf/types': 7.1.0 abort-controller: 3.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) mri: 1.2.0 node-fetch: 2.7.0(encoding@0.1.13) p-timeout: 4.1.0 @@ -34859,18 +34946,18 @@ snapshots: temp-dir@1.0.0: {} - terser-webpack-plugin@5.3.10(@swc/core@1.10.0(@swc/helpers@0.5.15))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + terser-webpack-plugin@5.3.10(@swc/core@1.10.0(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.36.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + terser: 5.37.0 + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) optionalDependencies: '@swc/core': 1.10.0(@swc/helpers@0.5.15) - terser@5.36.0: + terser@5.37.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.0 @@ -34889,7 +34976,9 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - text-decoder@1.2.1: {} + text-decoder@1.2.2: + dependencies: + b4a: 1.6.7 text-encoding-utf-8@1.0.2: {} @@ -35143,13 +35232,13 @@ snapshots: cac: 6.7.14 chokidar: 4.0.1 consola: 3.2.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.49)(yaml@2.6.1) resolve-from: 5.0.0 - rollup: 4.28.0 + rollup: 4.28.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.1 @@ -35168,7 +35257,7 @@ snapshots: tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color @@ -35490,7 +35579,7 @@ snapshots: untyped@1.5.1: dependencies: '@babel/core': 7.26.0 - '@babel/standalone': 7.26.3 + '@babel/standalone': 7.26.4 '@babel/types': 7.26.3 defu: 6.1.4 jiti: 2.4.0 @@ -35532,14 +35621,14 @@ snapshots: url-join@4.0.1: {} - url-loader@4.1.1(file-loader@6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) optionalDependencies: - file-loader: 6.2.0(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + file-loader: 6.2.0(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) url-parse@1.5.10: dependencies: @@ -35565,7 +35654,7 @@ snapshots: dependencies: react: 18.3.1 - use-sync-external-store@1.2.2(react@18.3.1): + use-sync-external-store@1.4.0(react@18.3.1): dependencies: react: 18.3.1 @@ -35681,12 +35770,12 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.4(@types/node@22.8.4)(terser@5.36.0): + vite-node@2.1.4(@types/node@22.8.4)(terser@5.37.0): dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) pathe: 1.1.2 - vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + vite: 5.4.11(@types/node@22.8.4)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -35698,13 +35787,13 @@ snapshots: - supports-color - terser - vite-node@2.1.5(@types/node@22.8.4)(terser@5.36.0): + vite-node@2.1.5(@types/node@22.8.4)(terser@5.37.0): dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + vite: 5.4.11(@types/node@22.8.4)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -35716,9 +35805,9 @@ snapshots: - supports-color - terser - vite-plugin-top-level-await@1.4.4(@swc/helpers@0.5.15)(rollup@4.28.0)(vite@client+@tanstack+router-plugin+vite): + vite-plugin-top-level-await@1.4.4(@swc/helpers@0.5.15)(rollup@4.28.1)(vite@client+@tanstack+router-plugin+vite): dependencies: - '@rollup/plugin-virtual': 3.0.2(rollup@4.28.0) + '@rollup/plugin-virtual': 3.0.2(rollup@4.28.1) '@swc/core': 1.10.0(@swc/helpers@0.5.15) uuid: 10.0.0 vite: link:client/@tanstack/router-plugin/vite @@ -35730,27 +35819,27 @@ snapshots: dependencies: vite: link:client/@tanstack/router-plugin/vite - vite@5.4.11(@types/node@22.8.4)(terser@5.36.0): + vite@5.4.11(@types/node@22.8.4)(terser@5.37.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 - rollup: 4.28.0 + rollup: 4.28.1 optionalDependencies: '@types/node': 22.8.4 fsevents: 2.3.3 - terser: 5.36.0 + terser: 5.37.0 - vitest@2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0): + vitest@2.1.4(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0): dependencies: '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0)) + '@vitest/mocker': 2.1.4(vite@5.4.11(@types/node@22.8.4)(terser@5.37.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.4 '@vitest/snapshot': 2.1.4 '@vitest/spy': 2.1.4 '@vitest/utils': 2.1.4 chai: 5.1.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) expect-type: 1.1.0 magic-string: 0.30.14 pathe: 1.1.2 @@ -35759,8 +35848,8 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) - vite-node: 2.1.4(@types/node@22.8.4)(terser@5.36.0) + vite: 5.4.11(@types/node@22.8.4)(terser@5.37.0) + vite-node: 2.1.4(@types/node@22.8.4)(terser@5.37.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.8.4 @@ -35776,17 +35865,17 @@ snapshots: - supports-color - terser - vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0): + vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.37.0): dependencies: '@vitest/expect': 2.1.5 - '@vitest/mocker': 2.1.5(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0)) + '@vitest/mocker': 2.1.5(vite@5.4.11(@types/node@22.8.4)(terser@5.37.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.5 '@vitest/snapshot': 2.1.5 '@vitest/spy': 2.1.5 '@vitest/utils': 2.1.5 chai: 5.1.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) expect-type: 1.1.0 magic-string: 0.30.14 pathe: 1.1.2 @@ -35795,8 +35884,8 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) - vite-node: 2.1.5(@types/node@22.8.4)(terser@5.36.0) + vite: 5.4.11(@types/node@22.8.4)(terser@5.37.0) + vite-node: 2.1.5(@types/node@22.8.4)(terser@5.37.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.8.4 @@ -35930,16 +36019,16 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@5.3.4(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + webpack-dev-middleware@5.3.4(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) - webpack-dev-server@4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + webpack-dev-server@4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -35969,10 +36058,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + webpack-dev-middleware: 5.3.4(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - bufferutil - debug @@ -35993,7 +36082,7 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)): + webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -36015,7 +36104,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.10.0(@swc/helpers@0.5.15))(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.0(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -36023,7 +36112,7 @@ snapshots: - esbuild - uglify-js - webpackbar@6.0.1(webpack@5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15))): + webpackbar@6.0.1(webpack@5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -36032,7 +36121,7 @@ snapshots: markdown-table: 2.0.0 pretty-time: 1.1.0 std-env: 3.8.0 - webpack: 5.97.0(@swc/core@1.10.0(@swc/helpers@0.5.15)) + webpack: 5.97.1(@swc/core@1.10.0(@swc/helpers@0.5.15)) wrap-ansi: 7.0.0 websocket-driver@0.7.4: