n8n-nodes-base
Version:
Base nodes of n8n
136 lines • 4.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TableFieldMapper = exports.toOptions = void 0;
exports.baserowApiRequest = baserowApiRequest;
exports.baserowApiRequestAllItems = baserowApiRequestAllItems;
exports.getJwtToken = getJwtToken;
exports.getFieldNamesAndIds = getFieldNamesAndIds;
const n8n_workflow_1 = require("n8n-workflow");
/**
* Make a request to Baserow API.
*/
async function baserowApiRequest(method, endpoint, jwtToken, body = {}, qs = {}) {
const credentials = await this.getCredentials('baserowApi');
const options = {
headers: {
Authorization: `JWT ${jwtToken}`,
},
method,
body,
qs,
uri: `${credentials.host}${endpoint}`,
json: true,
};
if (Object.keys(qs).length === 0) {
delete options.qs;
}
if (Object.keys(body).length === 0) {
delete options.body;
}
try {
return await this.helpers.request(options);
}
catch (error) {
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
}
}
/**
* Get all results from a paginated query to Baserow API.
*/
async function baserowApiRequestAllItems(method, endpoint, jwtToken, body, qs = {}) {
const returnData = [];
let responseData;
qs.page = 1;
qs.size = 100;
const returnAll = this.getNodeParameter('returnAll', 0, false);
const limit = this.getNodeParameter('limit', 0, 0);
do {
responseData = await baserowApiRequest.call(this, method, endpoint, jwtToken, body, qs);
returnData.push(...responseData.results);
if (!returnAll && returnData.length > limit) {
return returnData.slice(0, limit);
}
qs.page += 1;
} while (responseData.next !== null);
return returnData;
}
/**
* Get a JWT token based on Baserow account username and password.
*/
async function getJwtToken({ username, password, host }) {
const options = {
method: 'POST',
body: {
username,
password,
},
uri: `${host}/api/user/token-auth/`,
json: true,
};
try {
const { token } = (await this.helpers.request(options));
return token;
}
catch (error) {
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
}
}
async function getFieldNamesAndIds(tableId, jwtToken) {
const endpoint = `/api/database/fields/table/${tableId}/`;
const response = (await baserowApiRequest.call(this, 'GET', endpoint, jwtToken));
return {
names: response.map((field) => field.name),
ids: response.map((field) => `field_${field.id}`),
};
}
const toOptions = (items) => items.map(({ name, id }) => ({ name, value: id }));
exports.toOptions = toOptions;
/**
* Responsible for mapping field IDs `field_n` to names and vice versa.
*/
class TableFieldMapper {
nameToIdMapping = {};
idToNameMapping = {};
mapIds = true;
async getTableFields(table, jwtToken) {
const endpoint = `/api/database/fields/table/${table}/`;
return await baserowApiRequest.call(this, 'GET', endpoint, jwtToken);
}
createMappings(tableFields) {
this.nameToIdMapping = this.createNameToIdMapping(tableFields);
this.idToNameMapping = this.createIdToNameMapping(tableFields);
}
createIdToNameMapping(responseData) {
return responseData.reduce((acc, cur) => {
acc[`field_${cur.id}`] = cur.name;
return acc;
}, {});
}
createNameToIdMapping(responseData) {
return responseData.reduce((acc, cur) => {
acc[cur.name] = `field_${cur.id}`;
return acc;
}, {});
}
setField(field) {
return this.mapIds ? field : (this.nameToIdMapping[field] ?? field);
}
idsToNames(obj) {
Object.entries(obj).forEach(([key, value]) => {
if (this.idToNameMapping[key] !== undefined) {
delete obj[key];
obj[this.idToNameMapping[key]] = value;
}
});
}
namesToIds(obj) {
Object.entries(obj).forEach(([key, value]) => {
if (this.nameToIdMapping[key] !== undefined) {
delete obj[key];
obj[this.nameToIdMapping[key]] = value;
}
});
}
}
exports.TableFieldMapper = TableFieldMapper;
//# sourceMappingURL=GenericFunctions.js.map