import type { IExecuteFunctions, IHookFunctions, ILoadOptionsFunctions } from 'n8n-workflow'; import type { IDataObject, IHttpRequestMethods, IHttpRequestOptions } from 'n8n-workflow'; export async function strikeApiRequest( this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, method: IHttpRequestMethods, endpoint: string, body: IDataObject = {}, query: IDataObject = {}, ): Promise { const credentials = await this.getCredentials('strikeApi'); const baseUrl = credentials.environment === 'sandbox' ? 'https://api.strike.me' : 'https://api.strike.me'; const options: IHttpRequestOptions = { method, url: `${baseUrl}/v1${endpoint}`, headers: { 'Content-Type': 'application/json', }, body, qs: query, json: true, }; if (Object.keys(body).length === 0) { delete options.body; } if (Object.keys(query).length === 0) { delete options.qs; } return this.helpers.requestWithAuthentication.call(this, 'strikeApi', options); } export async function strikeApiRequestAllItems( this: IExecuteFunctions | ILoadOptionsFunctions, method: IHttpRequestMethods, endpoint: string, body: IDataObject = {}, query: IDataObject = {}, ): Promise { const returnData: any[] = []; let responseData; query.$top = query.$top || 100; query.$skip = 0; do { responseData = await strikeApiRequest.call(this, method, endpoint, body, query); const items = responseData.items || responseData; if (Array.isArray(items)) { returnData.push(...items); } query.$skip += query.$top as number; } while (responseData.items && responseData.items.length === query.$top); return returnData; }