@k03mad/request 2.2.0 → 3.0.0
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/app/lib/queue.js +30 -36
- package/app/lib/request.js +11 -4
- package/package.json +1 -1
package/app/lib/queue.js
CHANGED
|
@@ -3,26 +3,24 @@ import PQueue from 'p-queue';
|
|
|
3
3
|
|
|
4
4
|
const debug = _debug('mad:queue');
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const intervals = {
|
|
7
|
+
concurrency: num => ({concurrency: num}),
|
|
8
|
+
rpm: num => ({intervalCap: num, interval: 60_000}),
|
|
9
|
+
rps: num => ({intervalCap: num, interval: 1000}),
|
|
10
|
+
};
|
|
8
11
|
|
|
9
|
-
//
|
|
10
|
-
// second level — method
|
|
11
|
-
// third level — p-queue options
|
|
12
|
+
// host: p-queue options
|
|
12
13
|
const requestQueue = {
|
|
13
|
-
'*':
|
|
14
|
-
'*': concurrency(3),
|
|
15
|
-
},
|
|
14
|
+
'*': intervals.concurrency(3),
|
|
16
15
|
};
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
18
|
* @param {string} host
|
|
20
|
-
* @param {string} method
|
|
21
19
|
* @param {object} opts
|
|
22
20
|
* @returns {object}
|
|
23
21
|
*/
|
|
24
|
-
const getLoggedQueue = (host,
|
|
25
|
-
const queue = requestQueue[host]
|
|
22
|
+
const getLoggedQueue = (host, opts) => {
|
|
23
|
+
const queue = requestQueue[host];
|
|
26
24
|
|
|
27
25
|
queue.on('active', () => {
|
|
28
26
|
const {pending, size} = queue;
|
|
@@ -32,9 +30,7 @@ const getLoggedQueue = (host, method, opts) => {
|
|
|
32
30
|
? `${concurrent} concurrent`
|
|
33
31
|
: `${intervalCap} rp ${interval} ms`;
|
|
34
32
|
|
|
35
|
-
const logMessage = `[${
|
|
36
|
-
method === '*' ? '' : `${method}: `
|
|
37
|
-
}${host}] ${parallel} | queue: ${size} | running: ${pending}`;
|
|
33
|
+
const logMessage = `[${host}] ${parallel} | queue: ${size} | running: ${pending}`;
|
|
38
34
|
|
|
39
35
|
debug(logMessage);
|
|
40
36
|
});
|
|
@@ -44,35 +40,33 @@ const getLoggedQueue = (host, method, opts) => {
|
|
|
44
40
|
|
|
45
41
|
/**
|
|
46
42
|
* @param {string} host
|
|
47
|
-
* @param {
|
|
43
|
+
* @param {object} params
|
|
44
|
+
* @param {number} params.concurrency
|
|
45
|
+
* @param {number} params.rpm
|
|
46
|
+
* @param {number} params.rps
|
|
48
47
|
* @returns {object}
|
|
49
48
|
*/
|
|
50
|
-
export default (host,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
49
|
+
export default (host, params) => {
|
|
50
|
+
if (requestQueue[host]?._events) {
|
|
51
|
+
return requestQueue[host];
|
|
52
|
+
}
|
|
55
53
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
if (Object.keys(params).length > 0) {
|
|
55
|
+
for (const [key, value] of Object.entries(params)) {
|
|
56
|
+
if (intervals[key]) {
|
|
57
|
+
requestQueue[host] = intervals[key](value);
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
if (requestQueue[host]) {
|
|
64
|
-
const opts = requestQueue[
|
|
65
|
-
requestQueue[host]
|
|
66
|
-
return getLoggedQueue(host,
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (requestQueue['*'][method]) {
|
|
70
|
-
const opts = requestQueue['*'][method];
|
|
71
|
-
requestQueue[host] = {[method]: new PQueue(opts)};
|
|
72
|
-
return getLoggedQueue(host, method, opts);
|
|
64
|
+
const opts = requestQueue[host];
|
|
65
|
+
requestQueue[host] = new PQueue(opts);
|
|
66
|
+
return getLoggedQueue(host, opts);
|
|
73
67
|
}
|
|
74
68
|
|
|
75
|
-
const opts = requestQueue['*']
|
|
76
|
-
requestQueue[host] =
|
|
77
|
-
return getLoggedQueue(host,
|
|
69
|
+
const opts = requestQueue['*'];
|
|
70
|
+
requestQueue[host] = new PQueue(opts);
|
|
71
|
+
return getLoggedQueue(host, opts);
|
|
78
72
|
};
|
package/app/lib/request.js
CHANGED
|
@@ -84,10 +84,14 @@ const sendRequest = async (url, opts) => {
|
|
|
84
84
|
/**
|
|
85
85
|
* @param {string} url
|
|
86
86
|
* @param {object} [opts]
|
|
87
|
+
* @param {object} [params]
|
|
88
|
+
* @param {number} [params.concurrency]
|
|
89
|
+
* @param {number} [params.rpm]
|
|
90
|
+
* @param {number} [params.rps]
|
|
87
91
|
* @returns {Promise<object>}
|
|
88
92
|
*/
|
|
89
|
-
export const request = (url, opts = {}) => {
|
|
90
|
-
const queue = getQueue(new URL(url).host,
|
|
93
|
+
export const request = (url, opts = {}, params = {}) => {
|
|
94
|
+
const queue = getQueue(new URL(url).host, params);
|
|
91
95
|
return queue.add(() => sendRequest(url, opts));
|
|
92
96
|
};
|
|
93
97
|
|
|
@@ -97,10 +101,13 @@ export const request = (url, opts = {}) => {
|
|
|
97
101
|
* @param {object} [params]
|
|
98
102
|
* @param {number} [params.expire] seconds
|
|
99
103
|
* @param {object} [params.cacheBy]
|
|
104
|
+
* @param {number} [params.concurrency]
|
|
105
|
+
* @param {number} [params.rpm]
|
|
106
|
+
* @param {number} [params.rps]
|
|
100
107
|
* @returns {Promise<object>}
|
|
101
108
|
*/
|
|
102
|
-
export const requestCache = (url, opts = {}, {cacheBy, expire = 43_200} = {}) => {
|
|
103
|
-
const queue = getQueue(new URL(url).host,
|
|
109
|
+
export const requestCache = (url, opts = {}, {cacheBy, expire = 43_200, ...params} = {}) => {
|
|
110
|
+
const queue = getQueue(new URL(url).host, params);
|
|
104
111
|
|
|
105
112
|
return queue.add(async () => {
|
|
106
113
|
const cacheKey = `${url}::${JSON.stringify(cacheBy || opts)}`;
|