From ef775711d01e77533775bd3c1e1f9bb1c508f2b2 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 21 Feb 2024 14:02:40 +0000 Subject: [PATCH] feat(Google Workspace Admin Node): Add support for error output branch (#8499) --- .../Google/GSuiteAdmin/GSuiteAdmin.node.ts | 557 +++++++++--------- 1 file changed, 293 insertions(+), 264 deletions(-) diff --git a/packages/nodes-base/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.ts b/packages/nodes-base/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.ts index e6312da55..f3d63b596 100644 --- a/packages/nodes-base/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.ts +++ b/packages/nodes-base/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.ts @@ -115,315 +115,344 @@ export class GSuiteAdmin implements INodeType { const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); for (let i = 0; i < length; i++) { - if (resource === 'group') { - //https://developers.google.com/admin-sdk/directory/v1/reference/groups/insert - if (operation === 'create') { - const email = this.getNodeParameter('email', i) as string; + try { + if (resource === 'group') { + //https://developers.google.com/admin-sdk/directory/v1/reference/groups/insert + if (operation === 'create') { + const email = this.getNodeParameter('email', i) as string; - const additionalFields = this.getNodeParameter('additionalFields', i); + const additionalFields = this.getNodeParameter('additionalFields', i); - const body: IDataObject = { - email, - }; + const body: IDataObject = { + email, + }; - Object.assign(body, additionalFields); + Object.assign(body, additionalFields); - responseData = await googleApiRequest.call(this, 'POST', '/directory/v1/groups', body); - } - - //https://developers.google.com/admin-sdk/directory/v1/reference/groups/delete - if (operation === 'delete') { - const groupId = this.getNodeParameter('groupId', i) as string; - - responseData = await googleApiRequest.call( - this, - 'DELETE', - `/directory/v1/groups/${groupId}`, - {}, - ); - - responseData = { success: true }; - } - - //https://developers.google.com/admin-sdk/directory/v1/reference/groups/get - if (operation === 'get') { - const groupId = this.getNodeParameter('groupId', i) as string; - - responseData = await googleApiRequest.call( - this, - 'GET', - `/directory/v1/groups/${groupId}`, - {}, - ); - } - - //https://developers.google.com/admin-sdk/directory/v1/reference/groups/list - if (operation === 'getAll') { - const returnAll = this.getNodeParameter('returnAll', i); - - const options = this.getNodeParameter('options', i); - - Object.assign(qs, options); - - if (qs.customer === undefined) { - qs.customer = 'my_customer'; + responseData = await googleApiRequest.call(this, 'POST', '/directory/v1/groups', body); } - if (returnAll) { - responseData = await googleApiRequestAllItems.call( + //https://developers.google.com/admin-sdk/directory/v1/reference/groups/delete + if (operation === 'delete') { + const groupId = this.getNodeParameter('groupId', i) as string; + + responseData = await googleApiRequest.call( this, - 'groups', - 'GET', - '/directory/v1/groups', + 'DELETE', + `/directory/v1/groups/${groupId}`, {}, - qs, ); - } else { - qs.maxResults = this.getNodeParameter('limit', i); - responseData = await googleApiRequest.call(this, 'GET', '/directory/v1/groups', {}, qs); + responseData = { success: true }; + } - responseData = responseData.groups; + //https://developers.google.com/admin-sdk/directory/v1/reference/groups/get + if (operation === 'get') { + const groupId = this.getNodeParameter('groupId', i) as string; + + responseData = await googleApiRequest.call( + this, + 'GET', + `/directory/v1/groups/${groupId}`, + {}, + ); + } + + //https://developers.google.com/admin-sdk/directory/v1/reference/groups/list + if (operation === 'getAll') { + const returnAll = this.getNodeParameter('returnAll', i); + + const options = this.getNodeParameter('options', i); + + Object.assign(qs, options); + + if (qs.customer === undefined) { + qs.customer = 'my_customer'; + } + + if (returnAll) { + responseData = await googleApiRequestAllItems.call( + this, + 'groups', + 'GET', + '/directory/v1/groups', + {}, + qs, + ); + } else { + qs.maxResults = this.getNodeParameter('limit', i); + + responseData = await googleApiRequest.call( + this, + 'GET', + '/directory/v1/groups', + {}, + qs, + ); + + responseData = responseData.groups; + } + } + + //https://developers.google.com/admin-sdk/directory/v1/reference/groups/update + if (operation === 'update') { + const groupId = this.getNodeParameter('groupId', i) as string; + + const updateFields = this.getNodeParameter('updateFields', i); + + const body: IDataObject = {}; + + Object.assign(body, updateFields); + + responseData = await googleApiRequest.call( + this, + 'PUT', + `/directory/v1/groups/${groupId}`, + body, + ); } } - //https://developers.google.com/admin-sdk/directory/v1/reference/groups/update - if (operation === 'update') { - const groupId = this.getNodeParameter('groupId', i) as string; + if (resource === 'user') { + //https://developers.google.com/admin-sdk/directory/v1/reference/users/insert + if (operation === 'create') { + const domain = this.getNodeParameter('domain', i) as string; - const updateFields = this.getNodeParameter('updateFields', i); + const firstName = this.getNodeParameter('firstName', i) as string; - const body: IDataObject = {}; + const lastName = this.getNodeParameter('lastName', i) as string; - Object.assign(body, updateFields); + const password = this.getNodeParameter('password', i) as string; - responseData = await googleApiRequest.call( - this, - 'PUT', - `/directory/v1/groups/${groupId}`, - body, - ); - } - } + const username = this.getNodeParameter('username', i) as string; - if (resource === 'user') { - //https://developers.google.com/admin-sdk/directory/v1/reference/users/insert - if (operation === 'create') { - const domain = this.getNodeParameter('domain', i) as string; + const makeAdmin = this.getNodeParameter('makeAdmin', i) as boolean; - const firstName = this.getNodeParameter('firstName', i) as string; + const additionalFields = this.getNodeParameter('additionalFields', i); - const lastName = this.getNodeParameter('lastName', i) as string; + const body: IDataObject = { + name: { + familyName: lastName, + givenName: firstName, + }, + password, + primaryEmail: `${username}@${domain}`, + }; - const password = this.getNodeParameter('password', i) as string; + Object.assign(body, additionalFields); - const username = this.getNodeParameter('username', i) as string; + if (additionalFields.phoneUi) { + const phones = (additionalFields.phoneUi as IDataObject).phoneValues as IDataObject[]; - const makeAdmin = this.getNodeParameter('makeAdmin', i) as boolean; + body.phones = phones; - const additionalFields = this.getNodeParameter('additionalFields', i); + delete body.phoneUi; + } - const body: IDataObject = { - name: { - familyName: lastName, - givenName: firstName, - }, - password, - primaryEmail: `${username}@${domain}`, - }; + if (additionalFields.emailUi) { + const emails = (additionalFields.emailUi as IDataObject).emailValues as IDataObject[]; - Object.assign(body, additionalFields); + body.emails = emails; - if (additionalFields.phoneUi) { - const phones = (additionalFields.phoneUi as IDataObject).phoneValues as IDataObject[]; + delete body.emailUi; + } - body.phones = phones; - - delete body.phoneUi; - } - - if (additionalFields.emailUi) { - const emails = (additionalFields.emailUi as IDataObject).emailValues as IDataObject[]; - - body.emails = emails; - - delete body.emailUi; - } - - responseData = await googleApiRequest.call(this, 'POST', '/directory/v1/users', body, qs); - - if (makeAdmin) { - await googleApiRequest.call( + responseData = await googleApiRequest.call( this, 'POST', - `/directory/v1/users/${responseData.id}/makeAdmin`, - { status: true }, - ); - - responseData.isAdmin = true; - } - } - - //https://developers.google.com/admin-sdk/directory/v1/reference/users/delete - if (operation === 'delete') { - const userId = this.getNodeParameter('userId', i) as string; - - responseData = await googleApiRequest.call( - this, - 'DELETE', - `/directory/v1/users/${userId}`, - {}, - ); - - responseData = { success: true }; - } - - //https://developers.google.com/admin-sdk/directory/v1/reference/users/get - if (operation === 'get') { - const userId = this.getNodeParameter('userId', i) as string; - - const projection = this.getNodeParameter('projection', i) as string; - - const options = this.getNodeParameter('options', i); - - qs.projection = projection; - - Object.assign(qs, options); - - if (qs.customFieldMask) { - qs.customFieldMask = (qs.customFieldMask as string[]).join(' '); - } - - if (qs.projection === 'custom' && qs.customFieldMask === undefined) { - throw new NodeOperationError( - this.getNode(), - 'When projection is set to custom, the custom schemas field must be defined', - { itemIndex: i }, - ); - } - - responseData = await googleApiRequest.call( - this, - 'GET', - `/directory/v1/users/${userId}`, - {}, - qs, - ); - } - - //https://developers.google.com/admin-sdk/directory/v1/reference/users/list - if (operation === 'getAll') { - const returnAll = this.getNodeParameter('returnAll', i); - - const projection = this.getNodeParameter('projection', i) as string; - - const options = this.getNodeParameter('options', i); - - qs.projection = projection; - - Object.assign(qs, options); - - if (qs.customer === undefined) { - qs.customer = 'my_customer'; - } - - if (qs.customFieldMask) { - qs.customFieldMask = (qs.customFieldMask as string[]).join(' '); - } - - if (qs.projection === 'custom' && qs.customFieldMask === undefined) { - throw new NodeOperationError( - this.getNode(), - 'When projection is set to custom, the custom schemas field must be defined', - { itemIndex: i }, - ); - } - - if (returnAll) { - responseData = await googleApiRequestAllItems.call( - this, - 'users', - 'GET', '/directory/v1/users', + body, + qs, + ); + + if (makeAdmin) { + await googleApiRequest.call( + this, + 'POST', + `/directory/v1/users/${responseData.id}/makeAdmin`, + { status: true }, + ); + + responseData.isAdmin = true; + } + } + + //https://developers.google.com/admin-sdk/directory/v1/reference/users/delete + if (operation === 'delete') { + const userId = this.getNodeParameter('userId', i) as string; + + responseData = await googleApiRequest.call( + this, + 'DELETE', + `/directory/v1/users/${userId}`, + {}, + ); + + responseData = { success: true }; + } + + //https://developers.google.com/admin-sdk/directory/v1/reference/users/get + if (operation === 'get') { + const userId = this.getNodeParameter('userId', i) as string; + + const projection = this.getNodeParameter('projection', i) as string; + + const options = this.getNodeParameter('options', i); + + qs.projection = projection; + + Object.assign(qs, options); + + if (qs.customFieldMask) { + qs.customFieldMask = (qs.customFieldMask as string[]).join(' '); + } + + if (qs.projection === 'custom' && qs.customFieldMask === undefined) { + throw new NodeOperationError( + this.getNode(), + 'When projection is set to custom, the custom schemas field must be defined', + { itemIndex: i }, + ); + } + + responseData = await googleApiRequest.call( + this, + 'GET', + `/directory/v1/users/${userId}`, {}, qs, ); - } else { - qs.maxResults = this.getNodeParameter('limit', i); + } - responseData = await googleApiRequest.call(this, 'GET', '/directory/v1/users', {}, qs); + //https://developers.google.com/admin-sdk/directory/v1/reference/users/list + if (operation === 'getAll') { + const returnAll = this.getNodeParameter('returnAll', i); - responseData = responseData.users; + const projection = this.getNodeParameter('projection', i) as string; + + const options = this.getNodeParameter('options', i); + + qs.projection = projection; + + Object.assign(qs, options); + + if (qs.customer === undefined) { + qs.customer = 'my_customer'; + } + + if (qs.customFieldMask) { + qs.customFieldMask = (qs.customFieldMask as string[]).join(' '); + } + + if (qs.projection === 'custom' && qs.customFieldMask === undefined) { + throw new NodeOperationError( + this.getNode(), + 'When projection is set to custom, the custom schemas field must be defined', + { itemIndex: i }, + ); + } + + if (returnAll) { + responseData = await googleApiRequestAllItems.call( + this, + 'users', + 'GET', + '/directory/v1/users', + {}, + qs, + ); + } else { + qs.maxResults = this.getNodeParameter('limit', i); + + responseData = await googleApiRequest.call( + this, + 'GET', + '/directory/v1/users', + {}, + qs, + ); + + responseData = responseData.users; + } + } + + //https://developers.google.com/admin-sdk/directory/v1/reference/users/update + if (operation === 'update') { + const userId = this.getNodeParameter('userId', i) as string; + + const updateFields = this.getNodeParameter('updateFields', i); + + const body: { + name: { givenName?: string; familyName?: string }; + emails?: IDataObject[]; + phones?: IDataObject[]; + } = { name: {} }; + + Object.assign(body, updateFields); + + if (updateFields.firstName) { + body.name.givenName = updateFields.firstName as string; + //@ts-ignore + delete body.firstName; + } + + if (updateFields.lastName) { + body.name.familyName = updateFields.lastName as string; + //@ts-ignore + delete body.lastName; + } + + if (Object.keys(body.name).length === 0) { + //@ts-ignore + delete body.name; + } + + if (updateFields.phoneUi) { + const phones = (updateFields.phoneUi as IDataObject).phoneValues as IDataObject[]; + + body.phones = phones; + + //@ts-ignore + delete body.phoneUi; + } + + if (updateFields.emailUi) { + const emails = (updateFields.emailUi as IDataObject).emailValues as IDataObject[]; + + body.emails = emails; + + //@ts-ignore + delete body.emailUi; + } + + responseData = await googleApiRequest.call( + this, + 'PUT', + `/directory/v1/users/${userId}`, + body, + qs, + ); } } - //https://developers.google.com/admin-sdk/directory/v1/reference/users/update - if (operation === 'update') { - const userId = this.getNodeParameter('userId', i) as string; + const executionData = this.helpers.constructExecutionMetaData( + this.helpers.returnJsonArray(responseData as IDataObject[]), + { itemData: { item: i } }, + ); - const updateFields = this.getNodeParameter('updateFields', i); - - const body: { - name: { givenName?: string; familyName?: string }; - emails?: IDataObject[]; - phones?: IDataObject[]; - } = { name: {} }; - - Object.assign(body, updateFields); - - if (updateFields.firstName) { - body.name.givenName = updateFields.firstName as string; - //@ts-ignore - delete body.firstName; - } - - if (updateFields.lastName) { - body.name.familyName = updateFields.lastName as string; - //@ts-ignore - delete body.lastName; - } - - if (Object.keys(body.name).length === 0) { - //@ts-ignore - delete body.name; - } - - if (updateFields.phoneUi) { - const phones = (updateFields.phoneUi as IDataObject).phoneValues as IDataObject[]; - - body.phones = phones; - - //@ts-ignore - delete body.phoneUi; - } - - if (updateFields.emailUi) { - const emails = (updateFields.emailUi as IDataObject).emailValues as IDataObject[]; - - body.emails = emails; - - //@ts-ignore - delete body.emailUi; - } - - responseData = await googleApiRequest.call( - this, - 'PUT', - `/directory/v1/users/${userId}`, - body, - qs, + returnData.push(...executionData); + } catch (error) { + if (this.continueOnFail()) { + const executionErrorData = this.helpers.constructExecutionMetaData( + this.helpers.returnJsonArray({ error: error.message }), + { itemData: { item: i } }, ); + returnData.push(...executionErrorData); + continue; } + throw error; } - - const executionData = this.helpers.constructExecutionMetaData( - this.helpers.returnJsonArray(responseData as IDataObject[]), - { itemData: { item: i } }, - ); - - returnData.push(...executionData); } - return [returnData]; } }