Skip to content

Commit

Permalink
v10.16.1: fix: fastest stategy should fail as soon as all requests fa…
Browse files Browse the repository at this point in the history
…iled
  • Loading branch information
10xSebastian committed Jun 27, 2023
1 parent 46a13b3 commit 8acffed
Show file tree
Hide file tree
Showing 11 changed files with 168 additions and 93 deletions.
26 changes: 17 additions & 9 deletions dist/esm/index.evm.js
Original file line number Diff line number Diff line change
Expand Up @@ -488,17 +488,25 @@ var requestEVM = async ({ blockchain, address, api, method, params, block, timeo

if(strategy === 'fastest') {

return Promise.race((await EVM.getProviders(blockchain)).map((provider)=>{
const providers = await EVM.getProviders(blockchain);

let allRequestsFailed = [];

const request = singleRequest({ blockchain, address, api, method, params, block, provider });
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

if(timeout) {
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout));
return Promise.race([request, timeoutPromise])
} else {
return request
}
}))
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

Expand Down
51 changes: 33 additions & 18 deletions dist/esm/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -760,17 +760,25 @@ var requestEVM = async ({ blockchain, address, api, method, params, block, timeo

if(strategy === 'fastest') {

return Promise.race((await EVM.getProviders(blockchain)).map((provider)=>{
const providers = await EVM.getProviders(blockchain);

let allRequestsFailed = [];

const request = singleRequest$1({ blockchain, address, api, method, params, block, provider });
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest$1({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

if(timeout) {
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout));
return Promise.race([request, timeoutPromise])
} else {
return request
}
}))
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

Expand Down Expand Up @@ -845,17 +853,24 @@ var requestSolana = async ({ blockchain, address, api, method, params, block, ti

if(strategy === 'fastest') {

return Promise.race(providers.map((provider)=>{
let allRequestsFailed = [];

const succeedingRequest = new Promise((resolve)=>{
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve);
}); // failing requests are ignored during race/fastest

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

return Promise.race([succeedingRequest, timeoutPromise])
}))
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

const provider = await Solana.getProvider(blockchain);
Expand Down
25 changes: 16 additions & 9 deletions dist/esm/index.solana.js
Original file line number Diff line number Diff line change
Expand Up @@ -535,17 +535,24 @@ var requestSolana = async ({ blockchain, address, api, method, params, block, ti

if(strategy === 'fastest') {

return Promise.race(providers.map((provider)=>{
let allRequestsFailed = [];

const succeedingRequest = new Promise((resolve)=>{
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve);
}); // failing requests are ignored during race/fastest

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

return Promise.race([succeedingRequest, timeoutPromise])
}))
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

const provider = await Solana.getProvider(blockchain);
Expand Down
26 changes: 17 additions & 9 deletions dist/umd/index.evm.js
Original file line number Diff line number Diff line change
Expand Up @@ -495,17 +495,25 @@

if(strategy === 'fastest') {

return Promise.race((await EVM.getProviders(blockchain)).map((provider)=>{
const providers = await EVM.getProviders(blockchain);

let allRequestsFailed = [];

const request = singleRequest({ blockchain, address, api, method, params, block, provider });
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

if(timeout) {
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout));
return Promise.race([request, timeoutPromise])
} else {
return request
}
}))
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

Expand Down
51 changes: 33 additions & 18 deletions dist/umd/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -766,17 +766,25 @@

if(strategy === 'fastest') {

return Promise.race((await EVM.getProviders(blockchain)).map((provider)=>{
const providers = await EVM.getProviders(blockchain);

let allRequestsFailed = [];

const request = singleRequest$1({ blockchain, address, api, method, params, block, provider });
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest$1({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

if(timeout) {
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout));
return Promise.race([request, timeoutPromise])
} else {
return request
}
}))
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

Expand Down Expand Up @@ -851,17 +859,24 @@

if(strategy === 'fastest') {

return Promise.race(providers.map((provider)=>{
let allRequestsFailed = [];

const succeedingRequest = new Promise((resolve)=>{
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve);
}); // failing requests are ignored during race/fastest

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

return Promise.race([succeedingRequest, timeoutPromise])
}))
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

const provider = await Solana.getProvider(blockchain);
Expand Down
25 changes: 16 additions & 9 deletions dist/umd/index.solana.js
Original file line number Diff line number Diff line change
Expand Up @@ -541,17 +541,24 @@

if(strategy === 'fastest') {

return Promise.race(providers.map((provider)=>{
let allRequestsFailed = [];

const succeedingRequest = new Promise((resolve)=>{
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve);
}); // failing requests are ignored during race/fastest

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

return Promise.race([succeedingRequest, timeoutPromise])
}))
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
);
})
});

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")); }, timeout || 10000));

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve); })
})).then(()=>{ return });

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

const provider = await Solana.getProvider(blockchain);
Expand Down
2 changes: 1 addition & 1 deletion package.evm.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@depay/web3-client-evm",
"moduleName": "Web3Client",
"version": "10.16.0",
"version": "10.16.1",
"description": "A web3 client to fetch blockchain data just like you are used to with HTTP clients.",
"main": "dist/umd/index.evm.js",
"module": "dist/esm/index.evm.js",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@depay/web3-client",
"moduleName": "Web3Client",
"version": "10.16.0",
"version": "10.16.1",
"description": "A web3 client to fetch blockchain data just like you are used to with HTTP clients.",
"main": "dist/umd/index.js",
"module": "dist/esm/index.js",
Expand Down
2 changes: 1 addition & 1 deletion package.solana.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@depay/web3-client-solana",
"moduleName": "Web3Client",
"version": "10.16.0",
"version": "10.16.1",
"description": "A web3 client to fetch blockchain data just like you are used to with HTTP clients.",
"main": "dist/umd/index.solana.js",
"module": "dist/esm/index.solana.js",
Expand Down
26 changes: 17 additions & 9 deletions src/platforms/evm/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,25 @@ export default async ({ blockchain, address, api, method, params, block, timeout

if(strategy === 'fastest') {

return Promise.race((await EVM.getProviders(blockchain)).map((provider)=>{
const providers = await EVM.getProviders(blockchain)

let allRequestsFailed = []

const request = singleRequest({ blockchain, address, api, method, params, block, provider })
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
)
})
})

if(timeout) {
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")) }, timeout))
return Promise.race([request, timeoutPromise])
} else {
return request
}
}))
const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")) }, timeout || 10000))

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve) })
})).then(()=>{ return })

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

Expand Down
25 changes: 16 additions & 9 deletions src/platforms/solana/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,24 @@ export default async ({ blockchain, address, api, method, params, block, timeout

if(strategy === 'fastest') {

return Promise.race(providers.map((provider)=>{
let allRequestsFailed = []

const succeedingRequest = new Promise((resolve)=>{
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
}) // failing requests are ignored during race/fastest

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")) }, timeout || 10000))

return Promise.race([succeedingRequest, timeoutPromise])
}))
const allRequestsInParallel = providers.map((provider)=>{
return new Promise((resolve)=>{
allRequestsFailed.push(
singleRequest({ blockchain, address, api, method, params, block, provider }).then(resolve)
)
})
})

const timeoutPromise = new Promise((_, reject)=>setTimeout(()=>{ reject(new Error("Web3ClientTimeout")) }, timeout || 10000))

allRequestsFailed = Promise.all(allRequestsFailed.map((request)=>{
return new Promise((resolve)=>{ request.catch(resolve) })
})).then(()=>{ return })

return Promise.race([...allRequestsInParallel, timeoutPromise, allRequestsFailed])

} else { // failover

const provider = await Solana.getProvider(blockchain)
Expand Down

0 comments on commit 8acffed

Please sign in to comment.