n8n-nodes-base
Version:
Base nodes of n8n
462 lines • 24.7 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NotionV1 = void 0;
const moment_timezone_1 = __importDefault(require("moment-timezone"));
const VersionDescription_1 = require("./VersionDescription");
const GenericFunctions_1 = require("../shared/GenericFunctions");
const methods_1 = require("../shared/methods");
class NotionV1 {
description;
constructor(baseDescription) {
this.description = {
...baseDescription,
...VersionDescription_1.versionDescription,
};
}
methods = {
listSearch: methods_1.listSearch,
loadOptions: {
async getDatabaseProperties() {
const returnData = [];
const databaseId = this.getCurrentNodeParameter('databaseId', {
extractValue: true,
});
const { properties } = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/databases/${databaseId}`);
for (const key of Object.keys(properties)) {
//remove parameters that cannot be set from the API.
if (![
'created_time',
'last_edited_time',
'created_by',
'last_edited_by',
'formula',
'files',
'rollup',
].includes(properties[key].type)) {
returnData.push({
name: `${key} - (${properties[key].type})`,
value: `${key}|${properties[key].type}`,
});
}
}
returnData.sort((a, b) => {
if (a.name.toLocaleLowerCase() < b.name.toLocaleLowerCase()) {
return -1;
}
if (a.name.toLocaleLowerCase() > b.name.toLocaleLowerCase()) {
return 1;
}
return 0;
});
return returnData;
},
async getFilterProperties() {
const returnData = [];
const databaseId = this.getCurrentNodeParameter('databaseId', {
extractValue: true,
});
const { properties } = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/databases/${databaseId}`);
for (const key of Object.keys(properties)) {
returnData.push({
name: `${key} - (${properties[key].type})`,
value: `${key}|${properties[key].type}`,
});
}
returnData.sort((a, b) => {
if (a.name.toLocaleLowerCase() < b.name.toLocaleLowerCase()) {
return -1;
}
if (a.name.toLocaleLowerCase() > b.name.toLocaleLowerCase()) {
return 1;
}
return 0;
});
return returnData;
},
async getBlockTypes() {
return (0, GenericFunctions_1.getBlockTypesOptions)();
},
async getPropertySelectValues() {
const [name, type] = this.getCurrentNodeParameter('&key').split('|');
const databaseId = this.getCurrentNodeParameter('databaseId', {
extractValue: true,
});
const resource = this.getCurrentNodeParameter('resource');
const operation = this.getCurrentNodeParameter('operation');
const { properties } = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/databases/${databaseId}`);
if (resource === 'databasePage') {
if (['multi_select', 'select'].includes(type) && operation === 'getAll') {
return properties[name][type].options.map((option) => ({
name: option.name,
value: option.name,
}));
}
else if (['multi_select'].includes(type) && ['create', 'update'].includes(operation)) {
return properties[name][type].options.map((option) => ({
name: option.name,
value: option.name,
}));
}
}
return properties[name][type].options.map((option) => ({
name: option.name,
value: option.id,
}));
},
async getUsers() {
const returnData = [];
const users = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'GET', '/users');
for (const user of users) {
if (user.type === 'person') {
returnData.push({
name: user.name,
value: user.id,
});
}
}
return returnData;
},
async getDatabaseIdFromPage() {
const returnData = [];
const pageId = (0, GenericFunctions_1.extractPageId)(this.getCurrentNodeParameter('pageId', { extractValue: true }));
const { parent: { database_id: databaseId }, } = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/pages/${pageId}`);
const { properties } = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/databases/${databaseId}`);
for (const key of Object.keys(properties)) {
//remove parameters that cannot be set from the API.
if (![
'created_time',
'last_edited_time',
'created_by',
'last_edited_by',
'formula',
'files',
].includes(properties[key].type)) {
returnData.push({
name: `${key} - (${properties[key].type})`,
value: `${key}|${properties[key].type}`,
});
}
}
returnData.sort((a, b) => {
if (a.name.toLocaleLowerCase() < b.name.toLocaleLowerCase()) {
return -1;
}
if (a.name.toLocaleLowerCase() > b.name.toLocaleLowerCase()) {
return 1;
}
return 0;
});
return returnData;
},
async getDatabaseOptionsFromPage() {
const pageId = (0, GenericFunctions_1.extractPageId)(this.getCurrentNodeParameter('pageId', { extractValue: true }));
const [name, type] = this.getCurrentNodeParameter('&key').split('|');
const { parent: { database_id: databaseId }, } = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/pages/${pageId}`);
const { properties } = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/databases/${databaseId}`);
return properties[name][type].options.map((option) => ({
name: option.name,
value: option.id,
}));
},
// Get all the timezones to display them to user so that they can
// select them easily
async getTimezones() {
const returnData = [];
for (const timezone of moment_timezone_1.default.tz.names()) {
const timezoneName = timezone;
const timezoneId = timezone;
returnData.push({
name: timezoneName,
value: timezoneId,
});
}
returnData.unshift({
name: 'Default',
value: 'default',
description: 'Timezone set in n8n',
});
return returnData;
},
},
};
async execute() {
const items = this.getInputData();
const returnData = [];
const length = items.length;
let responseData;
const qs = {};
const timezone = this.getTimezone();
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
if (resource === 'block') {
if (operation === 'append') {
for (let i = 0; i < length; i++) {
const blockId = (0, GenericFunctions_1.extractPageId)(this.getNodeParameter('blockId', i, '', { extractValue: true }));
const blockValues = this.getNodeParameter('blockUi.blockValues', i, []);
(0, GenericFunctions_1.extractDatabaseMentionRLC)(blockValues);
const body = {
children: (0, GenericFunctions_1.formatBlocks)(blockValues),
};
const block = await GenericFunctions_1.notionApiRequest.call(this, 'PATCH', `/blocks/${blockId}/children`, body);
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(block), { itemData: { item: i } });
returnData.push(...executionData);
}
}
if (operation === 'getAll') {
for (let i = 0; i < length; i++) {
const blockId = (0, GenericFunctions_1.extractPageId)(this.getNodeParameter('blockId', i, '', { extractValue: true }));
const returnAll = this.getNodeParameter('returnAll', i);
if (returnAll) {
responseData = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'GET', `/blocks/${blockId}/children`, {});
}
else {
qs.page_size = this.getNodeParameter('limit', i);
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/blocks/${blockId}/children`, {}, qs);
responseData = responseData.results;
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
}
if (resource === 'database') {
if (operation === 'get') {
for (let i = 0; i < length; i++) {
const databaseId = (0, GenericFunctions_1.extractDatabaseId)(this.getNodeParameter('databaseId', i, '', { extractValue: true }));
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/databases/${databaseId}`);
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
if (operation === 'getAll') {
for (let i = 0; i < length; i++) {
const body = {
filter: { property: 'object', value: 'database' },
};
const returnAll = this.getNodeParameter('returnAll', i);
if (returnAll) {
responseData = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'POST', '/search', body);
}
else {
body.page_size = this.getNodeParameter('limit', i);
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'POST', '/search', body);
responseData = responseData.results;
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
}
if (resource === 'databasePage') {
if (operation === 'create') {
for (let i = 0; i < length; i++) {
const simple = this.getNodeParameter('simple', i);
const body = {
parent: {},
properties: {},
};
body.parent.database_id = this.getNodeParameter('databaseId', i, '', {
extractValue: true,
});
const properties = this.getNodeParameter('propertiesUi.propertyValues', i, []);
if (properties.length !== 0) {
body.properties = GenericFunctions_1.mapProperties.call(this, properties, timezone);
}
const blockValues = this.getNodeParameter('blockUi.blockValues', i, []);
(0, GenericFunctions_1.extractDatabaseMentionRLC)(blockValues);
body.children = (0, GenericFunctions_1.formatBlocks)(blockValues);
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'POST', '/pages', body);
if (simple) {
responseData = (0, GenericFunctions_1.simplifyObjects)(responseData, false, 1);
}
const options = this.getNodeParameter('options', i);
if (options.icon) {
if (options.iconType && options.iconType === 'file') {
body.icon = { external: { url: options.icon } };
}
else {
body.icon = { emoji: options.icon };
}
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
if (operation === 'getAll') {
for (let i = 0; i < length; i++) {
const simple = this.getNodeParameter('simple', 0);
const databaseId = this.getNodeParameter('databaseId', i, '', {
extractValue: true,
});
const returnAll = this.getNodeParameter('returnAll', i);
const filters = this.getNodeParameter('options.filter', i, {});
const sort = this.getNodeParameter('options.sort.sortValue', i, []);
const body = {
filter: {},
};
if (filters.singleCondition) {
body.filter = (0, GenericFunctions_1.mapFilters)([filters.singleCondition], timezone);
}
if (filters.multipleCondition) {
const { or, and } = filters.multipleCondition.condition;
if (Array.isArray(or) && or.length !== 0) {
Object.assign(body.filter, {
or: or.map((data) => (0, GenericFunctions_1.mapFilters)([data], timezone)),
});
}
if (Array.isArray(and) && and.length !== 0) {
Object.assign(body.filter, {
and: and.map((data) => (0, GenericFunctions_1.mapFilters)([data], timezone)),
});
}
}
if (!Object.keys(body.filter).length) {
delete body.filter;
}
if (sort) {
body.sorts = (0, GenericFunctions_1.mapSorting)(sort);
}
if (returnAll) {
responseData = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'POST', `/databases/${databaseId}/query`, body, {});
}
else {
body.page_size = this.getNodeParameter('limit', i);
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'POST', `/databases/${databaseId}/query`, body, qs);
responseData = responseData.results;
}
if (simple) {
responseData = (0, GenericFunctions_1.simplifyObjects)(responseData, false, 1);
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
if (operation === 'update') {
for (let i = 0; i < length; i++) {
const pageId = (0, GenericFunctions_1.extractPageId)(this.getNodeParameter('pageId', i, '', { extractValue: true }));
const simple = this.getNodeParameter('simple', i);
const properties = this.getNodeParameter('propertiesUi.propertyValues', i, []);
const body = {
properties: {},
};
if (properties.length !== 0) {
body.properties = GenericFunctions_1.mapProperties.call(this, properties, timezone);
}
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'PATCH', `/pages/${pageId}`, body);
if (simple) {
responseData = (0, GenericFunctions_1.simplifyObjects)(responseData, false, 1);
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
}
if (resource === 'user') {
if (operation === 'get') {
for (let i = 0; i < length; i++) {
const userId = this.getNodeParameter('userId', i);
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/users/${userId}`);
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
if (operation === 'getAll') {
for (let i = 0; i < length; i++) {
const returnAll = this.getNodeParameter('returnAll', i);
if (returnAll) {
responseData = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'GET', '/users');
}
else {
qs.limit = this.getNodeParameter('limit', i);
responseData = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'GET', '/users');
responseData = responseData.splice(0, qs.limit);
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
}
if (resource === 'page') {
if (operation === 'create') {
for (let i = 0; i < length; i++) {
const simple = this.getNodeParameter('simple', i);
const body = {
parent: {},
properties: {},
};
body.parent.page_id = (0, GenericFunctions_1.extractPageId)(this.getNodeParameter('pageId', i, '', { extractValue: true }));
body.properties = (0, GenericFunctions_1.formatTitle)(this.getNodeParameter('title', i));
const blockValues = this.getNodeParameter('blockUi.blockValues', i, []);
(0, GenericFunctions_1.extractDatabaseMentionRLC)(blockValues);
body.children = (0, GenericFunctions_1.formatBlocks)(blockValues);
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'POST', '/pages', body);
if (simple) {
responseData = (0, GenericFunctions_1.simplifyObjects)(responseData, false, 1);
}
const options = this.getNodeParameter('options', i);
if (options.icon) {
if (options.iconType && options.iconType === 'file') {
body.icon = { external: { url: options.icon } };
}
else {
body.icon = { emoji: options.icon };
}
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
if (operation === 'get') {
for (let i = 0; i < length; i++) {
const pageId = (0, GenericFunctions_1.extractPageId)(this.getNodeParameter('pageId', i));
const simple = this.getNodeParameter('simple', i);
responseData = await GenericFunctions_1.notionApiRequest.call(this, 'GET', `/pages/${pageId}`);
if (simple) {
responseData = (0, GenericFunctions_1.simplifyObjects)(responseData, false, 1);
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
if (operation === 'search') {
for (let i = 0; i < length; i++) {
const text = this.getNodeParameter('text', i);
const options = this.getNodeParameter('options', i);
const returnAll = this.getNodeParameter('returnAll', i);
const simple = this.getNodeParameter('simple', i);
const body = {};
if (text) {
body.query = text;
}
if (options.filter) {
const filter = options.filter?.filters || [];
body.filter = filter;
}
if (options.sort) {
const sort = options.sort?.sortValue || {};
body.sort = sort;
}
if (returnAll) {
responseData = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'POST', '/search', body);
}
else {
qs.limit = this.getNodeParameter('limit', i);
responseData = await GenericFunctions_1.notionApiRequestAllItems.call(this, 'results', 'POST', '/search', body);
responseData = responseData.splice(0, qs.limit);
}
if (simple) {
responseData = (0, GenericFunctions_1.simplifyObjects)(responseData, false, 1);
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
}
}
return [returnData];
}
}
exports.NotionV1 = NotionV1;
//# sourceMappingURL=NotionV1.node.js.map