-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbulk_verify.js
More file actions
123 lines (103 loc) · 2.98 KB
/
bulk_verify.js
File metadata and controls
123 lines (103 loc) · 2.98 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* Bulk verify emails using the OrbiSearch API.
*/
const API_KEY = "your_api_key_here";
const BASE_URL = "https://api.orbisearch.com";
/**
* Submit a bulk verification job.
* @param {string[]} emails - Array of email addresses
* @returns {Promise<object>} Job submission response
*/
async function submitBulkJob(emails) {
const response = await fetch(`${BASE_URL}/v1/bulk`, {
method: "POST",
headers: {
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify(emails),
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
return response.json();
}
/**
* Get the status of a bulk job.
* @param {string} jobId - Job ID
* @returns {Promise<object>} Job status
*/
async function getJobStatus(jobId) {
const response = await fetch(`${BASE_URL}/v1/bulk/${jobId}`, {
headers: { "X-API-Key": API_KEY },
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
return response.json();
}
/**
* Get the results of a completed bulk job.
* @param {string} jobId - Job ID
* @returns {Promise<object>} Job results
*/
async function getJobResults(jobId) {
const response = await fetch(`${BASE_URL}/v1/bulk/${jobId}/results`, {
headers: { "X-API-Key": API_KEY },
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
return response.json();
}
/**
* Sleep for a given number of milliseconds.
* @param {number} ms - Milliseconds to sleep
*/
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
/**
* Verify a list of emails and wait for results.
* @param {string[]} emails - Array of email addresses
* @param {number} pollInterval - Seconds between status checks
* @returns {Promise<object[]>} Array of verification results
*/
async function verifyBulk(emails, pollInterval = 5) {
// Submit the job
const job = await submitBulkJob(emails);
console.log(`Job submitted: ${job.job_id}`);
console.log(`Total emails: ${job.total_emails}`);
console.log(`Estimated cost: ${job.estimated_cost} credits`);
// Poll for completion
while (true) {
const status = await getJobStatus(job.job_id);
console.log(`Status: ${status.status} (${status.emails_processed}/${status.total_emails})`);
if (status.status === "complete") {
break;
} else if (status.status === "failed") {
throw new Error("Job failed");
}
await sleep(pollInterval * 1000);
}
// Get results
const results = await getJobResults(job.job_id);
return results.results;
}
// Example usage
async function main() {
const emails = [
"john@company.com",
"jane@company.com",
"info@company.com",
];
try {
const results = await verifyBulk(emails);
for (const result of results) {
console.log(`${result.email}: ${result.status} (${result.substatus || "n/a"})`);
}
} catch (error) {
console.error("Error:", error.message);
}
}
main();