import { GraphQLClient, gql } from 'graphql-request';
import fs from 'fs';
import dotenv from 'dotenv';
dotenv.config();
const client = new GraphQLClient(process.env.CONSUELO_GRAPHQL_URL, {
headers: {
authorization: `Bearer ${process.env.CONSUELO_API_KEY}`,
},
});
const EXPORT_PEOPLE = gql`
query ExportPeople($first: Int!, $after: String) {
people(first: $first, after: $after) {
edges {
node {
id
email
firstName
lastName
company {
id
name
industry
}
createdAt
updatedAt
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
`;
async function exportAllPeople() {
const records = [];
let hasNextPage = true;
let after = null;
while (hasNextPage) {
const data = await client.request(EXPORT_PEOPLE, {
first: 60,
after,
});
records.push(...data.people.edges.map(e => e.node));
hasNextPage = data.people.pageInfo.hasNextPage;
after = data.people.pageInfo.endCursor;
console.log(`Exported ${records.length} records...`);
// Rate limit protection
await new Promise(resolve => setTimeout(resolve, 100));
}
return records;
}
async function exportToCSV(records, filename) {
const headers = Object.keys(records[0]).join(',');
const rows = records.map(r =>
Object.values(r).map(v =>
typeof v === 'object' ? JSON.stringify(v) : v
).join(',')
);
const csv = [headers, ...rows].join('\n');
fs.writeFileSync(filename, csv);
console.log(`Exported to ${filename}`);
}
async function main() {
const records = await exportAllPeople();
await exportToCSV(records, 'people-export.csv');
}
main().catch(console.error);