@certik/skynet 0.10.7 → 0.10.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +5 -5
- package/.eslintrc.js +13 -13
- package/.prettierrc.js +3 -3
- package/CHANGELOG.md +381 -372
- package/README.md +23 -23
- package/abi.js +353 -353
- package/ably.js +29 -29
- package/address.js +18 -18
- package/api.js +128 -105
- package/app.js +709 -709
- package/availability.js +58 -58
- package/block.js +83 -83
- package/cli.js +53 -53
- package/const.js +92 -92
- package/deploy.js +676 -676
- package/dynamodb.js +444 -444
- package/env.js +90 -90
- package/examples/api +70 -73
- package/examples/consumer +47 -47
- package/examples/indexer +65 -65
- package/examples/mode-indexer +82 -82
- package/examples/producer +80 -80
- package/indexer.js +596 -595
- package/inquiry.js +14 -14
- package/kafka.js +444 -443
- package/labelling.js +90 -90
- package/log.js +29 -29
- package/metric.js +65 -65
- package/monitor.js +191 -191
- package/opsgenie.js +55 -55
- package/package.json +37 -37
- package/price.js +48 -48
- package/primitive.js +77 -77
- package/proxy.js +157 -157
- package/rateLimit.js +21 -21
- package/s3.js +122 -122
- package/scan.js +74 -74
- package/selector.js +53 -53
- package/slack.js +87 -87
- package/snowflake.js +36 -36
- package/sqs.js +12 -12
- package/token.js +46 -46
- package/transaction.js +41 -41
- package/util.js +67 -67
- package/web3.js +117 -117
package/primitive.js
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
async function getOverrides(docClient, projectId, address, log, primitive) {
|
|
2
|
-
try {
|
|
3
|
-
console.log("ProjectId:" + projectId + " address:" + address);
|
|
4
|
-
|
|
5
|
-
const whitelist = [];
|
|
6
|
-
const queryProjectOverrides = await docClient
|
|
7
|
-
.get({
|
|
8
|
-
TableName: "skynet-prd-primitive-manual-overrides",
|
|
9
|
-
Key: {
|
|
10
|
-
primitive: primitive,
|
|
11
|
-
overrideId: "project/" + projectId,
|
|
12
|
-
},
|
|
13
|
-
})
|
|
14
|
-
.promise();
|
|
15
|
-
if (queryProjectOverrides.Item && queryProjectOverrides.Item.whitelist) {
|
|
16
|
-
whitelist.push(...queryProjectOverrides.Item.whitelist);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const queryAddressOverrides = await docClient
|
|
20
|
-
.get({
|
|
21
|
-
TableName: "skynet-prd-primitive-manual-overrides",
|
|
22
|
-
Key: {
|
|
23
|
-
primitive: primitive,
|
|
24
|
-
overrideId: "address/" + address,
|
|
25
|
-
},
|
|
26
|
-
})
|
|
27
|
-
.promise();
|
|
28
|
-
|
|
29
|
-
if (queryAddressOverrides.Item && queryAddressOverrides.Item.whitelist) {
|
|
30
|
-
console.log(queryAddressOverrides.Item.whitelist);
|
|
31
|
-
whitelist.push(...queryAddressOverrides.Item.whitelist);
|
|
32
|
-
}
|
|
33
|
-
if (whitelist.length === 0) {
|
|
34
|
-
log(
|
|
35
|
-
"ProjectId " + projectId + " ,Address " + address + " has no override"
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
console.log("Whitelist:" + whitelist);
|
|
39
|
-
return whitelist;
|
|
40
|
-
} catch (scanFeedErr) {
|
|
41
|
-
log("scan feed error, check dynamodb table", scanFeedErr);
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async function overrideScoreAndIssues(
|
|
47
|
-
docClient,
|
|
48
|
-
projectId,
|
|
49
|
-
address,
|
|
50
|
-
score,
|
|
51
|
-
issues,
|
|
52
|
-
log,
|
|
53
|
-
primitive
|
|
54
|
-
) {
|
|
55
|
-
const overrides = await getOverrides(
|
|
56
|
-
docClient,
|
|
57
|
-
projectId,
|
|
58
|
-
address,
|
|
59
|
-
log,
|
|
60
|
-
primitive
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
issues = issues.filter((issue) => {
|
|
64
|
-
if (overrides.includes(issue.code)) {
|
|
65
|
-
score += issue.reduction;
|
|
66
|
-
return false;
|
|
67
|
-
} else return true;
|
|
68
|
-
});
|
|
69
|
-
return {
|
|
70
|
-
score,
|
|
71
|
-
issues,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
module.exports = {
|
|
75
|
-
getOverrides,
|
|
76
|
-
overrideScoreAndIssues,
|
|
77
|
-
};
|
|
1
|
+
async function getOverrides(docClient, projectId, address, log, primitive) {
|
|
2
|
+
try {
|
|
3
|
+
console.log("ProjectId:" + projectId + " address:" + address);
|
|
4
|
+
|
|
5
|
+
const whitelist = [];
|
|
6
|
+
const queryProjectOverrides = await docClient
|
|
7
|
+
.get({
|
|
8
|
+
TableName: "skynet-prd-primitive-manual-overrides",
|
|
9
|
+
Key: {
|
|
10
|
+
primitive: primitive,
|
|
11
|
+
overrideId: "project/" + projectId,
|
|
12
|
+
},
|
|
13
|
+
})
|
|
14
|
+
.promise();
|
|
15
|
+
if (queryProjectOverrides.Item && queryProjectOverrides.Item.whitelist) {
|
|
16
|
+
whitelist.push(...queryProjectOverrides.Item.whitelist);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const queryAddressOverrides = await docClient
|
|
20
|
+
.get({
|
|
21
|
+
TableName: "skynet-prd-primitive-manual-overrides",
|
|
22
|
+
Key: {
|
|
23
|
+
primitive: primitive,
|
|
24
|
+
overrideId: "address/" + address,
|
|
25
|
+
},
|
|
26
|
+
})
|
|
27
|
+
.promise();
|
|
28
|
+
|
|
29
|
+
if (queryAddressOverrides.Item && queryAddressOverrides.Item.whitelist) {
|
|
30
|
+
console.log(queryAddressOverrides.Item.whitelist);
|
|
31
|
+
whitelist.push(...queryAddressOverrides.Item.whitelist);
|
|
32
|
+
}
|
|
33
|
+
if (whitelist.length === 0) {
|
|
34
|
+
log(
|
|
35
|
+
"ProjectId " + projectId + " ,Address " + address + " has no override"
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
console.log("Whitelist:" + whitelist);
|
|
39
|
+
return whitelist;
|
|
40
|
+
} catch (scanFeedErr) {
|
|
41
|
+
log("scan feed error, check dynamodb table", scanFeedErr);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function overrideScoreAndIssues(
|
|
47
|
+
docClient,
|
|
48
|
+
projectId,
|
|
49
|
+
address,
|
|
50
|
+
score,
|
|
51
|
+
issues,
|
|
52
|
+
log,
|
|
53
|
+
primitive
|
|
54
|
+
) {
|
|
55
|
+
const overrides = await getOverrides(
|
|
56
|
+
docClient,
|
|
57
|
+
projectId,
|
|
58
|
+
address,
|
|
59
|
+
log,
|
|
60
|
+
primitive
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
issues = issues.filter((issue) => {
|
|
64
|
+
if (overrides.includes(issue.code)) {
|
|
65
|
+
score += issue.reduction;
|
|
66
|
+
return false;
|
|
67
|
+
} else return true;
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
score,
|
|
71
|
+
issues,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
module.exports = {
|
|
75
|
+
getOverrides,
|
|
76
|
+
overrideScoreAndIssues,
|
|
77
|
+
};
|
package/proxy.js
CHANGED
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
const fetch = require("node-fetch");
|
|
2
|
-
const AbortController = require("abort-controller");
|
|
3
|
-
|
|
4
|
-
const PROXY_INSTANCES = [
|
|
5
|
-
"https://dytsr8x71h.execute-api.us-east-1.amazonaws.com/", // 0
|
|
6
|
-
"https://mkn6g5z5le.execute-api.us-east-1.amazonaws.com/",
|
|
7
|
-
"https://26gzsf530c.execute-api.us-east-1.amazonaws.com/",
|
|
8
|
-
"https://v03g7u6z26.execute-api.us-east-1.amazonaws.com/",
|
|
9
|
-
"https://v39ebeocc1.execute-api.us-east-1.amazonaws.com/",
|
|
10
|
-
"https://hk9h3y9arb.execute-api.us-east-1.amazonaws.com/",
|
|
11
|
-
"https://7b15n2ht7l.execute-api.us-east-1.amazonaws.com/",
|
|
12
|
-
"https://8uhvhb5e53.execute-api.us-east-1.amazonaws.com/",
|
|
13
|
-
"https://7rtrukrk95.execute-api.us-east-1.amazonaws.com/",
|
|
14
|
-
"https://3qewm67hn1.execute-api.us-east-1.amazonaws.com/",
|
|
15
|
-
"https://556736tpce.execute-api.us-east-1.amazonaws.com/", // 10
|
|
16
|
-
"https://mshpz2z7d2.execute-api.us-east-1.amazonaws.com/",
|
|
17
|
-
"https://7bt6c7p3gf.execute-api.us-east-1.amazonaws.com/",
|
|
18
|
-
"https://oj5iu0u89d.execute-api.us-east-1.amazonaws.com/",
|
|
19
|
-
"https://b5ji9tgo5i.execute-api.us-east-1.amazonaws.com/",
|
|
20
|
-
"https://pzwpfi3vgk.execute-api.us-east-1.amazonaws.com/",
|
|
21
|
-
"https://4la30elqpg.execute-api.us-east-1.amazonaws.com/",
|
|
22
|
-
"https://ne5fiss07f.execute-api.us-east-1.amazonaws.com/",
|
|
23
|
-
"https://p93gw01mzk.execute-api.us-east-1.amazonaws.com/",
|
|
24
|
-
"https://8gidfkkw7f.execute-api.us-east-1.amazonaws.com/",
|
|
25
|
-
"https://o0rolv9t54.execute-api.us-east-1.amazonaws.com/", // 20
|
|
26
|
-
"https://rmm24o49f5.execute-api.us-east-1.amazonaws.com/",
|
|
27
|
-
"https://q44k3y3tll.execute-api.us-east-1.amazonaws.com/",
|
|
28
|
-
"https://ox84ynjgoj.execute-api.us-east-1.amazonaws.com/",
|
|
29
|
-
"https://ulb25ts130.execute-api.us-east-1.amazonaws.com/",
|
|
30
|
-
"https://uu3l7dmkai.execute-api.us-east-1.amazonaws.com/",
|
|
31
|
-
"https://o4x7lxh6pj.execute-api.us-east-1.amazonaws.com/",
|
|
32
|
-
"https://vc54yom9y4.execute-api.us-east-1.amazonaws.com/",
|
|
33
|
-
"https://jev66u1mhf.execute-api.us-east-1.amazonaws.com/",
|
|
34
|
-
"https://5da1kozme4.execute-api.us-east-1.amazonaws.com/",
|
|
35
|
-
"https://3qmuvrws8l.execute-api.us-east-1.amazonaws.com/", // 30
|
|
36
|
-
"https://33czg1g72l.execute-api.us-east-1.amazonaws.com/",
|
|
37
|
-
"https://72ofvtgltl.execute-api.us-east-1.amazonaws.com/",
|
|
38
|
-
"https://t0exa5kpl1.execute-api.us-east-1.amazonaws.com/",
|
|
39
|
-
"https://nwq3dkj7ql.execute-api.us-east-1.amazonaws.com/",
|
|
40
|
-
"https://9a9rgtalmc.execute-api.us-east-1.amazonaws.com/",
|
|
41
|
-
"https://uvvfu0upwc.execute-api.us-east-1.amazonaws.com/",
|
|
42
|
-
"https://aqv429acx6.execute-api.us-east-1.amazonaws.com/",
|
|
43
|
-
"https://vlvkahspic.execute-api.us-east-1.amazonaws.com/",
|
|
44
|
-
"https://vfyf73o40f.execute-api.us-east-1.amazonaws.com/",
|
|
45
|
-
"https://isovddqwik.execute-api.us-east-1.amazonaws.com/", // 40
|
|
46
|
-
"https://jjhhqlg789.execute-api.us-east-1.amazonaws.com/",
|
|
47
|
-
"https://ggrh0k8mfd.execute-api.us-east-1.amazonaws.com/",
|
|
48
|
-
"https://2fq9nfjwb3.execute-api.us-east-1.amazonaws.com/",
|
|
49
|
-
"https://jb16e6xz80.execute-api.us-east-1.amazonaws.com/",
|
|
50
|
-
"https://mk9uj2vzj6.execute-api.us-east-1.amazonaws.com/",
|
|
51
|
-
"https://ps7yr1dgu8.execute-api.us-east-1.amazonaws.com/",
|
|
52
|
-
"https://gl4co2x4ud.execute-api.us-east-1.amazonaws.com/",
|
|
53
|
-
"https://c6o0e7pra9.execute-api.us-east-1.amazonaws.com/",
|
|
54
|
-
"https://omokupco12.execute-api.us-east-1.amazonaws.com/",
|
|
55
|
-
"https://hwv5rhlgph.execute-api.us-east-1.amazonaws.com/", // 50
|
|
56
|
-
"https://8465ad223e.execute-api.us-east-1.amazonaws.com/",
|
|
57
|
-
"https://c6ssgeoj23.execute-api.us-east-1.amazonaws.com/",
|
|
58
|
-
"https://g8885ic96d.execute-api.us-east-1.amazonaws.com/",
|
|
59
|
-
"https://6rqvbiyfsl.execute-api.us-east-1.amazonaws.com/",
|
|
60
|
-
"https://4v9u56sk9g.execute-api.us-east-1.amazonaws.com/",
|
|
61
|
-
"https://fdra8xp8p4.execute-api.us-east-1.amazonaws.com/",
|
|
62
|
-
"https://lli6c9yt8a.execute-api.us-east-1.amazonaws.com/",
|
|
63
|
-
"https://n0vrpscg70.execute-api.us-east-1.amazonaws.com/",
|
|
64
|
-
"https://i4cjhmsxgh.execute-api.us-east-1.amazonaws.com/",
|
|
65
|
-
"https://j9s8hgctj8.execute-api.us-east-1.amazonaws.com/", // 60
|
|
66
|
-
"https://7fsuk56955.execute-api.us-east-1.amazonaws.com/",
|
|
67
|
-
"https://njmodl5qii.execute-api.us-east-1.amazonaws.com/",
|
|
68
|
-
"https://mxm7y4ehld.execute-api.us-east-1.amazonaws.com/",
|
|
69
|
-
"https://3cdpu56ss4.execute-api.us-east-1.amazonaws.com/",
|
|
70
|
-
"https://q81i7h2zb9.execute-api.us-east-1.amazonaws.com/",
|
|
71
|
-
"https://h4g6ass2o1.execute-api.us-east-1.amazonaws.com/",
|
|
72
|
-
"https://j42nkoonok.execute-api.us-east-1.amazonaws.com/",
|
|
73
|
-
"https://f2ac36s6b7.execute-api.us-east-1.amazonaws.com/",
|
|
74
|
-
"https://7gelmsgjzh.execute-api.us-east-1.amazonaws.com/",
|
|
75
|
-
"https://643y52s281.execute-api.us-east-1.amazonaws.com/", // 70
|
|
76
|
-
"https://mvlkkujr33.execute-api.us-east-1.amazonaws.com/",
|
|
77
|
-
"https://mdefho1x9l.execute-api.us-east-1.amazonaws.com/",
|
|
78
|
-
"https://n6dvg4pkz8.execute-api.us-east-1.amazonaws.com/",
|
|
79
|
-
"https://u0pvmukqzi.execute-api.us-east-1.amazonaws.com/",
|
|
80
|
-
"https://kwrvum76fb.execute-api.us-east-1.amazonaws.com/",
|
|
81
|
-
"https://u9pvcl1yjg.execute-api.us-east-1.amazonaws.com/",
|
|
82
|
-
"https://uwue37nm47.execute-api.us-east-1.amazonaws.com/",
|
|
83
|
-
"https://u4kewxo9ok.execute-api.us-east-1.amazonaws.com/",
|
|
84
|
-
"https://8wv9cqqkxk.execute-api.us-east-1.amazonaws.com/",
|
|
85
|
-
"https://bkhg2luwra.execute-api.us-east-1.amazonaws.com/", // 80
|
|
86
|
-
"https://eykfffi8id.execute-api.us-east-1.amazonaws.com/",
|
|
87
|
-
"https://6o9cyhjirk.execute-api.us-east-1.amazonaws.com/",
|
|
88
|
-
"https://ei1822av0a.execute-api.us-east-1.amazonaws.com/",
|
|
89
|
-
"https://c6g0dt40sa.execute-api.us-east-1.amazonaws.com/",
|
|
90
|
-
"https://4usww0c5o6.execute-api.us-east-1.amazonaws.com/",
|
|
91
|
-
"https://4zuimplfw9.execute-api.us-east-1.amazonaws.com/",
|
|
92
|
-
"https://1rm1s5nih8.execute-api.us-east-1.amazonaws.com/",
|
|
93
|
-
"https://00928llmcg.execute-api.us-east-1.amazonaws.com/",
|
|
94
|
-
"https://c1891ubva7.execute-api.us-east-1.amazonaws.com/",
|
|
95
|
-
"https://46en7n2sa5.execute-api.us-east-1.amazonaws.com/", // 90
|
|
96
|
-
"https://b99rerxnn4.execute-api.us-east-1.amazonaws.com/",
|
|
97
|
-
"https://swkx9wp64b.execute-api.us-east-1.amazonaws.com/",
|
|
98
|
-
"https://fsi7smizx7.execute-api.us-east-1.amazonaws.com/",
|
|
99
|
-
"https://62b5vzc2lc.execute-api.us-east-1.amazonaws.com/",
|
|
100
|
-
"https://dp51s8airb.execute-api.us-east-1.amazonaws.com/",
|
|
101
|
-
"https://mg17vjdpq9.execute-api.us-east-1.amazonaws.com/",
|
|
102
|
-
"https://jydmktw9tg.execute-api.us-east-1.amazonaws.com/",
|
|
103
|
-
"https://nir1xko0c8.execute-api.us-east-1.amazonaws.com/",
|
|
104
|
-
"https://xs59tyiizd.execute-api.us-east-1.amazonaws.com/" // 99
|
|
105
|
-
];
|
|
106
|
-
|
|
107
|
-
async function proxyFetch(url, options = {}) {
|
|
108
|
-
const rn = Math.floor(Math.random() * PROXY_INSTANCES.length);
|
|
109
|
-
|
|
110
|
-
const proxy = PROXY_INSTANCES[rn];
|
|
111
|
-
|
|
112
|
-
if (options.verbose) {
|
|
113
|
-
console.log(`fetching ${url} using ${proxy}`);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const controller = new AbortController();
|
|
117
|
-
const timeout = setTimeout(() => {
|
|
118
|
-
controller.abort();
|
|
119
|
-
}, options.timeout || 30_000);
|
|
120
|
-
|
|
121
|
-
try {
|
|
122
|
-
const res = await fetch(proxy, {
|
|
123
|
-
signal: controller.signal,
|
|
124
|
-
...options,
|
|
125
|
-
headers: {
|
|
126
|
-
"fetch-url": url,
|
|
127
|
-
...options.headers
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
if (options.verbose) {
|
|
132
|
-
console.log(`DONE fetching ${url}`);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
clearTimeout(timeout);
|
|
136
|
-
|
|
137
|
-
return res;
|
|
138
|
-
} catch (fetchErr) {
|
|
139
|
-
clearTimeout(timeout);
|
|
140
|
-
|
|
141
|
-
if (fetchErr.name === "AbortError") {
|
|
142
|
-
return {
|
|
143
|
-
ok: false,
|
|
144
|
-
status: 408,
|
|
145
|
-
text: () => Promise.resolve("Timeout")
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return {
|
|
150
|
-
ok: false,
|
|
151
|
-
status: 500,
|
|
152
|
-
text: () => Promise.resolve(fetchErr.message)
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
module.exports = proxyFetch;
|
|
1
|
+
const fetch = require("node-fetch");
|
|
2
|
+
const AbortController = require("abort-controller");
|
|
3
|
+
|
|
4
|
+
const PROXY_INSTANCES = [
|
|
5
|
+
"https://dytsr8x71h.execute-api.us-east-1.amazonaws.com/", // 0
|
|
6
|
+
"https://mkn6g5z5le.execute-api.us-east-1.amazonaws.com/",
|
|
7
|
+
"https://26gzsf530c.execute-api.us-east-1.amazonaws.com/",
|
|
8
|
+
"https://v03g7u6z26.execute-api.us-east-1.amazonaws.com/",
|
|
9
|
+
"https://v39ebeocc1.execute-api.us-east-1.amazonaws.com/",
|
|
10
|
+
"https://hk9h3y9arb.execute-api.us-east-1.amazonaws.com/",
|
|
11
|
+
"https://7b15n2ht7l.execute-api.us-east-1.amazonaws.com/",
|
|
12
|
+
"https://8uhvhb5e53.execute-api.us-east-1.amazonaws.com/",
|
|
13
|
+
"https://7rtrukrk95.execute-api.us-east-1.amazonaws.com/",
|
|
14
|
+
"https://3qewm67hn1.execute-api.us-east-1.amazonaws.com/",
|
|
15
|
+
"https://556736tpce.execute-api.us-east-1.amazonaws.com/", // 10
|
|
16
|
+
"https://mshpz2z7d2.execute-api.us-east-1.amazonaws.com/",
|
|
17
|
+
"https://7bt6c7p3gf.execute-api.us-east-1.amazonaws.com/",
|
|
18
|
+
"https://oj5iu0u89d.execute-api.us-east-1.amazonaws.com/",
|
|
19
|
+
"https://b5ji9tgo5i.execute-api.us-east-1.amazonaws.com/",
|
|
20
|
+
"https://pzwpfi3vgk.execute-api.us-east-1.amazonaws.com/",
|
|
21
|
+
"https://4la30elqpg.execute-api.us-east-1.amazonaws.com/",
|
|
22
|
+
"https://ne5fiss07f.execute-api.us-east-1.amazonaws.com/",
|
|
23
|
+
"https://p93gw01mzk.execute-api.us-east-1.amazonaws.com/",
|
|
24
|
+
"https://8gidfkkw7f.execute-api.us-east-1.amazonaws.com/",
|
|
25
|
+
"https://o0rolv9t54.execute-api.us-east-1.amazonaws.com/", // 20
|
|
26
|
+
"https://rmm24o49f5.execute-api.us-east-1.amazonaws.com/",
|
|
27
|
+
"https://q44k3y3tll.execute-api.us-east-1.amazonaws.com/",
|
|
28
|
+
"https://ox84ynjgoj.execute-api.us-east-1.amazonaws.com/",
|
|
29
|
+
"https://ulb25ts130.execute-api.us-east-1.amazonaws.com/",
|
|
30
|
+
"https://uu3l7dmkai.execute-api.us-east-1.amazonaws.com/",
|
|
31
|
+
"https://o4x7lxh6pj.execute-api.us-east-1.amazonaws.com/",
|
|
32
|
+
"https://vc54yom9y4.execute-api.us-east-1.amazonaws.com/",
|
|
33
|
+
"https://jev66u1mhf.execute-api.us-east-1.amazonaws.com/",
|
|
34
|
+
"https://5da1kozme4.execute-api.us-east-1.amazonaws.com/",
|
|
35
|
+
"https://3qmuvrws8l.execute-api.us-east-1.amazonaws.com/", // 30
|
|
36
|
+
"https://33czg1g72l.execute-api.us-east-1.amazonaws.com/",
|
|
37
|
+
"https://72ofvtgltl.execute-api.us-east-1.amazonaws.com/",
|
|
38
|
+
"https://t0exa5kpl1.execute-api.us-east-1.amazonaws.com/",
|
|
39
|
+
"https://nwq3dkj7ql.execute-api.us-east-1.amazonaws.com/",
|
|
40
|
+
"https://9a9rgtalmc.execute-api.us-east-1.amazonaws.com/",
|
|
41
|
+
"https://uvvfu0upwc.execute-api.us-east-1.amazonaws.com/",
|
|
42
|
+
"https://aqv429acx6.execute-api.us-east-1.amazonaws.com/",
|
|
43
|
+
"https://vlvkahspic.execute-api.us-east-1.amazonaws.com/",
|
|
44
|
+
"https://vfyf73o40f.execute-api.us-east-1.amazonaws.com/",
|
|
45
|
+
"https://isovddqwik.execute-api.us-east-1.amazonaws.com/", // 40
|
|
46
|
+
"https://jjhhqlg789.execute-api.us-east-1.amazonaws.com/",
|
|
47
|
+
"https://ggrh0k8mfd.execute-api.us-east-1.amazonaws.com/",
|
|
48
|
+
"https://2fq9nfjwb3.execute-api.us-east-1.amazonaws.com/",
|
|
49
|
+
"https://jb16e6xz80.execute-api.us-east-1.amazonaws.com/",
|
|
50
|
+
"https://mk9uj2vzj6.execute-api.us-east-1.amazonaws.com/",
|
|
51
|
+
"https://ps7yr1dgu8.execute-api.us-east-1.amazonaws.com/",
|
|
52
|
+
"https://gl4co2x4ud.execute-api.us-east-1.amazonaws.com/",
|
|
53
|
+
"https://c6o0e7pra9.execute-api.us-east-1.amazonaws.com/",
|
|
54
|
+
"https://omokupco12.execute-api.us-east-1.amazonaws.com/",
|
|
55
|
+
"https://hwv5rhlgph.execute-api.us-east-1.amazonaws.com/", // 50
|
|
56
|
+
"https://8465ad223e.execute-api.us-east-1.amazonaws.com/",
|
|
57
|
+
"https://c6ssgeoj23.execute-api.us-east-1.amazonaws.com/",
|
|
58
|
+
"https://g8885ic96d.execute-api.us-east-1.amazonaws.com/",
|
|
59
|
+
"https://6rqvbiyfsl.execute-api.us-east-1.amazonaws.com/",
|
|
60
|
+
"https://4v9u56sk9g.execute-api.us-east-1.amazonaws.com/",
|
|
61
|
+
"https://fdra8xp8p4.execute-api.us-east-1.amazonaws.com/",
|
|
62
|
+
"https://lli6c9yt8a.execute-api.us-east-1.amazonaws.com/",
|
|
63
|
+
"https://n0vrpscg70.execute-api.us-east-1.amazonaws.com/",
|
|
64
|
+
"https://i4cjhmsxgh.execute-api.us-east-1.amazonaws.com/",
|
|
65
|
+
"https://j9s8hgctj8.execute-api.us-east-1.amazonaws.com/", // 60
|
|
66
|
+
"https://7fsuk56955.execute-api.us-east-1.amazonaws.com/",
|
|
67
|
+
"https://njmodl5qii.execute-api.us-east-1.amazonaws.com/",
|
|
68
|
+
"https://mxm7y4ehld.execute-api.us-east-1.amazonaws.com/",
|
|
69
|
+
"https://3cdpu56ss4.execute-api.us-east-1.amazonaws.com/",
|
|
70
|
+
"https://q81i7h2zb9.execute-api.us-east-1.amazonaws.com/",
|
|
71
|
+
"https://h4g6ass2o1.execute-api.us-east-1.amazonaws.com/",
|
|
72
|
+
"https://j42nkoonok.execute-api.us-east-1.amazonaws.com/",
|
|
73
|
+
"https://f2ac36s6b7.execute-api.us-east-1.amazonaws.com/",
|
|
74
|
+
"https://7gelmsgjzh.execute-api.us-east-1.amazonaws.com/",
|
|
75
|
+
"https://643y52s281.execute-api.us-east-1.amazonaws.com/", // 70
|
|
76
|
+
"https://mvlkkujr33.execute-api.us-east-1.amazonaws.com/",
|
|
77
|
+
"https://mdefho1x9l.execute-api.us-east-1.amazonaws.com/",
|
|
78
|
+
"https://n6dvg4pkz8.execute-api.us-east-1.amazonaws.com/",
|
|
79
|
+
"https://u0pvmukqzi.execute-api.us-east-1.amazonaws.com/",
|
|
80
|
+
"https://kwrvum76fb.execute-api.us-east-1.amazonaws.com/",
|
|
81
|
+
"https://u9pvcl1yjg.execute-api.us-east-1.amazonaws.com/",
|
|
82
|
+
"https://uwue37nm47.execute-api.us-east-1.amazonaws.com/",
|
|
83
|
+
"https://u4kewxo9ok.execute-api.us-east-1.amazonaws.com/",
|
|
84
|
+
"https://8wv9cqqkxk.execute-api.us-east-1.amazonaws.com/",
|
|
85
|
+
"https://bkhg2luwra.execute-api.us-east-1.amazonaws.com/", // 80
|
|
86
|
+
"https://eykfffi8id.execute-api.us-east-1.amazonaws.com/",
|
|
87
|
+
"https://6o9cyhjirk.execute-api.us-east-1.amazonaws.com/",
|
|
88
|
+
"https://ei1822av0a.execute-api.us-east-1.amazonaws.com/",
|
|
89
|
+
"https://c6g0dt40sa.execute-api.us-east-1.amazonaws.com/",
|
|
90
|
+
"https://4usww0c5o6.execute-api.us-east-1.amazonaws.com/",
|
|
91
|
+
"https://4zuimplfw9.execute-api.us-east-1.amazonaws.com/",
|
|
92
|
+
"https://1rm1s5nih8.execute-api.us-east-1.amazonaws.com/",
|
|
93
|
+
"https://00928llmcg.execute-api.us-east-1.amazonaws.com/",
|
|
94
|
+
"https://c1891ubva7.execute-api.us-east-1.amazonaws.com/",
|
|
95
|
+
"https://46en7n2sa5.execute-api.us-east-1.amazonaws.com/", // 90
|
|
96
|
+
"https://b99rerxnn4.execute-api.us-east-1.amazonaws.com/",
|
|
97
|
+
"https://swkx9wp64b.execute-api.us-east-1.amazonaws.com/",
|
|
98
|
+
"https://fsi7smizx7.execute-api.us-east-1.amazonaws.com/",
|
|
99
|
+
"https://62b5vzc2lc.execute-api.us-east-1.amazonaws.com/",
|
|
100
|
+
"https://dp51s8airb.execute-api.us-east-1.amazonaws.com/",
|
|
101
|
+
"https://mg17vjdpq9.execute-api.us-east-1.amazonaws.com/",
|
|
102
|
+
"https://jydmktw9tg.execute-api.us-east-1.amazonaws.com/",
|
|
103
|
+
"https://nir1xko0c8.execute-api.us-east-1.amazonaws.com/",
|
|
104
|
+
"https://xs59tyiizd.execute-api.us-east-1.amazonaws.com/" // 99
|
|
105
|
+
];
|
|
106
|
+
|
|
107
|
+
async function proxyFetch(url, options = {}) {
|
|
108
|
+
const rn = Math.floor(Math.random() * PROXY_INSTANCES.length);
|
|
109
|
+
|
|
110
|
+
const proxy = PROXY_INSTANCES[rn];
|
|
111
|
+
|
|
112
|
+
if (options.verbose) {
|
|
113
|
+
console.log(`fetching ${url} using ${proxy}`);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const controller = new AbortController();
|
|
117
|
+
const timeout = setTimeout(() => {
|
|
118
|
+
controller.abort();
|
|
119
|
+
}, options.timeout || 30_000);
|
|
120
|
+
|
|
121
|
+
try {
|
|
122
|
+
const res = await fetch(proxy, {
|
|
123
|
+
signal: controller.signal,
|
|
124
|
+
...options,
|
|
125
|
+
headers: {
|
|
126
|
+
"fetch-url": url,
|
|
127
|
+
...options.headers
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
if (options.verbose) {
|
|
132
|
+
console.log(`DONE fetching ${url}`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
clearTimeout(timeout);
|
|
136
|
+
|
|
137
|
+
return res;
|
|
138
|
+
} catch (fetchErr) {
|
|
139
|
+
clearTimeout(timeout);
|
|
140
|
+
|
|
141
|
+
if (fetchErr.name === "AbortError") {
|
|
142
|
+
return {
|
|
143
|
+
ok: false,
|
|
144
|
+
status: 408,
|
|
145
|
+
text: () => Promise.resolve("Timeout")
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
ok: false,
|
|
151
|
+
status: 500,
|
|
152
|
+
text: () => Promise.resolve(fetchErr.message)
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
module.exports = proxyFetch;
|
package/rateLimit.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
const fetch = require("node-fetch");
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Record the api access and return the rate limit result.
|
|
5
|
-
* @async
|
|
6
|
-
* @param {string} name - The name of the key.
|
|
7
|
-
* @param {number} unitTime - The sliding window for rate limiting, in seconds.
|
|
8
|
-
* @param {number} maxAccess - The total count of allowed accesses in a sliding window.
|
|
9
|
-
* @returns {Promise<boolean>} This request should be allowed or not.
|
|
10
|
-
*/
|
|
11
|
-
exports.isRateLimited = async (name, unitTime, maxAccess) => {
|
|
12
|
-
try {
|
|
13
|
-
const url = `https://rate-limit.certik-skynet.com?name=${name}&unitTime=${unitTime}&maxAccess=${maxAccess}`;
|
|
14
|
-
const response = await fetch(url);
|
|
15
|
-
const result = await response.json();
|
|
16
|
-
if (result.remaining > 0) return false;
|
|
17
|
-
return true;
|
|
18
|
-
} catch {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
1
|
+
const fetch = require("node-fetch");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Record the api access and return the rate limit result.
|
|
5
|
+
* @async
|
|
6
|
+
* @param {string} name - The name of the key.
|
|
7
|
+
* @param {number} unitTime - The sliding window for rate limiting, in seconds.
|
|
8
|
+
* @param {number} maxAccess - The total count of allowed accesses in a sliding window.
|
|
9
|
+
* @returns {Promise<boolean>} This request should be allowed or not.
|
|
10
|
+
*/
|
|
11
|
+
exports.isRateLimited = async (name, unitTime, maxAccess) => {
|
|
12
|
+
try {
|
|
13
|
+
const url = `https://rate-limit.certik-skynet.com?name=${name}&unitTime=${unitTime}&maxAccess=${maxAccess}`;
|
|
14
|
+
const response = await fetch(url);
|
|
15
|
+
const result = await response.json();
|
|
16
|
+
if (result.remaining > 0) return false;
|
|
17
|
+
return true;
|
|
18
|
+
} catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|