From 5ba4c27d8c417964187af89a15d5dd4ce9f3271a Mon Sep 17 00:00:00 2001 From: Jonathan Bennetts Date: Sun, 27 Mar 2022 09:57:45 +0100 Subject: [PATCH] feat(Reddit Node): Add possibility to query saved posts (#3034) * chore: add nvmrc with required node version * feat: added saved posts to reddit node with credentials on User resource * Changed Details order * Fixed lint issue * Moved saved posts to profile as it only works for the logged in user, This avoids the breaking change * Removed .nvmrc * :zap: Improvements Co-authored-by: Yassine Fathi Co-authored-by: ricardo --- .../nodes/Reddit/GenericFunctions.ts | 6 +-- .../nodes/Reddit/ProfileDescription.ts | 52 +++++++++++++++++++ .../nodes-base/nodes/Reddit/Reddit.node.ts | 10 +++- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/packages/nodes-base/nodes/Reddit/GenericFunctions.ts b/packages/nodes-base/nodes/Reddit/GenericFunctions.ts index f9cb55b110..85d311ffb6 100644 --- a/packages/nodes-base/nodes/Reddit/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Reddit/GenericFunctions.ts @@ -4,7 +4,7 @@ import { } from 'n8n-core'; import { - IDataObject, NodeApiError, NodeOperationError, + IDataObject, JsonObject, NodeApiError, NodeOperationError, } from 'n8n-workflow'; import { @@ -45,7 +45,7 @@ export async function redditApiRequest( try { return await this.helpers.requestOAuth2.call(this, 'redditOAuth2Api', options); } catch (error) { - throw new NodeApiError(this.getNode(), error); + throw new NodeApiError(this.getNode(), error as JsonObject); } } else { @@ -53,7 +53,7 @@ export async function redditApiRequest( try { return await this.helpers.request.call(this, options); } catch (error) { - throw new NodeApiError(this.getNode(), error); + throw new NodeApiError(this.getNode(), error as JsonObject); } } } diff --git a/packages/nodes-base/nodes/Reddit/ProfileDescription.ts b/packages/nodes-base/nodes/Reddit/ProfileDescription.ts index 5f8f65e8c4..672ed106a3 100644 --- a/packages/nodes-base/nodes/Reddit/ProfileDescription.ts +++ b/packages/nodes-base/nodes/Reddit/ProfileDescription.ts @@ -60,6 +60,11 @@ export const profileFields: INodeProperties[] = [ value: 'prefs', description: 'Return the settings preferences of the logged-in user', }, + { + name: 'Saved', + value: 'saved', + description: 'Return the saved posts for the user', + }, { name: 'Trophies', value: 'trophies', @@ -77,4 +82,51 @@ export const profileFields: INodeProperties[] = [ }, }, }, + { + displayName: 'Return All', + name: 'returnAll', + type: 'boolean', + default: false, + description: 'Return all results.', + displayOptions: { + show: { + resource: [ + 'profile', + ], + operation: [ + 'get', + ], + details: [ + 'saved', + ], + }, + }, + }, + { + displayName: 'Limit', + name: 'limit', + type: 'number', + default: 100, + description: 'The number of results to return.', + typeOptions: { + minValue: 1, + maxValue: 100, + }, + displayOptions: { + show: { + resource: [ + 'profile', + ], + operation: [ + 'get', + ], + details: [ + 'saved', + ], + returnAll: [ + false, + ], + }, + }, + }, ]; diff --git a/packages/nodes-base/nodes/Reddit/Reddit.node.ts b/packages/nodes-base/nodes/Reddit/Reddit.node.ts index 44fd58d08c..b147cfc230 100644 --- a/packages/nodes-base/nodes/Reddit/Reddit.node.ts +++ b/packages/nodes-base/nodes/Reddit/Reddit.node.ts @@ -352,7 +352,15 @@ export class Reddit implements INodeType { const details = this.getNodeParameter('details', i) as string; const endpoint = `api/v1/${endpoints[details]}`; - responseData = await redditApiRequest.call(this, 'GET', endpoint, {}); + let username; + + if (details === 'saved') { + ({ name: username } = await redditApiRequest.call(this, 'GET', `api/v1/me`, {})); + } + + responseData = details === 'saved' + ? await handleListing.call(this, i, `user/${username}/saved.json`) + : await redditApiRequest.call(this, 'GET', endpoint, {}); if (details === 'identity') { responseData = responseData.features;