/
rate-limit.ts
66 lines (53 loc) 路 1.59 KB
/
rate-limit.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import {fetchCollectionSlug} from '../src';
const requestsPerMinute = (() => {
let dt: Date[] = [];
return () => {
const now = Date.now();
dt = [...dt, new Date(now)].filter(e => e.getTime() > now - (60 * 1000));
return dt.length;
};
})();
//const requestSomethingWhichDoesNotExist = async () => {
// const contractAddress = `${Math.random()}`;
// try {
// await fetchCollectionSlug({
// contractAddress,
// });
// } catch (e) {
// const isAcceptableError = e instanceof Error
// && e.message === `Unable to find an attempted archive url for "opensea.io/assets/ethereum/${contractAddress}/*".`;
//
// if (!isAcceptableError) throw e;
// }
// return requestsPerMinute();
//};
const requestRookies = async () => {
await fetchCollectionSlug({
contractAddress: '0x63f421b24cea6765b326753f6d4e558c21ea8f76',
});
return requestsPerMinute();
};
void (async () => {
let count = 0;
let totalTime = 0;
while (true) {
try {
// 0.78796s for a single slug = 393.98s.
const now = Date.now();
const results = await Promise.all(
[...Array(100)].map(requestRookies),
);
const rpm = results[results.length - 1];
const dt = Date.now() - now;
const timePerRequest = (dt / 1000) / results.length;
count += results.length;
totalTime += dt;
console.log('rpm', rpm, 'dt', dt, 'timePerRequest', timePerRequest, 'count', count, 'total time', totalTime);
} catch (e) {
console.error('did err');
console.error(e);
if (Math.random() < 0) break;
}
}
process.exitCode = 1;
})();