mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
feat(Metabase Node): Add Metabase Node (#3033)
* Boilerplate with new node's version for metabse * Metabases MVP features * Added new credential for metabse, added custom auth for metabase * Fixed bug with one enpoint not working * Clean up code * Uniformised the renovate token * Made two example of responses for review * Fixed lint issues * Feature add datasources * Changed output from databases * Changed questions data output * Fixed issue when testing credentials with new node format * Add the possibility to get raw data * Removed handle for the metabase meta results, changed export's name * Add binary extraction for the result data * Fixed binary download issue * ⚡ Add preAuthentication method to credentials * Revert "Added new credential for metabse, added custom auth for metabase" This reverts commit 5f1b7607adb85d6ec897b184853bdfdbae77df6d. * Revert "Added new credential for metabse, added custom auth for metabase" This reverts commit 5f1b7607adb85d6ec897b184853bdfdbae77df6d. * Added preAuth and fixed autfixable linting rules * Fixed linting errors * Linting fixes * Remove / at the end of url, and add placeholder for cred url * Make export to Json retun only json and no binary * Fix lint issues * Add action and exception for lint rule * Remove unnecessary credential file * ⚡ Simplify and cleanup Co-authored-by: ricardo <ricardoespinoza105@gmail.com> Co-authored-by: Omar Ajoue <krynble@gmail.com> Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
This commit is contained in:
145
packages/nodes-base/nodes/Metabase/QuestionsDescription.ts
Normal file
145
packages/nodes-base/nodes/Metabase/QuestionsDescription.ts
Normal file
@@ -0,0 +1,145 @@
|
||||
import {
|
||||
IDataObject,
|
||||
IExecuteSingleFunctions,
|
||||
IN8nHttpFullResponse,
|
||||
INodeExecutionData,
|
||||
INodeProperties,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
export const questionsOperations: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Operation',
|
||||
name: 'operation',
|
||||
type: 'options',
|
||||
noDataExpression: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['questions'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Get',
|
||||
value: 'get',
|
||||
description: 'Get a specific question',
|
||||
routing: {
|
||||
request: {
|
||||
method: 'GET',
|
||||
url: '={{"/api/card/" + $parameter.questionId}}',
|
||||
},
|
||||
},
|
||||
action: 'Get a questions',
|
||||
},
|
||||
{
|
||||
name: 'Get All',
|
||||
value: 'getAll',
|
||||
description: 'Get all the questions',
|
||||
routing: {
|
||||
request: {
|
||||
method: 'GET',
|
||||
url: '/api/card/',
|
||||
},
|
||||
},
|
||||
action: 'Get all questions',
|
||||
},
|
||||
{
|
||||
name: 'Result Data',
|
||||
value: 'resultData',
|
||||
description: 'Return the result of the question to a specific file format',
|
||||
routing: {
|
||||
request: {
|
||||
method: 'POST',
|
||||
url: '={{"/api/card/" + $parameter.questionId + "/query/" + $parameter.format}}',
|
||||
returnFullResponse: true,
|
||||
encoding: 'arraybuffer',
|
||||
},
|
||||
output: {
|
||||
postReceive: [
|
||||
// @ts-ignore
|
||||
async function (
|
||||
this: IExecuteSingleFunctions,
|
||||
_items: INodeExecutionData[],
|
||||
response: IN8nHttpFullResponse,
|
||||
): Promise<INodeExecutionData[]> {
|
||||
const items = _items;
|
||||
const result: INodeExecutionData[] = [];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const newItem: INodeExecutionData = {
|
||||
json: items[i].json,
|
||||
binary: {},
|
||||
};
|
||||
|
||||
if (items[i].binary !== undefined) {
|
||||
Object.assign(newItem.binary, items[i].binary);
|
||||
}
|
||||
items[i] = newItem;
|
||||
if (this.getNode().parameters.format === 'json') {
|
||||
items[i].json = JSON.parse(
|
||||
items[i].json as unknown as string,
|
||||
)[0] as unknown as IDataObject;
|
||||
console.log(items[i].json);
|
||||
delete items[i].binary;
|
||||
} else {
|
||||
items[i].binary!['data'] = await this.helpers.prepareBinaryData(
|
||||
response.body as Buffer,
|
||||
'data',
|
||||
response.headers['content-type'],
|
||||
);
|
||||
}
|
||||
result.push(items[i]);
|
||||
}
|
||||
return result;
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
action: 'Result Data a questions',
|
||||
},
|
||||
],
|
||||
default: 'getAll',
|
||||
},
|
||||
];
|
||||
|
||||
export const questionsFields: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Question ID',
|
||||
name: 'questionId',
|
||||
type: 'string',
|
||||
required: true,
|
||||
placeholder: '0',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['questions'],
|
||||
operation: ['get', 'resultData'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
},
|
||||
{
|
||||
displayName: 'Format',
|
||||
name: 'format',
|
||||
type: 'options',
|
||||
required: true,
|
||||
options: [
|
||||
{
|
||||
name: 'CSV',
|
||||
value: 'csv',
|
||||
},
|
||||
{
|
||||
name: 'JSON',
|
||||
value: 'json',
|
||||
},
|
||||
{
|
||||
name: 'XLSX',
|
||||
value: 'xlsx',
|
||||
},
|
||||
],
|
||||
default: 'csv',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['questions'],
|
||||
operation: ['resultData'],
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
Reference in New Issue
Block a user