import type { ILoadOptionsFunctions, INodePropertyOptions, INodeType, INodeTypeDescription, } from 'n8n-workflow'; import { NodeConnectionType } from 'n8n-workflow'; import { groupFields, groupOperations, userFields, userOperations } from './descriptions'; import { getGroupProperties, getGroups, getUserProperties, getUsers } from './GenericFunctions'; export class MicrosoftEntra implements INodeType { description: INodeTypeDescription = { displayName: 'Microsoft Entra ID', name: 'microsoftEntra', icon: { light: 'file:microsoftEntra.svg', dark: 'file:microsoftEntra.dark.svg', }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Interact with Micosoft Entra ID API', defaults: { name: 'Micosoft Entra ID', }, inputs: [NodeConnectionType.Main], outputs: [NodeConnectionType.Main], credentials: [ { name: 'microsoftEntraOAuth2Api', required: true, }, ], requestDefaults: { baseURL: 'https://graph.microsoft.com/v1.0', headers: { 'Content-Type': 'application/json', }, }, properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Group', value: 'group', }, { name: 'User', value: 'user', }, ], default: 'user', }, ...groupOperations, ...groupFields, ...userOperations, ...userFields, ], }; methods = { loadOptions: { getGroupProperties, async getGroupPropertiesGetAll(this: ILoadOptionsFunctions): Promise { // Filter items not supported for list endpoint return (await getGroupProperties.call(this)).filter( (x) => ![ 'allowExternalSenders', 'autoSubscribeNewMembers', 'hideFromAddressLists', 'hideFromOutlookClients', 'isSubscribedByMail', 'unseenCount', ].includes(x.value as string), ); }, getUserProperties, async getUserPropertiesGetAll(this: ILoadOptionsFunctions): Promise { // Filter items not supported for list endpoint return (await getUserProperties.call(this)).filter( (x) => ![ 'aboutMe', 'birthday', 'hireDate', 'interests', 'mySite', 'pastProjects', 'preferredName', 'responsibilities', 'schools', 'skills', 'mailboxSettings', ].includes(x.value as string), ); }, }, listSearch: { getGroups, getUsers, }, }; }