n8n-nodes-larkbase-v3
Version:
n8n node to connect with Larkbase API with UTF-8 support, date filtering, array filter values, text field processing, improved field type handling, pagination fixes, advanced data type conversion, proper date filtering with ExactDate format, updated node
109 lines • 4.19 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFieldMappingUi = exports.mapFieldsToOptions = exports.getAllTableFields = exports.getTableFields = void 0;
const axios_1 = __importDefault(require("axios"));
const n8n_workflow_1 = require("n8n-workflow");
async function getTableFields(accessToken, appToken, tableId, options = {}) {
const queryParams = new URLSearchParams();
if (options.view_id) {
queryParams.append('view_id', options.view_id);
}
if (options.text_field_as_array === true) {
queryParams.append('text_field_as_array', 'True');
}
if (options.page_token) {
queryParams.append('page_token', options.page_token);
}
const pageSize = options.page_size || 100;
queryParams.append('page_size', pageSize.toString());
const url = `https://open.larksuite.com/open-apis/bitable/v1/apps/${appToken}/tables/${tableId}/fields?${queryParams.toString()}`;
console.log('DEBUG - Get Fields Request:');
console.log('URL:', url);
const requestOptions = {
method: 'GET',
url,
headers: {
'Content-Type': 'application/json; charset=utf-8',
Authorization: `Bearer ${accessToken}`,
},
};
try {
const response = await axios_1.default.request(requestOptions);
console.log('DEBUG - Get Fields Response:');
console.log('Status:', response.status);
console.log('Data:', JSON.stringify(response.data, null, 2));
if (response.data.code !== 0) {
throw new Error(`Lỗi lấy fields: ${response.data.msg}`);
}
return response.data.data;
}
catch (error) {
if (axios_1.default.isAxiosError(error) && error.response) {
const errorMessage = error.response.data && error.response.data.msg
? error.response.data.msg
: error.message;
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Lỗi khi lấy fields: ${errorMessage}`);
}
throw error;
}
}
exports.getTableFields = getTableFields;
async function getAllTableFields(accessToken, appToken, tableId, options = {}) {
let hasMore = true;
let pageToken = '';
const allFields = [];
const pageSize = options.page_size || 100;
let iterationCount = 0;
const maxIterations = 10;
while (hasMore && iterationCount < maxIterations) {
iterationCount++;
const requestOptions = { ...options };
if (pageToken) {
requestOptions.page_token = pageToken;
}
requestOptions.page_size = pageSize;
const result = await getTableFields.call(this, accessToken, appToken, tableId, requestOptions);
if (result.items && Array.isArray(result.items)) {
allFields.push(...result.items);
}
hasMore = result.has_more;
pageToken = result.page_token || '';
if (hasMore && !pageToken) {
console.log('WARNING: has_more is true but no page_token provided, exiting loop');
break;
}
}
return allFields;
}
exports.getAllTableFields = getAllTableFields;
function mapFieldsToOptions(fields) {
return fields.map(field => ({
name: field.field_name,
value: field.field_id,
}));
}
exports.mapFieldsToOptions = mapFieldsToOptions;
function createFieldMappingUi(fields) {
return fields.map(field => {
const fieldParam = {
displayName: field.field_name,
name: field.field_id,
type: 'string',
default: '',
required: false,
description: `Map đến trường "${field.field_name}" trong Larkbase`,
};
if (field.ui_type) {
fieldParam.description += ` (${field.ui_type})`;
}
if (field.is_primary) {
fieldParam.description += ' - Primary Field';
}
return fieldParam;
});
}
exports.createFieldMappingUi = createFieldMappingUi;
//# sourceMappingURL=fields.js.map
;