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
93 lines • 4.07 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.batchUpdateChunked = exports.batchUpdate = void 0;
const axios_1 = __importDefault(require("axios"));
const n8n_workflow_1 = require("n8n-workflow");
function cleanTextFields(data) {
if (Array.isArray(data)) {
return data.map(item => cleanTextFields(item));
}
const result = {};
if (data.fields && typeof data.fields === 'object' && !Array.isArray(data.fields)) {
const cleanedFields = {};
for (const [key, value] of Object.entries(data.fields)) {
if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object' && value[0].type === 'text') {
cleanedFields[key] = value.map(item => item.text).join('');
}
else {
cleanedFields[key] = value;
}
}
result.fields = cleanedFields;
}
else {
result.fields = data.fields;
}
for (const [key, value] of Object.entries(data)) {
if (key !== 'fields') {
result[key] = value;
}
}
return result;
}
async function batchUpdate(accessToken, appToken, tableId, options) {
var _a, _b, _c, _d, _e;
const url = `https://open.larksuite.com/open-apis/bitable/v1/apps/${appToken}/tables/${tableId}/records/batch_update`;
console.log('DEBUG - Batch Update Request:');
console.log('URL:', url);
console.log('Options:', JSON.stringify(options, null, 2));
const requestOptions = {
method: 'POST',
url,
headers: {
'Content-Type': 'application/json; charset=utf-8',
Authorization: `Bearer ${accessToken}`,
},
data: options,
};
try {
const response = await axios_1.default.request(requestOptions);
console.log('DEBUG - Batch Update 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 batch update: ${response.data.msg}`);
}
const cleanedData = { ...response.data.data };
if (cleanedData.records && Array.isArray(cleanedData.records)) {
cleanedData.records = cleanTextFields(cleanedData.records);
}
return cleanedData;
}
catch (error) {
console.error('DEBUG - Batch Update Error:');
if (axios_1.default.isAxiosError(error)) {
console.error('Status:', (_a = error.response) === null || _a === void 0 ? void 0 : _a.status);
console.error('Status Text:', (_b = error.response) === null || _b === void 0 ? void 0 : _b.statusText);
console.error('Response Data:', JSON.stringify((_c = error.response) === null || _c === void 0 ? void 0 : _c.data, null, 2));
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Lỗi batch update: ${error.message} - Status: ${(_d = error.response) === null || _d === void 0 ? void 0 : _d.status} - Message: ${JSON.stringify((_e = error.response) === null || _e === void 0 ? void 0 : _e.data)}`, { itemIndex: 0 });
}
console.error('Error:', error);
throw error;
}
}
exports.batchUpdate = batchUpdate;
async function batchUpdateChunked(accessToken, appToken, tableId, records, chunkSize = 500) {
const allUpdatedRecords = [];
for (let i = 0; i < records.length; i += chunkSize) {
const chunk = records.slice(i, i + chunkSize);
const options = {
records: chunk,
};
const response = await batchUpdate.call(this, accessToken, appToken, tableId, options);
if (response.records && Array.isArray(response.records)) {
allUpdatedRecords.push(...response.records);
}
}
return allUpdatedRecords;
}
exports.batchUpdateChunked = batchUpdateChunked;
//# sourceMappingURL=batchUpdate.js.map
;