ts: ALTs integration

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2022-09-27 15:13:53 +02:00
parent 9cbc352197
commit dd83aeb156
8 changed files with 418 additions and 178 deletions

View File

@ -64,10 +64,14 @@
"@project-serum/serum": "^0.13.65",
"@pythnetwork/client": "^2.7.0",
"@solana/spl-token": "^0.1.8",
"@solana/web3.js": "^1.63.1",
"@switchboard-xyz/switchboard-v2": "^0.0.129",
"big.js": "^6.1.1",
"bs58": "^5.0.0"
},
"resolutions": {
"@project-serum/anchor/@solana/web3.js": "1.63.1"
},
"peerDependencies": {
"@solana/spl-token-swap": "^0.2.0"
},

View File

@ -7,7 +7,11 @@ import {
Orderbook,
} from '@project-serum/serum';
import { parsePriceData, PriceData } from '@pythnetwork/client';
import { AccountInfo, PublicKey } from '@solana/web3.js';
import {
AccountInfo,
AddressLookupTableAccount,
PublicKey,
} from '@solana/web3.js';
import BN from 'bn.js';
import { MangoClient } from '../client';
import { SERUM3_PROGRAM_ID } from '../constants';
@ -35,6 +39,7 @@ export class Group {
insuranceVault: PublicKey;
testing: number;
version: number;
addressLookupTables: PublicKey[];
},
): Group {
return new Group(
@ -47,6 +52,8 @@ export class Group {
obj.insuranceVault,
obj.testing,
obj.version,
obj.addressLookupTables,
[], // addressLookupTablesList
new Map(), // banksMapByName
new Map(), // banksMapByMint
new Map(), // banksMapByTokenIndex
@ -70,6 +77,8 @@ export class Group {
public insuranceVault: PublicKey,
public testing: number,
public version: number,
public addressLookupTables: PublicKey[],
public addressLookupTablesList: AddressLookupTableAccount[],
public banksMapByName: Map<string, Bank[]>,
public banksMapByMint: Map<string, Bank[]>,
public banksMapByTokenIndex: Map<number, Bank[]>,
@ -96,6 +105,7 @@ export class Group {
// console.time('group.reload');
await Promise.all([
this.reloadAlts(client),
this.reloadBanks(client, ids).then(() =>
Promise.all([
this.reloadBankOraclePrices(client),
@ -113,6 +123,22 @@ export class Group {
// console.timeEnd('group.reload');
}
public async reloadAlts(client: MangoClient) {
const alts = await Promise.all(
this.addressLookupTables
.filter((alt) => !alt.equals(PublicKey.default))
.map((alt) =>
client.program.provider.connection.getAddressLookupTable(alt),
),
);
this.addressLookupTablesList = alts.map((res, i) => {
if (!res || !res.value) {
throw new Error(`Error in getting ALT ${this.addressLookupTables[i]}`);
}
return res.value;
});
}
public async reloadBanks(client: MangoClient, ids?: Id) {
let banks: Bank[];

View File

@ -35,12 +35,12 @@ import {
} from './accounts/mangoAccount';
import { StubOracle } from './accounts/oracle';
import {
PerpEventQueue,
PerpMarket,
PerpOrderType,
PerpOrderSide,
FillEvent,
OutEvent,
PerpEventQueue,
PerpMarket,
PerpOrderSide,
PerpOrderType,
} from './accounts/perp';
import {
generateSerum3MarketExternalVaultSignerAddress,
@ -553,7 +553,7 @@ export class MangoClient {
perpCount?: number,
perpOoCount?: number,
): Promise<TransactionSignature> {
const transaction = await this.program.methods
const ix = await this.program.methods
.accountCreate(
accountNumber ?? 0,
tokenCount ?? 8,
@ -567,11 +567,12 @@ export class MangoClient {
owner: (this.program.provider as AnchorProvider).wallet.publicKey,
payer: (this.program.provider as AnchorProvider).wallet.publicKey,
})
.transaction();
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
transaction,
[ix],
[],
{
postSendTxCallback: this.postSendTxCallback,
},
@ -629,18 +630,19 @@ export class MangoClient {
name?: string,
delegate?: PublicKey,
): Promise<TransactionSignature> {
const transaction = await this.program.methods
const ix = await this.program.methods
.accountEdit(name ?? null, delegate ?? null)
.accounts({
group: group.publicKey,
account: mangoAccount.publicKey,
owner: (this.program.provider as AnchorProvider).wallet.publicKey,
})
.transaction();
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
transaction,
[ix],
[],
{
postSendTxCallback: this.postSendTxCallback,
},
@ -731,7 +733,7 @@ export class MangoClient {
group: Group,
mangoAccount: MangoAccount,
): Promise<TransactionSignature> {
const transaction = await this.program.methods
const ix = await this.program.methods
.accountClose()
.accounts({
group: group.publicKey,
@ -739,11 +741,12 @@ export class MangoClient {
owner: (this.program.provider as AnchorProvider).wallet.publicKey,
solDestination: mangoAccount.owner,
})
.transaction();
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
transaction,
[ix],
[],
{
postSendTxCallback: this.postSendTxCallback,
},
@ -866,7 +869,7 @@ export class MangoClient {
[],
);
const transaction = await this.program.methods
const ix = await this.program.methods
.tokenDeposit(new BN(nativeAmount))
.accounts({
group: group.publicKey,
@ -883,14 +886,12 @@ export class MangoClient {
({ pubkey: pk, isWritable: false, isSigner: false } as AccountMeta),
),
)
.preInstructions(preInstructions)
.postInstructions(postInstructions)
.signers(additionalSigners)
.transaction();
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
transaction,
[...preInstructions, ix, ...postInstructions],
group.addressLookupTablesList,
{
additionalSigners,
postSendTxCallback: this.postSendTxCallback,
@ -961,7 +962,7 @@ export class MangoClient {
[],
);
const tx = await this.program.methods
const ix = await this.program.methods
.tokenWithdraw(new BN(nativeAmount), allowBorrow)
.accounts({
group: group.publicKey,
@ -978,13 +979,16 @@ export class MangoClient {
({ pubkey: pk, isWritable: false, isSigner: false } as AccountMeta),
),
)
.preInstructions(preInstructions)
.postInstructions(postInstructions)
.transaction();
.instruction();
return await sendTransaction(this.program.provider as AnchorProvider, tx, {
postSendTxCallback: this.postSendTxCallback,
});
return await sendTransaction(
this.program.provider as AnchorProvider,
[...preInstructions, ix, ...postInstructions],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
// Serum
@ -1192,7 +1196,7 @@ export class MangoClient {
}
})();
const tx = await this.program.methods
const ix = await this.program.methods
.serum3PlaceOrder(
side,
limitPrice,
@ -1228,11 +1232,16 @@ export class MangoClient {
({ pubkey: pk, isWritable: false, isSigner: false } as AccountMeta),
),
)
.transaction();
.instruction();
return await sendTransaction(this.program.provider as AnchorProvider, tx, {
postSendTxCallback: this.postSendTxCallback,
});
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async serum3CancelAllorders(
@ -1249,7 +1258,7 @@ export class MangoClient {
externalMarketPk.toBase58(),
)!;
const tx = await this.program.methods
const ix = await this.program.methods
.serum3CancelAllOrders(limit)
.accounts({
group: group.publicKey,
@ -1264,11 +1273,16 @@ export class MangoClient {
marketAsks: serum3MarketExternal.asksAddress,
marketEventQueue: serum3MarketExternal.decoded.eventQueue,
})
.transaction();
.instruction();
return await sendTransaction(this.program.provider as AnchorProvider, tx, {
postSendTxCallback: this.postSendTxCallback,
});
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async serum3SettleFunds(
@ -1289,7 +1303,7 @@ export class MangoClient {
serum3MarketExternal,
);
const tx = await this.program.methods
const ix = await this.program.methods
.serum3SettleFunds()
.accounts({
group: group.publicKey,
@ -1312,11 +1326,16 @@ export class MangoClient {
baseVault: group.getFirstBankByTokenIndex(serum3Market.baseTokenIndex)
.vault,
})
.transaction();
.instruction();
return await sendTransaction(this.program.provider as AnchorProvider, tx, {
postSendTxCallback: this.postSendTxCallback,
});
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async serum3CancelOrder(
@ -1334,7 +1353,7 @@ export class MangoClient {
externalMarketPk.toBase58(),
)!;
const tx = await this.program.methods
const ix = await this.program.methods
.serum3CancelOrder(side, orderId)
.accounts({
group: group.publicKey,
@ -1348,11 +1367,16 @@ export class MangoClient {
marketAsks: serum3MarketExternal.asksAddress,
marketEventQueue: serum3MarketExternal.decoded.eventQueue,
})
.transaction();
.instruction();
return await sendTransaction(this.program.provider as AnchorProvider, tx, {
postSendTxCallback: this.postSendTxCallback,
});
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
/// perps
@ -1409,7 +1433,7 @@ export class MangoClient {
new BN(impactQuantity),
groupInsuranceFund,
trustedMarket,
feePenalty
feePenalty,
)
.accounts({
group: group.publicKey,
@ -1506,7 +1530,7 @@ export class MangoClient {
new BN(impactQuantity),
groupInsuranceFund,
trustedMarket,
feePenalty
feePenalty,
)
.accounts({
group: group.publicKey,
@ -1609,7 +1633,7 @@ export class MangoClient {
[group.getFirstBankByTokenIndex(0)],
[perpMarket],
);
return await this.program.methods
const ix = await this.program.methods
.perpPlaceOrder(
side,
perpMarket.uiPriceToLots(price),
@ -1638,7 +1662,16 @@ export class MangoClient {
({ pubkey: pk, isWritable: false, isSigner: false } as AccountMeta),
),
)
.rpc();
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async perpCancelAllOrders(
@ -1648,7 +1681,7 @@ export class MangoClient {
limit: number,
): Promise<TransactionSignature> {
const perpMarket = group.perpMarketsMap.get(perpMarketName)!;
return await this.program.methods
const ix = await this.program.methods
.perpCancelAllOrders(limit)
.accounts({
group: group.publicKey,
@ -1658,7 +1691,16 @@ export class MangoClient {
bids: perpMarket.bids,
owner: (this.program.provider as AnchorProvider).wallet.publicKey,
})
.rpc();
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async perpConsumeEvents(
@ -1691,18 +1733,20 @@ export class MangoClient {
const limit = 8;
const perpMarket = group.perpMarketsMap.get(perpMarketName)!;
const eventQueue = await perpMarket.loadEventQueue(this);
let unconsumedEvents = eventQueue.getUnconsumedEvents();
const unconsumedEvents = eventQueue.getUnconsumedEvents();
while (unconsumedEvents.length > 0) {
const events = unconsumedEvents.splice(0, limit);
const accounts = events
.map((ev) => {
switch (ev.eventType) {
case PerpEventQueue.FILL_EVENT_TYPE:
case PerpEventQueue.FILL_EVENT_TYPE: {
const fill = <FillEvent>ev;
return [fill.maker, fill.taker];
case PerpEventQueue.OUT_EVENT_TYPE:
}
case PerpEventQueue.OUT_EVENT_TYPE: {
const out = <OutEvent>ev;
return [out.owner];
}
case PerpEventQueue.LIQUIDATE_EVENT_TYPE:
return [];
default:
@ -1873,21 +1917,19 @@ export class MangoClient {
])
.instruction();
const tx = new Transaction();
for (const ix of preInstructions) {
tx.add(ix);
}
tx.add(flashLoanBeginIx);
for (const ix of userDefinedInstructions.filter(
(ix) => ix.keys.length > 2,
)) {
tx.add(ix);
}
tx.add(flashLoanEndIx);
return await sendTransaction(this.program.provider as AnchorProvider, tx, {
postSendTxCallback: this.postSendTxCallback,
});
return await sendTransaction(
this.program.provider as AnchorProvider,
[
...preInstructions,
flashLoanBeginIx,
...userDefinedInstructions.filter((ix) => ix.keys.length > 2),
flashLoanEndIx,
],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async updateIndexAndRate(group: Group, mintPk: PublicKey) {
@ -1947,7 +1989,7 @@ export class MangoClient {
} as AccountMeta),
);
await this.program.methods
const ix = await this.program.methods
.liqTokenWithToken(assetBank.tokenIndex, liabBank.tokenIndex, {
val: I80F48.fromNumber(maxLiabTransfer).getData(),
})
@ -1958,6 +2000,52 @@ export class MangoClient {
liqorOwner: liqor.owner,
})
.remainingAccounts(parsedHealthAccounts)
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async altSet(group: Group, addressLookupTable: PublicKey, index: number) {
const ix = await this.program.methods
.altSet(index)
.accounts({
group: group.publicKey,
admin: (this.program.provider as AnchorProvider).wallet.publicKey,
addressLookupTable,
})
.instruction();
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
async altExtend(
group: Group,
addressLookupTable: PublicKey,
index: number,
pks: PublicKey[],
) {
return await this.program.methods
.altExtend(index, pks)
.accounts({
group: group.publicKey,
admin: (this.program.provider as AnchorProvider).wallet.publicKey,
payer: (this.program.provider as AnchorProvider).wallet.publicKey,
addressLookupTable,
})
.rpc();
}
@ -2141,7 +2229,7 @@ export class MangoClient {
...mintInfos.map((mintInfo) => mintInfo.oracle),
);
let perpIndices: number[] = [];
const perpIndices: number[] = [];
for (const mangoAccount of mangoAccounts) {
perpIndices.push(
...mangoAccount.perps

View File

@ -1,8 +1,14 @@
import { AnchorProvider, Wallet } from '@project-serum/anchor';
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
import {
AddressLookupTableProgram,
Connection,
Keypair,
PublicKey,
} from '@solana/web3.js';
import fs from 'fs';
import { MangoClient } from '../client';
import { MANGO_V4_ID } from '../constants';
import { buildVersionedTx } from '../utils';
//
// An example for admins based on high level api i.e. the client
@ -508,6 +514,78 @@ async function main() {
}
}
if (
// true
group.addressLookupTables[0].equals(PublicKey.default)
) {
try {
console.log(`ALT: Creating`);
const createIx = AddressLookupTableProgram.createLookupTable({
authority: admin.publicKey,
payer: admin.publicKey,
recentSlot: await connection.getSlot('finalized'),
});
const createTx = await buildVersionedTx(
client.program.provider as AnchorProvider,
[createIx[0]],
);
let sig = await connection.sendTransaction(createTx);
console.log(
`...created ALT ${createIx[1]} https://explorer.solana.com/tx/${sig}?cluster=devnet`,
);
console.log(`ALT: set at index 0 for group...`);
sig = await client.altSet(
group,
new PublicKey('EmN5RjHUFsoag7tZ2AyBL2N8JrhV7nLMKgNbpCfzC81D'),
0,
);
console.log(`...https://explorer.solana.com/tx/${sig}?cluster=devnet`);
// Extend using a mango v4 program ix
// Throws > Instruction references an unknown account 11111111111111111111111111111111 atm
//
console.log(
`ALT: extending using mango v4 program with bank publick keys and oracles`,
);
// let sig = await client.altExtend(
// group,
// new PublicKey('EmN5RjHUFsoag7tZ2AyBL2N8JrhV7nLMKgNbpCfzC81D'),
// 0,
// Array.from(group.banksMapByMint.values())
// .flat()
// .map((bank) => [bank.publicKey, bank.oracle])
// .flat(),
// );
// console.log(`https://explorer.solana.com/tx/${sig}?cluster=devnet`);
// TODO decide on what keys should go in
console.log(`ALT: extending manually with bank publick keys and oracles`);
const extendIx = AddressLookupTableProgram.extendLookupTable({
lookupTable: createIx[1],
payer: admin.publicKey,
authority: admin.publicKey,
addresses: Array.from(group.banksMapByMint.values())
.flat()
.map((bank) => [bank.publicKey, bank.oracle])
.flat(),
});
const extendTx = await buildVersionedTx(
client.program.provider as AnchorProvider,
[extendIx],
);
sig = await client.program.provider.connection.sendTransaction(extendTx);
console.log(`https://explorer.solana.com/tx/${sig}?cluster=devnet`);
} catch (error) {
console.log(error);
}
}
try {
} catch (error) {
console.log(error);
}
process.exit();
}

View File

@ -2,7 +2,7 @@ import { AnchorProvider, Wallet } from '@project-serum/anchor';
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
import fs from 'fs';
import { HealthType } from '../accounts/mangoAccount';
import { BookSide, PerpOrderType, Side } from '../accounts/perp';
import { BookSide, PerpOrderSide, PerpOrderType } from '../accounts/perp';
import {
Serum3OrderType,
Serum3SelfTradeBehavior,
@ -117,7 +117,7 @@ async function main() {
}
// deposit and withdraw
if (false) {
if (true) {
try {
console.log(`...depositing 50 USDC, 1 SOL, 1 MNGO`);
await client.tokenDeposit(
@ -169,7 +169,7 @@ async function main() {
}
}
if (false) {
if (true) {
// serum3
const serum3Market = group.serum3MarketsMapByExternal.get(
DEVNET_SERUM3_MARKETS.get('BTC/USDC')?.toBase58()!,
@ -282,7 +282,7 @@ async function main() {
);
}
if (false) {
if (true) {
// serum3 market
const serum3Market = group.serum3MarketsMapByExternal.get(
DEVNET_SERUM3_MARKETS.get('BTC/USDC')!.toBase58(),
@ -290,7 +290,7 @@ async function main() {
console.log(await serum3Market?.logOb(client, group));
}
if (false) {
if (true) {
await mangoAccount.reload(client, group);
console.log(
'...mangoAccount.getEquity() ' +
@ -333,7 +333,7 @@ async function main() {
);
}
if (false) {
if (true) {
const asks = await group.loadSerum3AsksForMarket(
client,
DEVNET_SERUM3_MARKETS.get('BTC/USDC')!,
@ -434,7 +434,7 @@ async function main() {
group,
mangoAccount,
'BTC-PERP',
Side.bid,
PerpOrderSide.bid,
price,
baseQty,
quoteQty,
@ -467,7 +467,7 @@ async function main() {
group,
mangoAccount,
'BTC-PERP',
Side.bid,
PerpOrderSide.bid,
price,
baseQty,
quoteQty,
@ -496,7 +496,7 @@ async function main() {
group,
mangoAccount,
'BTC-PERP',
Side.ask,
PerpOrderSide.ask,
price,
baseQty,
quoteQty,
@ -526,7 +526,7 @@ async function main() {
group,
mangoAccount,
'BTC-PERP',
Side.ask,
PerpOrderSide.ask,
price,
baseQty,
quoteQty,
@ -554,7 +554,7 @@ async function main() {
// group,
// mangoAccount,
// 'BTC-PERP',
// Side.bid,
// PerpOrderSide.bid,
// price,
// 0.01,
// price * 0.01,
@ -575,7 +575,7 @@ async function main() {
// group,
// mangoAccount,
// 'BTC-PERP',
// Side.ask,
// PerpOrderSide.ask,
// price,
// 0.01,
// price * 0.011,
@ -593,7 +593,7 @@ async function main() {
// // sig = await client.perpCancelAllOrders(group, mangoAccount, 'BTC-PERP', 10);
// // console.log(`sig https://explorer.solana.com/tx/${sig}?cluster=devnet`);
const perpMarket = group.perpMarketsMap.get('BTC-PERP');
const perpMarket = group.perpMarketsMap.get('BTC-PERP')!;
const bids: BookSide = await perpMarket?.loadBids(client)!;
console.log(`bids - ${Array.from(bids.items())}`);
@ -601,7 +601,7 @@ async function main() {
console.log(`asks - ${Array.from(asks.items())}`);
await perpMarket?.loadEventQueue(client)!;
const fr = await perpMarket?.getCurrentFundingRate(
const fr = perpMarket?.getCurrentFundingRate(
await perpMarket.loadBids(client),
await perpMarket.loadAsks(client),
);

View File

@ -1,12 +1,17 @@
import { AnchorProvider } from '@project-serum/anchor';
import {
ASSOCIATED_TOKEN_PROGRAM_ID,
TOKEN_PROGRAM_ID,
} from '@solana/spl-token';
import {
AccountMeta,
AddressLookupTableAccount,
MessageV0,
PublicKey,
Signer,
SystemProgram,
TransactionInstruction,
VersionedTransaction,
} from '@solana/web3.js';
import BN from 'bn.js';
import { Bank, QUOTE_DECIMALS } from './accounts/bank';
@ -188,3 +193,24 @@ export function toU64(amount: number, decimals: number): BN {
export function nativeI80F48ToUi(amount: I80F48, decimals: number): I80F48 {
return amount.div(I80F48.fromNumber(Math.pow(10, decimals)));
}
export async function buildVersionedTx(
provider: AnchorProvider,
ix: TransactionInstruction[],
additionalSigners: Signer[] = [],
alts: AddressLookupTableAccount[] = [],
): Promise<VersionedTransaction> {
const message = MessageV0.compile({
payerKey: (provider as AnchorProvider).wallet.publicKey,
instructions: ix,
recentBlockhash: (await provider.connection.getLatestBlockhash()).blockhash,
addressLookupTableAccounts: alts,
});
const vTx = new VersionedTransaction(message);
// TODO: remove use of any when possible in future
vTx.sign([
((provider as AnchorProvider).wallet as any).payer as Signer,
...additionalSigners,
]);
return vTx;
}

View File

@ -1,27 +1,28 @@
import { AnchorProvider } from '@project-serum/anchor';
import { Transaction } from '@solana/web3.js';
import {
AddressLookupTableAccount,
TransactionInstruction,
} from '@solana/web3.js';
import { buildVersionedTx } from '../utils';
export async function sendTransaction(
provider: AnchorProvider,
transaction: Transaction,
ixs: TransactionInstruction[],
alts: AddressLookupTableAccount[],
opts: any = {},
) {
const connection = provider.connection;
const payer = provider.wallet;
const latestBlockhash = await connection.getLatestBlockhash(
opts.preflightCommitment,
);
transaction.recentBlockhash = latestBlockhash.blockhash;
transaction.lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;
transaction.feePayer = payer.publicKey;
if (opts.additionalSigners?.length > 0) {
transaction.partialSign(...opts.additionalSigners);
}
const tx = await buildVersionedTx(
provider,
ixs,
opts.additionalSigners,
alts,
);
await payer.signTransaction(transaction);
const rawTransaction = transaction.serialize();
const signature = await connection.sendRawTransaction(rawTransaction, {
const signature = await connection.sendRawTransaction(tx.serialize(), {
skipPreflight: true,
});
@ -35,16 +36,16 @@ export async function sendTransaction(
let status: any;
if (
transaction.recentBlockhash != null &&
transaction.lastValidBlockHeight != null
latestBlockhash.blockhash != null &&
latestBlockhash.lastValidBlockHeight != null
) {
console.log('confirming via blockhash');
status = (
await connection.confirmTransaction(
{
signature: signature,
blockhash: transaction.recentBlockhash,
lastValidBlockHeight: transaction.lastValidBlockHeight,
blockhash: latestBlockhash.blockhash,
lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
},
'processed',
)

163
yarn.lock
View File

@ -23,13 +23,20 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2":
"@babel/runtime@^7.10.5":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a"
integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2":
version "7.19.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259"
integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==
dependencies:
regenerator-runtime "^0.13.4"
"@cykura/sdk-core@npm:@jup-ag/cykura-sdk-core@0.1.8", "@jup-ag/cykura-sdk-core@0.1.8":
version "0.1.8"
resolved "https://registry.npmjs.org/@jup-ag/cykura-sdk-core/-/cykura-sdk-core-0.1.8.tgz"
@ -192,6 +199,21 @@
resolved "https://registry.npmjs.org/@mercurial-finance/optimist/-/optimist-0.1.4.tgz"
integrity sha512-m8QuyPx9j7fGd2grw0mD5WcYtBb8l7+OQI5aHdeIlxPg3QoPrbSdCHyFOuipYbvB0EY5YDbOmyeFwiTcBkBBSw==
"@noble/ed25519@^1.7.0":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.1.tgz#6899660f6fbb97798a6fbd227227c4589a454724"
integrity sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==
"@noble/hashes@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183"
integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==
"@noble/secp256k1@^1.6.3":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.0.tgz#d15357f7c227e751d90aa06b05a0e5cf993ba8c1"
integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@ -514,7 +536,7 @@
"@solana/buffer-layout@^4.0.0":
version "4.0.0"
resolved "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz"
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734"
integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==
dependencies:
buffer "~6.0.3"
@ -583,7 +605,28 @@
superstruct "^0.14.2"
tweetnacl "^1.0.0"
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.36.0":
"@solana/web3.js@1.63.1", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.63.1":
version "1.63.1"
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.63.1.tgz#88a19a17f5f4aada73ad70a94044c1067cab2b4d"
integrity sha512-wgEdGVK5FTS2zENxbcGSvKpGZ0jDS6BUdGu8Gn6ns0CzgJkK83u4ip3THSnBPEQ5i/jrqukg998BwV1H67+qiQ==
dependencies:
"@babel/runtime" "^7.12.5"
"@noble/ed25519" "^1.7.0"
"@noble/hashes" "^1.1.2"
"@noble/secp256k1" "^1.6.3"
"@solana/buffer-layout" "^4.0.0"
bigint-buffer "^1.1.5"
bn.js "^5.0.0"
borsh "^0.7.0"
bs58 "^4.0.1"
buffer "6.0.1"
fast-stable-stringify "^1.0.0"
jayson "^3.4.4"
node-fetch "2"
rpc-websockets "^7.5.0"
superstruct "^0.14.2"
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0":
version "1.51.0"
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.51.0.tgz#51b28b5332f1f03ea25bea6c229869e33aebc507"
integrity sha512-kf2xHKYETKiIY4DCt8Os7VDPoY5oyOMJ3UWRcLeOVEFXwiv2ClNmSg0EG3BqV3I4TwOojGtmVqk0ubCkUnpmfg==
@ -702,20 +745,11 @@
"@types/connect@^3.4.33":
version "3.4.35"
resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz"
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
dependencies:
"@types/node" "*"
"@types/express-serve-static-core@^4.17.9":
version "4.17.30"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04"
integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==
dependencies:
"@types/node" "*"
"@types/qs" "*"
"@types/range-parser" "*"
"@types/json-schema@^7.0.9":
version "7.0.11"
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz"
@ -726,11 +760,6 @@
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
"@types/lodash@^4.14.159":
version "4.14.182"
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz"
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
"@types/long@^4.0.1":
version "4.0.2"
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a"
@ -742,9 +771,9 @@
integrity sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==
"@types/node@*":
version "18.7.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.1.tgz#352bee64f93117d867d05f7406642a52685cbca6"
integrity sha512-GKX1Qnqxo4S+Z/+Z8KKPLpH282LD7jLHWJcVryOflnsnH+BtSDfieR6ObwBMwpnNws0bUK8GI7z0unQf9bARNQ==
version "18.7.22"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.22.tgz#76f7401362ad63d9d7eefa7dcdfa5fcd9baddff3"
integrity sha512-TsmoXYd4zrkkKjJB0URF/mTIKPl+kVcbqClB2F/ykU7vil1BfWZVndOnpEIozPv4fURD28gyPFeIkW2G+KXOvw==
"@types/node@>=13.7.0":
version "18.7.6"
@ -768,16 +797,6 @@
dependencies:
"@types/retry" "*"
"@types/qs@*":
version "6.9.7"
resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz"
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
"@types/range-parser@*":
version "1.2.4"
resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz"
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
"@types/retry@*", "@types/retry@^0.12.2":
version "0.12.2"
resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz"
@ -785,7 +804,7 @@
"@types/ws@^7.4.4":
version "7.4.7"
resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702"
integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==
dependencies:
"@types/node" "*"
@ -888,7 +907,7 @@
JSONStream@^1.3.5:
version "1.3.5"
resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz"
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
dependencies:
jsonparse "^1.2.0"
@ -1041,7 +1060,7 @@ base-x@^4.0.0:
base64-js@^1.3.1, base64-js@^1.5.1:
version "1.5.1"
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
big.js@^5.2.2:
@ -1061,7 +1080,7 @@ big.js@^6.2.0:
bigint-buffer@^1.1.5:
version "1.1.5"
resolved "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz"
resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442"
integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==
dependencies:
bindings "^1.3.0"
@ -1078,7 +1097,7 @@ binary-extensions@^2.0.0:
bindings@^1.3.0:
version "1.5.0"
resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
dependencies:
file-uri-to-path "1.0.0"
@ -1120,7 +1139,7 @@ borsh@^0.4.0:
borsh@^0.7.0:
version "0.7.0"
resolved "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz"
resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a"
integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==
dependencies:
bn.js "^5.2.0"
@ -1161,7 +1180,7 @@ browser-stdout@1.3.1:
bs58@^4.0.0, bs58@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==
dependencies:
base-x "^3.0.2"
@ -1185,7 +1204,7 @@ buffer-layout@^1.2.0, buffer-layout@^1.2.2:
buffer@6.0.1:
version "6.0.1"
resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2"
integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==
dependencies:
base64-js "^1.3.1"
@ -1193,7 +1212,7 @@ buffer@6.0.1:
buffer@6.0.3, buffer@^6.0.1, buffer@~6.0.3:
version "6.0.3"
resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
dependencies:
base64-js "^1.3.1"
@ -1209,7 +1228,7 @@ buffer@^5.4.3:
bufferutil@^4.0.1:
version "4.0.6"
resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz"
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433"
integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==
dependencies:
node-gyp-build "^4.3.0"
@ -1332,7 +1351,7 @@ color-name@~1.1.4:
commander@^2.20.3:
version "2.20.3"
resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
concat-map@0.0.1:
@ -1434,7 +1453,7 @@ define-properties@^1.1.3, define-properties@^1.1.4:
delay@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz"
resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d"
integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==
diff@5.0.0:
@ -1559,12 +1578,12 @@ es6-object-assign@^1.1.0:
es6-promise@^4.0.3:
version "4.2.8"
resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz"
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==
dependencies:
es6-promise "^4.0.3"
@ -1730,7 +1749,7 @@ event-stream@=3.3.4:
eventemitter3@^4.0.7:
version "4.0.7"
resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
execa@5.1.1:
@ -1750,7 +1769,7 @@ execa@5.1.1:
eyes@^0.1.8:
version "0.1.8"
resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz"
resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
@ -1781,7 +1800,7 @@ fast-levenshtein@^2.0.6:
fast-stable-stringify@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz"
resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313"
integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==
fastq@^1.6.0:
@ -1808,7 +1827,7 @@ file-entry-cache@^6.0.1:
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
fill-range@^7.0.1:
@ -2066,7 +2085,7 @@ human-signals@^2.1.0:
ieee754@^1.1.13, ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ignore@^4.0.6:
@ -2274,17 +2293,15 @@ isexe@^2.0.0:
isomorphic-ws@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz"
resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==
jayson@^3.4.4:
version "3.6.6"
resolved "https://registry.npmjs.org/jayson/-/jayson-3.6.6.tgz"
integrity sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ==
version "3.7.0"
resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25"
integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==
dependencies:
"@types/connect" "^3.4.33"
"@types/express-serve-static-core" "^4.17.9"
"@types/lodash" "^4.14.159"
"@types/node" "^12.12.54"
"@types/ws" "^7.4.4"
JSONStream "^1.3.5"
@ -2361,7 +2378,7 @@ json-stable-stringify-without-jsonify@^1.0.1:
json-stringify-safe@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
json5@^1.0.1:
@ -2378,7 +2395,7 @@ jsonc-parser@^3.0.0:
jsonparse@^1.2.0:
version "1.3.1"
resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz"
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
lazy-ass@1.6.0:
@ -2418,7 +2435,7 @@ lodash.truncate@^4.4.2:
lodash@^4.17.20, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-symbols@4.1.0:
@ -2616,7 +2633,7 @@ node-domexception@^1.0.0:
node-fetch@2, node-fetch@2.6.7:
version "2.6.7"
resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
dependencies:
whatwg-url "^5.0.0"
@ -2846,7 +2863,7 @@ readdirp@~3.6.0:
regenerator-runtime@^0.13.4:
version "0.13.9"
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
regexp.prototype.flags@^1.4.3:
@ -2902,7 +2919,7 @@ rimraf@^3.0.2:
rpc-websockets@^7.4.2, rpc-websockets@^7.5.0:
version "7.5.0"
resolved "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz"
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748"
integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==
dependencies:
"@babel/runtime" "^7.17.2"
@ -3108,7 +3125,7 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.
superstruct@^0.14.2:
version "0.14.2"
resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz"
resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b"
integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==
superstruct@^0.15.2, superstruct@^0.15.4:
@ -3150,7 +3167,7 @@ table@^6.0.9:
text-encoding-utf-8@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz"
resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13"
integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==
text-table@^0.2.0:
@ -3160,7 +3177,7 @@ text-table@^0.2.0:
through@2, "through@>=2.2.7 <3", through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
tiny-invariant@^1.1.0, tiny-invariant@^1.2.0, tiny-invariant@~1.2.0:
@ -3187,7 +3204,7 @@ toml@^3.0.0:
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
traverse-chain@~0.1.0:
@ -3314,7 +3331,7 @@ uri-js@^4.2.2:
utf-8-validate@^5.0.2:
version "5.0.9"
resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz"
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3"
integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==
dependencies:
node-gyp-build "^4.3.0"
@ -3333,7 +3350,7 @@ util@^0.12.0:
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
v8-compile-cache@^2.0.3:
@ -3369,7 +3386,7 @@ web-streams-polyfill@^3.0.3:
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
webidl-conversions@^5.0.0:
@ -3388,7 +3405,7 @@ whatwg-url-without-unicode@8.0.0-3:
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
dependencies:
tr46 "~0.0.3"
@ -3454,9 +3471,9 @@ ws@^7.4.5:
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
ws@^8.5.0:
version "8.8.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
version "8.9.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e"
integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==
y18n@^5.0.5:
version "5.0.8"