UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

462 lines 24.7 kB
"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