Replace third-party owners with administrators
Some checks failed
github / Analyze (go) (push) Has been cancelled
github / Analyze (actions) (push) Has been cancelled
github / Analyze (javascript-typescript) (push) Has been cancelled
make / build-apps (push) Has been cancelled
make / probod binary (darwin/amd64) (push) Has been cancelled
make / probod binary (freebsd/amd64) (push) Has been cancelled
make / probod binary (linux/amd64) (push) Has been cancelled
make / probod binary (openbsd/amd64) (push) Has been cancelled
make / probod binary (windows/amd64) (push) Has been cancelled
make / probod binary (darwin/arm64) (push) Has been cancelled
make / probod binary (freebsd/arm64) (push) Has been cancelled
make / probod binary (linux/arm64) (push) Has been cancelled
make / probod binary (openbsd/arm64) (push) Has been cancelled
make / probo-agent (darwin/amd64) (push) Has been cancelled
make / probo-agent (freebsd/amd64) (push) Has been cancelled
make / probo-agent (linux/amd64) (push) Has been cancelled
make / probo-agent (windows/amd64) (push) Has been cancelled
make / probo-agent (darwin/arm64) (push) Has been cancelled
make / probo-agent (freebsd/arm64) (push) Has been cancelled
make / probo-agent (linux/arm64) (push) Has been cancelled
make / probo-agent (windows/arm64) (push) Has been cancelled
make / docker (amd64) (push) Has been cancelled
make / docker (arm64) (push) Has been cancelled
make / snapshot-scan (push) Has been cancelled
make / build-probod (push) Has been cancelled
make / build-probo-agent (push) Has been cancelled
make / lint-go (push) Has been cancelled
make / lint-js (push) Has been cancelled
make / lint-swift (push) Has been cancelled
make / lint-shell (push) Has been cancelled
make / test (push) Has been cancelled
make / test-e2e (push) Has been cancelled
trufflehog / scan (push) Has been cancelled

Migrate business and security owners into a shared administrators list across GraphQL, MCP, CLI, n8n, and the console.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
This commit is contained in:
Sacha Al Himdani
2026-07-27 12:24:43 +02:00
parent 084726dbad
commit 6a4f124adb
31 changed files with 808 additions and 601 deletions

View File

@@ -119,8 +119,8 @@ export const description: INodeProperties[] = [
description: 'The headquarter address of the thirdParty',
},
{
displayName: 'Business Owner ID',
name: 'businessOwnerId',
displayName: 'Administrator IDs',
name: 'administratorIds',
type: 'string',
displayOptions: {
show: {
@@ -129,20 +129,7 @@ export const description: INodeProperties[] = [
},
},
default: '',
description: 'The ID of the business owner (People ID)',
},
{
displayName: 'Security Owner ID',
name: 'securityOwnerId',
type: 'string',
displayOptions: {
show: {
resource: ['thirdParty'],
operation: ['create'],
},
},
default: '',
description: 'The ID of the security owner (People ID)',
description: 'Comma-separated administrator profile IDs',
},
{
displayName: 'Additional Fields',
@@ -248,8 +235,7 @@ export async function execute(
const websiteUrl = this.getNodeParameter('websiteUrl', itemIndex, '') as string;
const legalName = this.getNodeParameter('legalName', itemIndex, '') as string;
const headquarterAddress = this.getNodeParameter('headquarterAddress', itemIndex, '') as string;
const businessOwnerId = this.getNodeParameter('businessOwnerId', itemIndex, '') as string;
const securityOwnerId = this.getNodeParameter('securityOwnerId', itemIndex, '') as string;
const administratorIds = this.getNodeParameter('administratorIds', itemIndex, '') as string;
const additionalFields = this.getNodeParameter('additionalFields', itemIndex, {}) as {
statusPageUrl?: string;
termsOfServiceUrl?: string;
@@ -307,8 +293,7 @@ export async function execute(
if (websiteUrl) input.websiteUrl = websiteUrl;
if (legalName) input.legalName = legalName;
if (headquarterAddress) input.headquarterAddress = headquarterAddress;
if (businessOwnerId) input.businessOwnerId = businessOwnerId;
if (securityOwnerId) input.securityOwnerId = securityOwnerId;
if (administratorIds) input.administratorIds = administratorIds.split(',').map(id => id.trim()).filter(Boolean);
if (additionalFields.statusPageUrl) input.statusPageUrl = additionalFields.statusPageUrl;
if (additionalFields.termsOfServiceUrl) input.termsOfServiceUrl = additionalFields.termsOfServiceUrl;
if (additionalFields.privacyPolicyUrl) input.privacyPolicyUrl = additionalFields.privacyPolicyUrl;

View File

@@ -57,18 +57,11 @@ export const description: INodeProperties[] = [
description: 'Whether to include organization in the response',
},
{
displayName: 'Include Business Owner',
name: 'includeBusinessOwner',
displayName: 'Include Administrators',
name: 'includeAdministrators',
type: 'boolean',
default: false,
description: 'Whether to include business owner in the response',
},
{
displayName: 'Include Security Owner',
name: 'includeSecurityOwner',
type: 'boolean',
default: false,
description: 'Whether to include security owner in the response',
description: 'Whether to include administrators details',
},
],
},
@@ -81,8 +74,7 @@ export async function execute(
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
const options = this.getNodeParameter('options', itemIndex, {}) as {
includeOrganization?: boolean;
includeBusinessOwner?: boolean;
includeSecurityOwner?: boolean;
includeAdministrators?: boolean;
};
const organizationFragment = options.includeOrganization
@@ -92,16 +84,8 @@ export async function execute(
}`
: '';
const businessOwnerFragment = options.includeBusinessOwner
? `businessOwner {
id
fullName
emailAddress
}`
: '';
const securityOwnerFragment = options.includeSecurityOwner
? `securityOwner {
const administratorsFragment = options.includeAdministrators
? `administrators {
id
fullName
emailAddress
@@ -132,8 +116,7 @@ export async function execute(
countries
showOnCompliancePortal
${organizationFragment}
${businessOwnerFragment}
${securityOwnerFragment}
${administratorsFragment}
createdAt
updatedAt
}

View File

@@ -94,18 +94,11 @@ export const description: INodeProperties[] = [
description: 'Whether to include organization in the response',
},
{
displayName: 'Include Business Owner',
name: 'includeBusinessOwner',
displayName: 'Include Administrators',
name: 'includeAdministrators',
type: 'boolean',
default: false,
description: 'Whether to include business owner in the response',
},
{
displayName: 'Include Security Owner',
name: 'includeSecurityOwner',
type: 'boolean',
default: false,
description: 'Whether to include security owner in the response',
description: 'Whether to include administrators details',
},
],
},
@@ -121,8 +114,7 @@ export async function execute(
const options = this.getNodeParameter('options', itemIndex, {}) as {
filterLevel?: number;
includeOrganization?: boolean;
includeBusinessOwner?: boolean;
includeSecurityOwner?: boolean;
includeAdministrators?: boolean;
};
const organizationFragment = options.includeOrganization
@@ -132,16 +124,8 @@ export async function execute(
}`
: '';
const businessOwnerFragment = options.includeBusinessOwner
? `businessOwner {
id
fullName
emailAddress
}`
: '';
const securityOwnerFragment = options.includeSecurityOwner
? `securityOwner {
const administratorsFragment = options.includeAdministrators
? `administrators {
id
fullName
emailAddress
@@ -183,8 +167,7 @@ export async function execute(
name
}
${organizationFragment}
${businessOwnerFragment}
${securityOwnerFragment}
${administratorsFragment}
createdAt
updatedAt
}

View File

@@ -118,8 +118,8 @@ export const description: INodeProperties[] = [
description: 'The headquarter address of the thirdParty',
},
{
displayName: 'Business Owner ID',
name: 'businessOwnerId',
displayName: 'Administrator IDs',
name: 'administratorIds',
type: 'string',
displayOptions: {
show: {
@@ -128,20 +128,7 @@ export const description: INodeProperties[] = [
},
},
default: '',
description: 'The ID of the business owner (People ID)',
},
{
displayName: 'Security Owner ID',
name: 'securityOwnerId',
type: 'string',
displayOptions: {
show: {
resource: ['thirdParty'],
operation: ['update'],
},
},
default: '',
description: 'The ID of the security owner (People ID)',
description: 'Comma-separated administrator profile IDs (omit to leave unchanged)',
},
{
displayName: 'Show on Compliance Portal',
@@ -253,8 +240,7 @@ export async function execute(
const websiteUrl = this.getNodeParameter('websiteUrl', itemIndex, '') as string;
const legalName = this.getNodeParameter('legalName', itemIndex, '') as string;
const headquarterAddress = this.getNodeParameter('headquarterAddress', itemIndex, '') as string;
const businessOwnerId = this.getNodeParameter('businessOwnerId', itemIndex, '') as string;
const securityOwnerId = this.getNodeParameter('securityOwnerId', itemIndex, '') as string;
const administratorIds = this.getNodeParameter('administratorIds', itemIndex, '') as string;
const showOnCompliancePortal = this.getNodeParameter('showOnCompliancePortal', itemIndex) as boolean | undefined;
const additionalFields = this.getNodeParameter('additionalFields', itemIndex, {}) as {
statusPageUrl?: string;
@@ -307,8 +293,9 @@ export async function execute(
if (websiteUrl !== undefined) input.websiteUrl = websiteUrl === '' ? null : websiteUrl;
if (legalName !== undefined) input.legalName = legalName === '' ? null : legalName;
if (headquarterAddress !== undefined) input.headquarterAddress = headquarterAddress === '' ? null : headquarterAddress;
if (businessOwnerId !== undefined) input.businessOwnerId = businessOwnerId === '' ? null : businessOwnerId;
if (securityOwnerId !== undefined) input.securityOwnerId = securityOwnerId === '' ? null : securityOwnerId;
if (administratorIds) {
input.administratorIds = administratorIds.split(',').map(id => id.trim()).filter(Boolean);
}
if (showOnCompliancePortal !== undefined) input.showOnCompliancePortal = showOnCompliancePortal;
if (additionalFields.statusPageUrl !== undefined) input.statusPageUrl = additionalFields.statusPageUrl === '' ? null : additionalFields.statusPageUrl;
if (additionalFields.termsOfServiceUrl !== undefined) input.termsOfServiceUrl = additionalFields.termsOfServiceUrl === '' ? null : additionalFields.termsOfServiceUrl;