mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-14 00:24:07 -08:00
134 lines
3.3 KiB
TypeScript
134 lines
3.3 KiB
TypeScript
import type { IDataObject, IExecuteFunctions } from 'n8n-workflow';
|
|
import { BINARY_ENCODING, NodeOperationError } from 'n8n-workflow';
|
|
|
|
import type { Readable } from 'stream';
|
|
import { RLC_DRIVE_DEFAULT, RLC_FOLDER_DEFAULT, UPLOAD_CHUNK_SIZE } from './interfaces';
|
|
|
|
export function prepareQueryString(fields: string[] | undefined) {
|
|
let queryFields = 'id, name';
|
|
if (fields) {
|
|
if (fields.includes('*')) {
|
|
queryFields = '*';
|
|
} else {
|
|
queryFields = fields.join(', ');
|
|
}
|
|
}
|
|
return queryFields;
|
|
}
|
|
|
|
export async function getItemBinaryData(
|
|
this: IExecuteFunctions,
|
|
inputDataFieldName: string,
|
|
i: number,
|
|
chunkSize = UPLOAD_CHUNK_SIZE,
|
|
) {
|
|
let contentLength: number;
|
|
let fileContent: Buffer | Readable;
|
|
let originalFilename: string | undefined;
|
|
let mimeType;
|
|
|
|
if (!inputDataFieldName) {
|
|
throw new NodeOperationError(
|
|
this.getNode(),
|
|
'The name of the input field containing the binary file data must be set',
|
|
{
|
|
itemIndex: i,
|
|
},
|
|
);
|
|
}
|
|
const binaryData = this.helpers.assertBinaryData(i, inputDataFieldName);
|
|
|
|
if (binaryData.id) {
|
|
// Stream data in 256KB chunks, and upload the via the resumable upload api
|
|
fileContent = this.helpers.getBinaryStream(binaryData.id, chunkSize);
|
|
const metadata = await this.helpers.getBinaryMetadata(binaryData.id);
|
|
contentLength = metadata.fileSize;
|
|
originalFilename = metadata.fileName;
|
|
if (metadata.mimeType) mimeType = binaryData.mimeType;
|
|
} else {
|
|
fileContent = Buffer.from(binaryData.data, BINARY_ENCODING);
|
|
contentLength = fileContent.length;
|
|
originalFilename = binaryData.fileName;
|
|
mimeType = binaryData.mimeType;
|
|
}
|
|
|
|
return {
|
|
contentLength,
|
|
fileContent,
|
|
originalFilename,
|
|
mimeType,
|
|
};
|
|
}
|
|
|
|
export function setFileProperties(body: IDataObject, options: IDataObject) {
|
|
if (options.propertiesUi) {
|
|
const values = ((options.propertiesUi as IDataObject).propertyValues as IDataObject[]) || [];
|
|
|
|
body.properties = values.reduce(
|
|
(acc, value) => Object.assign(acc, { [`${value.key}`]: value.value }),
|
|
{} as IDataObject,
|
|
);
|
|
}
|
|
|
|
if (options.appPropertiesUi) {
|
|
const values =
|
|
((options.appPropertiesUi as IDataObject).appPropertyValues as IDataObject[]) || [];
|
|
|
|
body.appProperties = values.reduce(
|
|
(acc, value) => Object.assign(acc, { [`${value.key}`]: value.value }),
|
|
{} as IDataObject,
|
|
);
|
|
}
|
|
|
|
return body;
|
|
}
|
|
|
|
export function setUpdateCommonParams(qs: IDataObject, options: IDataObject) {
|
|
if (options.keepRevisionForever) {
|
|
qs.keepRevisionForever = options.keepRevisionForever;
|
|
}
|
|
|
|
if (options.ocrLanguage) {
|
|
qs.ocrLanguage = options.ocrLanguage;
|
|
}
|
|
|
|
if (options.useContentAsIndexableText) {
|
|
qs.useContentAsIndexableText = options.useContentAsIndexableText;
|
|
}
|
|
|
|
return qs;
|
|
}
|
|
|
|
export function updateDriveScopes(
|
|
qs: IDataObject,
|
|
driveId: string,
|
|
defaultDrive = RLC_DRIVE_DEFAULT,
|
|
) {
|
|
if (driveId) {
|
|
if (driveId === defaultDrive) {
|
|
qs.includeItemsFromAllDrives = false;
|
|
qs.supportsAllDrives = false;
|
|
qs.spaces = 'appDataFolder, drive';
|
|
qs.corpora = 'user';
|
|
} else {
|
|
qs.driveId = driveId;
|
|
qs.corpora = 'drive';
|
|
}
|
|
}
|
|
}
|
|
|
|
export function setParentFolder(
|
|
folderId: string,
|
|
driveId: string,
|
|
folderIdDefault = RLC_FOLDER_DEFAULT,
|
|
driveIdDefault = RLC_DRIVE_DEFAULT,
|
|
) {
|
|
if (folderId !== folderIdDefault) {
|
|
return folderId;
|
|
} else if (driveId && driveId !== driveIdDefault) {
|
|
return driveId;
|
|
} else {
|
|
return 'root';
|
|
}
|
|
}
|