parent
fbeb694a4b
commit
e167fe69f6
|
@ -30,10 +30,10 @@
|
|||
},
|
||||
"homepage": "https://github.com/blockworks-foundation/mangolana#readme",
|
||||
"dependencies": {
|
||||
"@solana/web3.js": "^1.88.0",
|
||||
"@solana/web3.js": "^1.91.6",
|
||||
"bs58": "^5.0.0",
|
||||
"isomorphic-ws": "^5.0.0",
|
||||
"node-fetch": "2.6.11",
|
||||
"node-fetch": "3.3.2",
|
||||
"ws": "^8.16.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -41,6 +41,7 @@
|
|||
"tslint": "^6.1.3",
|
||||
"tslint-config-prettier": "^1.18.0",
|
||||
"typedoc": "^0.23.16",
|
||||
"typescript": "^4.8.4"
|
||||
"typescript": "5.4.5",
|
||||
"@types/node": "20.12.7"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -119,14 +119,13 @@ const confirmWithSignatureStatuses = (
|
|||
return new Promise<RpcResponseAndContext<SignatureStatus>>(async (resolve, reject) => {
|
||||
try {
|
||||
const retryTimer = timeoutConfig.getSignatureStatusesPoolIntervalMs || 4000;
|
||||
let intervalTimeout: NodeJS.Timer | null = null;
|
||||
const cleanUp = () => {
|
||||
let intervalTimeout: NodeJS.Timeout | null = null;
|
||||
const onAbort = () => {
|
||||
if (intervalTimeout) {
|
||||
clearInterval(intervalTimeout);
|
||||
}
|
||||
};
|
||||
const onAbort = () => {
|
||||
cleanUp();
|
||||
internalSignal.removeEventListener('abort', onAbort);
|
||||
externalSignal?.removeEventListener('abort', onAbort);
|
||||
reject(ConfirmationReject.Aborted);
|
||||
};
|
||||
internalSignal.addEventListener('abort', onAbort);
|
||||
|
@ -174,39 +173,46 @@ const confirmWithWebSockets = (
|
|||
return new Promise<RpcResponseAndContext<SignatureStatus>>(async (resolve, reject) => {
|
||||
try {
|
||||
let subscriptionId: number | undefined;
|
||||
const tempConnection = new Connection(connection.rpcEndpoint, connection.commitment);
|
||||
let websocket: Websocket | null = null;
|
||||
const onAbort = () => {
|
||||
cleanup();
|
||||
reject(ConfirmationReject.Aborted);
|
||||
};
|
||||
const cleanup = () => {
|
||||
if (
|
||||
subscriptionId &&
|
||||
//@ts-ignore
|
||||
Object.values(connection._subscriptionsByHash).find((x) => x.serverSubscriptionId === subscriptionId)
|
||||
) {
|
||||
connection.removeSignatureListener(subscriptionId).catch((e) => {
|
||||
const cleanup = async () => {
|
||||
//@ts-ignore
|
||||
if (subscriptionId && tempConnection._subscriptionDisposeFunctionsByClientSubscriptionId[subscriptionId]) {
|
||||
try {
|
||||
await tempConnection.removeSignatureListener(subscriptionId);
|
||||
} catch (e) {
|
||||
logger.log('WS error in cleanup', e);
|
||||
});
|
||||
}
|
||||
}
|
||||
if (websocket && websocket.removeAllListeners) {
|
||||
websocket.removeAllListeners();
|
||||
websocket = null;
|
||||
}
|
||||
subscriptionId = undefined;
|
||||
internalSignal.removeEventListener('abort', onAbort);
|
||||
externalSignal?.removeEventListener('abort', onAbort);
|
||||
};
|
||||
internalSignal.addEventListener('abort', onAbort);
|
||||
externalSignal?.addEventListener('abort', onAbort);
|
||||
try {
|
||||
logger.log('on signature', connection);
|
||||
logger.log('on signature', txid);
|
||||
//In native websockets of web3 there is retry infinity so to prevent connecting to
|
||||
//broken rpc we check if websockets are working
|
||||
const websocket = new Websocket(connection.rpcEndpoint.replace(/^http(s?):\/\//, 'ws$1://'));
|
||||
websocket = new Websocket(tempConnection.rpcEndpoint.replace(/^http(s?):\/\//, 'ws$1://'));
|
||||
|
||||
websocket.onerror = function error() {
|
||||
websocket.close();
|
||||
websocket?.close();
|
||||
};
|
||||
websocket.onopen = async () => {
|
||||
websocket.close();
|
||||
websocket?.close();
|
||||
await sleep(100);
|
||||
subscriptionId = connection.onSignature(
|
||||
subscriptionId = tempConnection.onSignature(
|
||||
txid,
|
||||
(result, context) => {
|
||||
subscriptionId = undefined;
|
||||
if (result.err) {
|
||||
cleanup();
|
||||
logger.log('WS reject', txid, result);
|
||||
|
@ -260,6 +266,8 @@ const timeoutCheck = (
|
|||
if (setTimeoutTimer) {
|
||||
clearTimeout(setTimeoutTimer);
|
||||
}
|
||||
internalSignal.removeEventListener('abort', onAbort);
|
||||
externalSignal?.removeEventListener('abort', onAbort);
|
||||
reject(ConfirmationReject.Aborted);
|
||||
};
|
||||
internalSignal.addEventListener('abort', onAbort);
|
||||
|
@ -273,9 +281,6 @@ const timeoutCheck = (
|
|||
const currentBlockHeight = await connection.getBlockHeight(confirmLevel);
|
||||
if (typeof currentBlockHeight !== undefined && timeoutBlockHeight <= currentBlockHeight!) {
|
||||
logger.log('Timed out for txid: ', txid);
|
||||
if (intervalTimer) {
|
||||
clearInterval(intervalTimer);
|
||||
}
|
||||
reject(ConfirmationReject.Timeout);
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -363,6 +368,7 @@ export const sendAndConfirmSignedTransaction = async ({
|
|||
if (config?.resendTxUntilConfirmed) {
|
||||
config.resendPoolTimeMs ||= 2000;
|
||||
}
|
||||
|
||||
const rawTransaction = signedTransaction.serialize();
|
||||
let txid = bs58.encode(signedTransaction.signatures[0].signature!);
|
||||
const startTime = getUnixTs();
|
||||
|
|
79
yarn.lock
79
yarn.lock
|
@ -44,11 +44,16 @@
|
|||
dependencies:
|
||||
"@noble/hashes" "1.3.3"
|
||||
|
||||
"@noble/hashes@1.3.3", "@noble/hashes@^1.3.2":
|
||||
"@noble/hashes@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699"
|
||||
integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==
|
||||
|
||||
"@noble/hashes@^1.3.3":
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426"
|
||||
integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==
|
||||
|
||||
"@solana/buffer-layout@^4.0.1":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15"
|
||||
|
@ -56,14 +61,14 @@
|
|||
dependencies:
|
||||
buffer "~6.0.3"
|
||||
|
||||
"@solana/web3.js@^1.88.0":
|
||||
version "1.88.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.88.0.tgz#24e1482f63ac54914430b4ce5ab36eaf433ecdb8"
|
||||
integrity sha512-E4BdfB0HZpb66OPFhIzPApNE2tG75Mc6XKIoeymUkx/IV+USSYuxDX29sjgE/KGNYxggrOf4YuYnRMI6UiPL8w==
|
||||
"@solana/web3.js@^1.91.6":
|
||||
version "1.91.6"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.91.6.tgz#c090661c344cbc61e6cdeb0da67d3ea80d5848e1"
|
||||
integrity sha512-dm20nN6HQvXToo+kM51nxHdtaa2wMSRdeK37p+WIWESfeiVHqV8XbV4XnWupq6ngt5vIckhGFG7ZnTBxUgLzDA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.23.4"
|
||||
"@noble/curves" "^1.2.0"
|
||||
"@noble/hashes" "^1.3.2"
|
||||
"@noble/hashes" "^1.3.3"
|
||||
"@solana/buffer-layout" "^4.0.1"
|
||||
agentkeepalive "^4.5.0"
|
||||
bigint-buffer "^1.1.5"
|
||||
|
@ -89,6 +94,13 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.3.tgz#ce750ab4017effa51aed6a7230651778d54e327c"
|
||||
integrity sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w==
|
||||
|
||||
"@types/node@20.12.7":
|
||||
version "20.12.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384"
|
||||
integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==
|
||||
dependencies:
|
||||
undici-types "~5.26.4"
|
||||
|
||||
"@types/node@^12.12.54":
|
||||
version "12.20.55"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240"
|
||||
|
@ -260,6 +272,11 @@ concat-map@0.0.1:
|
|||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||
|
||||
data-uri-to-buffer@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e"
|
||||
integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==
|
||||
|
||||
delay@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d"
|
||||
|
@ -307,11 +324,26 @@ fast-stable-stringify@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313"
|
||||
integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==
|
||||
|
||||
fetch-blob@^3.1.2, fetch-blob@^3.1.4:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9"
|
||||
integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
|
||||
dependencies:
|
||||
node-domexception "^1.0.0"
|
||||
web-streams-polyfill "^3.0.3"
|
||||
|
||||
file-uri-to-path@1.0.0:
|
||||
version "1.0.0"
|
||||
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==
|
||||
|
||||
formdata-polyfill@^4.0.10:
|
||||
version "4.0.10"
|
||||
resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
|
||||
integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
|
||||
dependencies:
|
||||
fetch-blob "^3.1.2"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
|
@ -475,12 +507,19 @@ ms@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
node-fetch@2.6.11:
|
||||
version "2.6.11"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
|
||||
integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
|
||||
node-domexception@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
|
||||
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
|
||||
|
||||
node-fetch@3.3.2:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b"
|
||||
integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==
|
||||
dependencies:
|
||||
whatwg-url "^5.0.0"
|
||||
data-uri-to-buffer "^4.0.0"
|
||||
fetch-blob "^3.1.4"
|
||||
formdata-polyfill "^4.0.10"
|
||||
|
||||
node-fetch@^2.7.0:
|
||||
version "2.7.0"
|
||||
|
@ -650,10 +689,15 @@ typedoc@^0.23.16:
|
|||
minimatch "^5.1.0"
|
||||
shiki "^0.11.1"
|
||||
|
||||
typescript@^4.8.4:
|
||||
version "4.8.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6"
|
||||
integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==
|
||||
typescript@5.4.5:
|
||||
version "5.4.5"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
|
||||
integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
|
||||
|
||||
undici-types@~5.26.4:
|
||||
version "5.26.5"
|
||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
|
||||
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
|
||||
|
||||
utf-8-validate@^5.0.2:
|
||||
version "5.0.9"
|
||||
|
@ -677,6 +721,11 @@ vscode-textmate@^6.0.0:
|
|||
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz#a3777197235036814ac9a92451492f2748589210"
|
||||
integrity sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==
|
||||
|
||||
web-streams-polyfill@^3.0.3:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b"
|
||||
integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
|
||||
|
||||
webidl-conversions@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||
|
|
Loading…
Reference in New Issue