-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
85 lines (69 loc) · 2.07 KB
/
index.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import * as dotenv from "dotenv";
import axios from "axios";
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const baseUrl = "https://graph.facebook.com/v19.0/me";
const params = {
fields: "id,name,email",
};
dotenv.config();
interface FacebookUserData {
id: string;
name: string;
last_name: string;
}
console.info(process.env.FACEBOOK_ACCESS_TOKEN);
const accessToken = process.env.FACEBOOK_ACCESS_TOKEN;
let retryAfter = 0; // Stores the retry delay from the last error
async function makeApiCall(endpoint: string, params: object): Promise<any> {
let retryCount = 0;
const maxRetries = 5;
const backoffFactor = 2;
try {
const response = await axios.get(endpoint, {
params,
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
retryAfter = 0;
return response.data;
} catch (error) {
let itemData = error.response.data;
console.info(itemData.error);
if (
itemData.error &&
(itemData.error.code === 190 ||
itemData.error.code === 4 ||
itemData.error.code === 17 ||
itemData.error.code === 613 ||
error.response.status === 429)
) {
// Handle rate limiting or other relevant errors (e.g., 429)
console.log("\u26A1 API Meet " + itemData.error.message);
retryCount++;
if (retryCount <= maxRetries) {
retryAfter = Math.pow(backoffFactor, retryCount - 1) * 1000;
} else {
console.error("Maximum number of retries exceeded");
}
} else {
// Log other errors and consider handling them differently
console.error(error.response);
}
}
return new Promise((resolve) => setTimeout(resolve, retryAfter));
}
async function run() {
while (true) {
const responsePromise = makeApiCall(baseUrl, params);
await responsePromise;
if (responsePromise.then) {
const data = await responsePromise;
if (data) {
console.log(data);
}
}
await delay(2000);
}
}
run();