knack-queries
Version:
A library for a internal functions
48 lines (43 loc) • 1.58 kB
text/typescript
import axios, {AxiosInstance} from 'axios';
export class Knack {
private knackAPI: AxiosInstance;
constructor(appId: string, apiKey: string, baseURL='https://api.knack.com/v1/'){
this.knackAPI = axios.create({
baseURL,
headers: {
'X-Knack-Application-Id': appId,
'X-Knack-REST-API-KEY': apiKey
}
});
}
/**
* It downloads all the records from a Knack object, and returns them as an array
* @param filters - This is an array of objects that contain the filter parameters.
* @returns An array of objects.
*/
async getAllData({objectName,filters}) {
const { data: { total_pages, total_records } } = await this.knackAPI.get(
`objects/${objectName}/records?filters=${JSON.stringify(filters)}&rows_per_page=1000`
);
console.log(`Starting object ${objectName}`);
console.log(`Total number of pages: ${total_pages}`);
console.log(`Total records ${total_records}`);
const allData = [];
for (let i = 1; i <= total_pages; i++) {
const { data: { records } } = await this.knackAPI.get(
`objects/${objectName}/records?filters=${JSON.stringify(filters)}&rows_per_page=1000&page=${i}`
);
console.log(`Downloading page ${i}`);
allData.push(...records);
}
console.log(`Download complete. Total number of records: ${allData.length}`);
console.log(`Finishing object ${objectName}`);
return allData;
}
async getDataById({objectName, id}){
const {data} = await this.knackAPI.get(
`objects/${objectName}/records/${id}`
);
return data;
}
}