Rename vendors to third parties
Renames the user-facing 'vendor' concept to 'third party' across the entire codebase. The shared common_third_parties reference table is unchanged. Migration. Renames the vendor_category enum, the vendors and vendor_<entity> tables (contacts, services, compliance_reports, business_associate_agreements, data_privacy_agreements, risk_assessments) and their vendor_id columns, the asset_vendors / data_vendors / processing_activity_vendors junction tables, generated_documents.vendors_document_id, the webhook_event_type 'vendor:<verb>' values, and the snapshots_type 'VENDORS' value. Backend. Renames coredata models and SQL queries, probo services, GraphQL / MCP API surface, console / trust / webhook resolvers and types, the CLI (prb vendor* -> prb third-party*; pkg/cmd/vendormgmt -> pkg/cmd/thirdpartymgmt), the document generator, vetting agent prompts, and the common-third-parties-import command. Frontend, packages, n8n, e2e. Renames apps/console pages, components, hooks, routes, dialogs, and tabs; the shared @probo/vendors package (now @probo/third-parties); the @probo/ui Vendors atoms (now ThirdParties, VendorLogo -> ThirdPartyLogo); the n8n community node actions/vendor folder (now actions/thirdParty); and the e2e Go test suite (console and MCP). Filesystem and URL paths use kebab-case (third-parties), GraphQL fields and TypeScript identifiers use camelCase (thirdParty / thirdParties), Go types use PascalCase (ThirdParty), and human-facing text uses 'third party' with a space. Co-authored-by: Bryan Frimin <bryan@getprobo.com> Signed-off-by: Bryan Frimin <bryan@getprobo.com> Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
@@ -196,6 +196,11 @@ export class Probo implements INodeType {
|
||||
value: 'task',
|
||||
description: 'Manage tasks',
|
||||
},
|
||||
{
|
||||
name: 'Third Party',
|
||||
value: 'thirdParty',
|
||||
description: 'Manage third parties',
|
||||
},
|
||||
{
|
||||
name: 'TIA',
|
||||
value: 'tia',
|
||||
@@ -216,11 +221,6 @@ export class Probo implements INodeType {
|
||||
value: 'user',
|
||||
description: 'Manage organization users (profiles)',
|
||||
},
|
||||
{
|
||||
name: 'Vendor',
|
||||
value: 'vendor',
|
||||
description: 'Manage vendors',
|
||||
},
|
||||
{
|
||||
name: 'Webhook',
|
||||
value: 'webhook',
|
||||
|
||||
@@ -111,8 +111,8 @@ export const description: INodeProperties[] = [
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
displayName: 'Vendor IDs',
|
||||
name: 'vendorIds',
|
||||
displayName: 'ThirdParty IDs',
|
||||
name: 'thirdPartyIds',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
@@ -121,7 +121,7 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'Comma-separated list of vendor IDs',
|
||||
description: 'Comma-separated list of thirdParty IDs',
|
||||
},
|
||||
{
|
||||
displayName: 'Options',
|
||||
@@ -144,11 +144,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -164,10 +164,10 @@ export async function execute(
|
||||
const ownerId = this.getNodeParameter('ownerId', itemIndex) as string;
|
||||
const assetType = this.getNodeParameter('assetType', itemIndex) as string;
|
||||
const dataTypesStored = this.getNodeParameter('dataTypesStored', itemIndex) as string;
|
||||
const vendorIdsStr = this.getNodeParameter('vendorIds', itemIndex, '') as string;
|
||||
const thirdPartyIdsStr = this.getNodeParameter('thirdPartyIds', itemIndex, '') as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -178,8 +178,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -200,7 +200,7 @@ export async function execute(
|
||||
assetType
|
||||
dataTypesStored
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -209,7 +209,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const vendorIds = vendorIdsStr ? vendorIdsStr.split(',').map((id) => id.trim()).filter(Boolean) : undefined;
|
||||
const thirdPartyIds = thirdPartyIdsStr ? thirdPartyIdsStr.split(',').map((id) => id.trim()).filter(Boolean) : undefined;
|
||||
|
||||
const variables = {
|
||||
input: {
|
||||
@@ -219,7 +219,7 @@ export async function execute(
|
||||
ownerId,
|
||||
assetType,
|
||||
dataTypesStored,
|
||||
...(vendorIds && vendorIds.length > 0 && { vendorIds }),
|
||||
...(thirdPartyIds && thirdPartyIds.length > 0 && { thirdPartyIds }),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -51,11 +51,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -68,7 +68,7 @@ export async function execute(
|
||||
const assetId = this.getNodeParameter('assetId', itemIndex) as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -79,8 +79,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -100,7 +100,7 @@ export async function execute(
|
||||
assetType
|
||||
dataTypesStored
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
|
||||
@@ -81,11 +81,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -100,7 +100,7 @@ export async function execute(
|
||||
const limit = this.getNodeParameter('limit', itemIndex, 50) as number;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -111,8 +111,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -135,7 +135,7 @@ export async function execute(
|
||||
assetType
|
||||
dataTypesStored
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
|
||||
@@ -106,8 +106,8 @@ export const description: INodeProperties[] = [
|
||||
description: 'The types of data stored in the asset',
|
||||
},
|
||||
{
|
||||
displayName: 'Vendor IDs',
|
||||
name: 'vendorIds',
|
||||
displayName: 'ThirdParty IDs',
|
||||
name: 'thirdPartyIds',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
@@ -116,7 +116,7 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'Comma-separated list of vendor IDs',
|
||||
description: 'Comma-separated list of thirdParty IDs',
|
||||
},
|
||||
{
|
||||
displayName: 'Options',
|
||||
@@ -139,11 +139,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -159,10 +159,10 @@ export async function execute(
|
||||
const ownerId = this.getNodeParameter('ownerId', itemIndex, '') as string;
|
||||
const assetType = this.getNodeParameter('assetType', itemIndex, '') as string;
|
||||
const dataTypesStored = this.getNodeParameter('dataTypesStored', itemIndex, '') as string;
|
||||
const vendorIdsStr = this.getNodeParameter('vendorIds', itemIndex, '') as string;
|
||||
const thirdPartyIdsStr = this.getNodeParameter('thirdPartyIds', itemIndex, '') as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -173,8 +173,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -194,7 +194,7 @@ export async function execute(
|
||||
assetType
|
||||
dataTypesStored
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -208,9 +208,9 @@ export async function execute(
|
||||
if (ownerId) input.ownerId = ownerId;
|
||||
if (assetType) input.assetType = assetType;
|
||||
if (dataTypesStored) input.dataTypesStored = dataTypesStored;
|
||||
if (vendorIdsStr) {
|
||||
const vendorIds = vendorIdsStr.split(',').map((vid) => vid.trim()).filter(Boolean);
|
||||
if (vendorIds.length > 0) input.vendorIds = vendorIds;
|
||||
if (thirdPartyIdsStr) {
|
||||
const thirdPartyIds = thirdPartyIdsStr.split(',').map((vid) => vid.trim()).filter(Boolean);
|
||||
if (thirdPartyIds.length > 0) input.thirdPartyIds = thirdPartyIds;
|
||||
}
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input });
|
||||
|
||||
@@ -91,8 +91,8 @@ export const description: INodeProperties[] = [
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
displayName: 'Vendor IDs',
|
||||
name: 'vendorIds',
|
||||
displayName: 'ThirdParty IDs',
|
||||
name: 'thirdPartyIds',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
@@ -101,7 +101,7 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'Comma-separated list of vendor IDs',
|
||||
description: 'Comma-separated list of thirdParty IDs',
|
||||
},
|
||||
{
|
||||
displayName: 'Options',
|
||||
@@ -124,11 +124,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -142,10 +142,10 @@ export async function execute(
|
||||
const name = this.getNodeParameter('name', itemIndex) as string;
|
||||
const dataClassification = this.getNodeParameter('dataClassification', itemIndex) as string;
|
||||
const ownerId = this.getNodeParameter('ownerId', itemIndex) as string;
|
||||
const vendorIdsStr = this.getNodeParameter('vendorIds', itemIndex, '') as string;
|
||||
const thirdPartyIdsStr = this.getNodeParameter('thirdPartyIds', itemIndex, '') as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -156,8 +156,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -176,7 +176,7 @@ export async function execute(
|
||||
name
|
||||
dataClassification
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -185,7 +185,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const vendorIds = vendorIdsStr ? vendorIdsStr.split(',').map((id) => id.trim()).filter(Boolean) : undefined;
|
||||
const thirdPartyIds = thirdPartyIdsStr ? thirdPartyIdsStr.split(',').map((id) => id.trim()).filter(Boolean) : undefined;
|
||||
|
||||
const variables = {
|
||||
input: {
|
||||
@@ -193,7 +193,7 @@ export async function execute(
|
||||
name,
|
||||
dataClassification,
|
||||
ownerId,
|
||||
...(vendorIds && vendorIds.length > 0 && { vendorIds }),
|
||||
...(thirdPartyIds && thirdPartyIds.length > 0 && { thirdPartyIds }),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -51,11 +51,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -68,7 +68,7 @@ export async function execute(
|
||||
const datumId = this.getNodeParameter('datumId', itemIndex) as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -79,8 +79,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -98,7 +98,7 @@ export async function execute(
|
||||
name
|
||||
dataClassification
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
|
||||
@@ -81,11 +81,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -100,7 +100,7 @@ export async function execute(
|
||||
const limit = this.getNodeParameter('limit', itemIndex, 50) as number;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -111,8 +111,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -133,7 +133,7 @@ export async function execute(
|
||||
name
|
||||
dataClassification
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
|
||||
@@ -88,8 +88,8 @@ export const description: INodeProperties[] = [
|
||||
description: 'The ID of the owner (People)',
|
||||
},
|
||||
{
|
||||
displayName: 'Vendor IDs',
|
||||
name: 'vendorIds',
|
||||
displayName: 'ThirdParty IDs',
|
||||
name: 'thirdPartyIds',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
@@ -98,7 +98,7 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'Comma-separated list of vendor IDs',
|
||||
description: 'Comma-separated list of thirdParty IDs',
|
||||
},
|
||||
{
|
||||
displayName: 'Options',
|
||||
@@ -121,11 +121,11 @@ export const description: INodeProperties[] = [
|
||||
description: 'Whether to include owner details in the response',
|
||||
},
|
||||
{
|
||||
displayName: 'Include Vendors',
|
||||
name: 'includeVendors',
|
||||
displayName: 'Include ThirdParties',
|
||||
name: 'includeThirdParties',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendors in the response',
|
||||
description: 'Whether to include thirdParties in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -139,10 +139,10 @@ export async function execute(
|
||||
const name = this.getNodeParameter('name', itemIndex, '') as string;
|
||||
const dataClassification = this.getNodeParameter('dataClassification', itemIndex, '') as string;
|
||||
const ownerId = this.getNodeParameter('ownerId', itemIndex, '') as string;
|
||||
const vendorIdsStr = this.getNodeParameter('vendorIds', itemIndex, '') as string;
|
||||
const thirdPartyIdsStr = this.getNodeParameter('thirdPartyIds', itemIndex, '') as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOwner?: boolean;
|
||||
includeVendors?: boolean;
|
||||
includeThirdParties?: boolean;
|
||||
};
|
||||
|
||||
const ownerFragment = options.includeOwner
|
||||
@@ -153,8 +153,8 @@ export async function execute(
|
||||
}`
|
||||
: '';
|
||||
|
||||
const vendorsFragment = options.includeVendors
|
||||
? `vendors(first: 100) {
|
||||
const thirdPartiesFragment = options.includeThirdParties
|
||||
? `thirdParties(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -172,7 +172,7 @@ export async function execute(
|
||||
name
|
||||
dataClassification
|
||||
${ownerFragment}
|
||||
${vendorsFragment}
|
||||
${thirdPartiesFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -184,9 +184,9 @@ export async function execute(
|
||||
if (name) input.name = name;
|
||||
if (dataClassification) input.dataClassification = dataClassification;
|
||||
if (ownerId) input.ownerId = ownerId;
|
||||
if (vendorIdsStr) {
|
||||
const vendorIds = vendorIdsStr.split(',').map((vid) => vid.trim()).filter(Boolean);
|
||||
if (vendorIds.length > 0) input.vendorIds = vendorIds;
|
||||
if (thirdPartyIdsStr) {
|
||||
const thirdPartyIds = thirdPartyIdsStr.split(',').map((vid) => vid.trim()).filter(Boolean);
|
||||
if (thirdPartyIds.length > 0) input.thirdPartyIds = thirdPartyIds;
|
||||
}
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input });
|
||||
|
||||
@@ -41,7 +41,7 @@ import * as statementOfApplicability from './statementOfApplicability';
|
||||
import * as task from './task';
|
||||
import * as tia from './tia';
|
||||
import * as trustCenter from './trustCenter';
|
||||
import * as vendor from './vendor';
|
||||
import * as thirdParty from './thirdParty';
|
||||
import * as webhook from './webhook';
|
||||
|
||||
export interface ResourceModule {
|
||||
@@ -83,7 +83,7 @@ export const resources: Record<string, ResourceModule> = {
|
||||
task: task as ResourceModule,
|
||||
tia: tia as ResourceModule,
|
||||
trustCenter: trustCenter as ResourceModule,
|
||||
vendor: vendor as ResourceModule,
|
||||
thirdParty: thirdParty as ResourceModule,
|
||||
webhook: webhook as ResourceModule,
|
||||
};
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
@@ -36,12 +36,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The name of the vendor',
|
||||
description: 'The name of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -53,12 +53,12 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The description of the vendor',
|
||||
description: 'The description of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Category',
|
||||
@@ -66,12 +66,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The category of the vendor',
|
||||
description: 'The category of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Website URL',
|
||||
@@ -79,12 +79,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The website URL of the vendor',
|
||||
description: 'The website URL of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Legal Name',
|
||||
@@ -92,12 +92,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The legal name of the vendor',
|
||||
description: 'The legal name of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Headquarter Address',
|
||||
@@ -105,12 +105,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The headquarter address of the vendor',
|
||||
description: 'The headquarter address of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Business Owner ID',
|
||||
@@ -118,7 +118,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
@@ -131,7 +131,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
@@ -146,7 +146,7 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['create'],
|
||||
},
|
||||
},
|
||||
@@ -200,7 +200,7 @@ export const description: INodeProperties[] = [
|
||||
name: 'statusPageUrl',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'The status page URL of the vendor',
|
||||
description: 'The status page URL of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Subprocessors List URL',
|
||||
@@ -252,9 +252,9 @@ export async function execute(
|
||||
};
|
||||
|
||||
const query = `
|
||||
mutation CreateVendor($input: CreateVendorInput!) {
|
||||
createVendor(input: $input) {
|
||||
vendorEdge {
|
||||
mutation CreateThirdParty($input: CreateThirdPartyInput!) {
|
||||
createThirdParty(input: $input) {
|
||||
thirdPartyEdge {
|
||||
node {
|
||||
id
|
||||
name
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createContact'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createContact'],
|
||||
},
|
||||
},
|
||||
@@ -50,7 +50,7 @@ export const description: INodeProperties[] = [
|
||||
placeholder: 'name@email.com',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createContact'],
|
||||
},
|
||||
},
|
||||
@@ -63,7 +63,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createContact'],
|
||||
},
|
||||
},
|
||||
@@ -76,7 +76,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createContact'],
|
||||
},
|
||||
},
|
||||
@@ -89,16 +89,16 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const fullName = this.getNodeParameter('fullName', itemIndex, '') as string;
|
||||
const email = this.getNodeParameter('email', itemIndex, '') as string;
|
||||
const phone = this.getNodeParameter('phone', itemIndex, '') as string;
|
||||
const role = this.getNodeParameter('role', itemIndex, '') as string;
|
||||
|
||||
const query = `
|
||||
mutation CreateVendorContact($input: CreateVendorContactInput!) {
|
||||
createVendorContact(input: $input) {
|
||||
vendorContactEdge {
|
||||
mutation CreateThirdPartyContact($input: CreateThirdPartyContactInput!) {
|
||||
createThirdPartyContact(input: $input) {
|
||||
thirdPartyContactEdge {
|
||||
node {
|
||||
id
|
||||
fullName
|
||||
@@ -113,7 +113,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = { vendorId };
|
||||
const input: Record<string, unknown> = { thirdPartyId };
|
||||
if (fullName) input.fullName = fullName;
|
||||
if (email) input.email = email;
|
||||
if (phone) input.phone = phone;
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createRiskAssessment'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'dateTime',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createRiskAssessment'],
|
||||
},
|
||||
},
|
||||
@@ -50,7 +50,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'options',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createRiskAssessment'],
|
||||
},
|
||||
},
|
||||
@@ -71,7 +71,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'options',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createRiskAssessment'],
|
||||
},
|
||||
},
|
||||
@@ -94,7 +94,7 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createRiskAssessment'],
|
||||
},
|
||||
},
|
||||
@@ -107,7 +107,7 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const expiresAtRaw = this.getNodeParameter('expiresAt', itemIndex) as string;
|
||||
const dataSensitivity = this.getNodeParameter('dataSensitivity', itemIndex) as string;
|
||||
const businessImpact = this.getNodeParameter('businessImpact', itemIndex) as string;
|
||||
@@ -117,9 +117,9 @@ export async function execute(
|
||||
const expiresAt = new Date(expiresAtRaw).toISOString();
|
||||
|
||||
const query = `
|
||||
mutation CreateVendorRiskAssessment($input: CreateVendorRiskAssessmentInput!) {
|
||||
createVendorRiskAssessment(input: $input) {
|
||||
vendorRiskAssessmentEdge {
|
||||
mutation CreateThirdPartyRiskAssessment($input: CreateThirdPartyRiskAssessmentInput!) {
|
||||
createThirdPartyRiskAssessment(input: $input) {
|
||||
thirdPartyRiskAssessmentEdge {
|
||||
node {
|
||||
id
|
||||
expiresAt
|
||||
@@ -135,7 +135,7 @@ export async function execute(
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = {
|
||||
vendorId,
|
||||
thirdPartyId,
|
||||
expiresAt,
|
||||
dataSensitivity,
|
||||
businessImpact,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,12 +36,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The name of the vendor service',
|
||||
description: 'The name of the thirdParty service',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -53,12 +53,12 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['createService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The description of the vendor service',
|
||||
description: 'The description of the thirdParty service',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -66,14 +66,14 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const name = this.getNodeParameter('name', itemIndex) as string;
|
||||
const description = this.getNodeParameter('description', itemIndex, '') as string;
|
||||
|
||||
const query = `
|
||||
mutation CreateVendorService($input: CreateVendorServiceInput!) {
|
||||
createVendorService(input: $input) {
|
||||
vendorServiceEdge {
|
||||
mutation CreateThirdPartyService($input: CreateThirdPartyServiceInput!) {
|
||||
createThirdPartyService(input: $input) {
|
||||
thirdPartyServiceEdge {
|
||||
node {
|
||||
id
|
||||
name
|
||||
@@ -87,7 +87,7 @@ export async function execute(
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = {
|
||||
vendorId,
|
||||
thirdPartyId,
|
||||
name,
|
||||
};
|
||||
if (description) input.description = description;
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['delete'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor to delete',
|
||||
description: 'The ID of the thirdParty to delete',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,17 +36,17 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
mutation DeleteVendor($input: DeleteVendorInput!) {
|
||||
deleteVendor(input: $input) {
|
||||
deletedVendorId
|
||||
mutation DeleteThirdParty($input: DeleteThirdPartyInput!) {
|
||||
deleteThirdParty(input: $input) {
|
||||
deletedThirdPartyId
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { vendorId } });
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { thirdPartyId } });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['deleteBusinessAssociateAgreement'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,17 +36,17 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
mutation DeleteVendorBusinessAssociateAgreement($input: DeleteVendorBusinessAssociateAgreementInput!) {
|
||||
deleteVendorBusinessAssociateAgreement(input: $input) {
|
||||
deletedVendorBusinessAssociateAgreementId
|
||||
mutation DeleteThirdPartyBusinessAssociateAgreement($input: DeleteThirdPartyBusinessAssociateAgreementInput!) {
|
||||
deleteThirdPartyBusinessAssociateAgreement(input: $input) {
|
||||
deletedThirdPartyBusinessAssociateAgreementId
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { vendorId } });
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { thirdPartyId } });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Compliance Report ID',
|
||||
name: 'vendorComplianceReportId',
|
||||
displayName: 'ThirdParty Compliance Report ID',
|
||||
name: 'thirdPartyComplianceReportId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['deleteComplianceReport'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor compliance report to delete',
|
||||
description: 'The ID of the thirdParty compliance report to delete',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,17 +36,17 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorComplianceReportId = this.getNodeParameter('vendorComplianceReportId', itemIndex) as string;
|
||||
const thirdPartyComplianceReportId = this.getNodeParameter('thirdPartyComplianceReportId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
mutation DeleteVendorComplianceReport($input: DeleteVendorComplianceReportInput!) {
|
||||
deleteVendorComplianceReport(input: $input) {
|
||||
deletedVendorComplianceReportId
|
||||
mutation DeleteThirdPartyComplianceReport($input: DeleteThirdPartyComplianceReportInput!) {
|
||||
deleteThirdPartyComplianceReport(input: $input) {
|
||||
deletedThirdPartyComplianceReportId
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { vendorComplianceReportId } });
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { thirdPartyComplianceReportId } });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Contact ID',
|
||||
name: 'vendorContactId',
|
||||
displayName: 'ThirdParty Contact ID',
|
||||
name: 'thirdPartyContactId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['deleteContact'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor contact to delete',
|
||||
description: 'The ID of the thirdParty contact to delete',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,17 +36,17 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorContactId = this.getNodeParameter('vendorContactId', itemIndex) as string;
|
||||
const thirdPartyContactId = this.getNodeParameter('thirdPartyContactId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
mutation DeleteVendorContact($input: DeleteVendorContactInput!) {
|
||||
deleteVendorContact(input: $input) {
|
||||
deletedVendorContactId
|
||||
mutation DeleteThirdPartyContact($input: DeleteThirdPartyContactInput!) {
|
||||
deleteThirdPartyContact(input: $input) {
|
||||
deletedThirdPartyContactId
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { vendorContactId } });
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { thirdPartyContactId } });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['deleteDataPrivacyAgreement'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,17 +36,17 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
mutation DeleteVendorDataPrivacyAgreement($input: DeleteVendorDataPrivacyAgreementInput!) {
|
||||
deleteVendorDataPrivacyAgreement(input: $input) {
|
||||
deletedVendorDataPrivacyAgreementId
|
||||
mutation DeleteThirdPartyDataPrivacyAgreement($input: DeleteThirdPartyDataPrivacyAgreementInput!) {
|
||||
deleteThirdPartyDataPrivacyAgreement(input: $input) {
|
||||
deletedThirdPartyDataPrivacyAgreementId
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { vendorId } });
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { thirdPartyId } });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Service ID',
|
||||
name: 'vendorServiceId',
|
||||
displayName: 'ThirdParty Service ID',
|
||||
name: 'thirdPartyServiceId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['deleteService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor service to delete',
|
||||
description: 'The ID of the thirdParty service to delete',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,17 +36,17 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorServiceId = this.getNodeParameter('vendorServiceId', itemIndex) as string;
|
||||
const thirdPartyServiceId = this.getNodeParameter('thirdPartyServiceId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
mutation DeleteVendorService($input: DeleteVendorServiceInput!) {
|
||||
deleteVendorService(input: $input) {
|
||||
deletedVendorServiceId
|
||||
mutation DeleteThirdPartyService($input: DeleteThirdPartyServiceInput!) {
|
||||
deleteThirdPartyService(input: $input) {
|
||||
deletedThirdPartyServiceId
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { vendorServiceId } });
|
||||
const responseData = await proboApiRequest.call(this, query, { input: { thirdPartyServiceId } });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['get'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -38,7 +38,7 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['get'],
|
||||
},
|
||||
},
|
||||
@@ -72,7 +72,7 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeOrganization?: boolean;
|
||||
includeBusinessOwner?: boolean;
|
||||
@@ -103,9 +103,9 @@ export async function execute(
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendor($vendorId: ID!) {
|
||||
node(id: $vendorId) {
|
||||
... on Vendor {
|
||||
query GetThirdParty($thirdPartyId: ID!) {
|
||||
node(id: $thirdPartyId) {
|
||||
... on ThirdParty {
|
||||
id
|
||||
name
|
||||
description
|
||||
@@ -136,7 +136,7 @@ export async function execute(
|
||||
`;
|
||||
|
||||
const variables = {
|
||||
vendorId,
|
||||
thirdPartyId,
|
||||
};
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, variables);
|
||||
@@ -22,7 +22,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAll'],
|
||||
},
|
||||
},
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAll'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'number',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAll'],
|
||||
returnAll: [false],
|
||||
},
|
||||
@@ -68,7 +68,7 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAll'],
|
||||
},
|
||||
},
|
||||
@@ -135,10 +135,10 @@ export async function execute(
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendors($organizationId: ID!, $first: Int, $after: CursorKey) {
|
||||
query GetThirdParties($organizationId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $organizationId) {
|
||||
... on Organization {
|
||||
vendors(first: $first, after: $after) {
|
||||
thirdParties(first: $first, after: $after) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
@@ -177,21 +177,21 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const vendors = await proboApiRequestAllItems.call(
|
||||
const thirdParties = await proboApiRequestAllItems.call(
|
||||
this,
|
||||
query,
|
||||
{ organizationId },
|
||||
(response) => {
|
||||
const data = response?.data as IDataObject | undefined;
|
||||
const node = data?.node as IDataObject | undefined;
|
||||
return node?.vendors as IDataObject | undefined;
|
||||
return node?.thirdParties as IDataObject | undefined;
|
||||
},
|
||||
returnAll,
|
||||
limit,
|
||||
);
|
||||
|
||||
return {
|
||||
json: { vendors },
|
||||
json: { thirdParties },
|
||||
pairedItem: { item: itemIndex },
|
||||
};
|
||||
}
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequestAllItems } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllComplianceReports'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllComplianceReports'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'number',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllComplianceReports'],
|
||||
returnAll: [false],
|
||||
},
|
||||
@@ -66,14 +66,14 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const returnAll = this.getNodeParameter('returnAll', itemIndex) as boolean;
|
||||
const limit = this.getNodeParameter('limit', itemIndex, 50) as number;
|
||||
|
||||
const query = `
|
||||
query GetVendorComplianceReports($vendorId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $vendorId) {
|
||||
... on Vendor {
|
||||
query GetThirdPartyComplianceReports($thirdPartyId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $thirdPartyId) {
|
||||
... on ThirdParty {
|
||||
complianceReports(first: $first, after: $after) {
|
||||
edges {
|
||||
node {
|
||||
@@ -95,10 +95,10 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const vendorComplianceReports = await proboApiRequestAllItems.call(
|
||||
const thirdPartyComplianceReports = await proboApiRequestAllItems.call(
|
||||
this,
|
||||
query,
|
||||
{ vendorId },
|
||||
{ thirdPartyId },
|
||||
(response) => {
|
||||
const data = response?.data as IDataObject | undefined;
|
||||
const node = data?.node as IDataObject | undefined;
|
||||
@@ -109,7 +109,7 @@ export async function execute(
|
||||
);
|
||||
|
||||
return {
|
||||
json: { vendorComplianceReports },
|
||||
json: { thirdPartyComplianceReports },
|
||||
pairedItem: { item: itemIndex },
|
||||
};
|
||||
}
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequestAllItems } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllContacts'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllContacts'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'number',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllContacts'],
|
||||
returnAll: [false],
|
||||
},
|
||||
@@ -68,17 +68,17 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllContacts'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Include Vendor',
|
||||
name: 'includeVendor',
|
||||
displayName: 'Include ThirdParty',
|
||||
name: 'includeThirdParty',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendor in the response',
|
||||
description: 'Whether to include thirdParty in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -88,24 +88,24 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const returnAll = this.getNodeParameter('returnAll', itemIndex) as boolean;
|
||||
const limit = this.getNodeParameter('limit', itemIndex, 50) as number;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeVendor?: boolean;
|
||||
includeThirdParty?: boolean;
|
||||
};
|
||||
|
||||
const vendorFragment = options.includeVendor
|
||||
? `vendor {
|
||||
const thirdPartyFragment = options.includeThirdParty
|
||||
? `thirdParty {
|
||||
id
|
||||
name
|
||||
}`
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendorContacts($vendorId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $vendorId) {
|
||||
... on Vendor {
|
||||
query GetThirdPartyContacts($thirdPartyId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $thirdPartyId) {
|
||||
... on ThirdParty {
|
||||
contacts(first: $first, after: $after) {
|
||||
edges {
|
||||
node {
|
||||
@@ -114,7 +114,7 @@ export async function execute(
|
||||
email
|
||||
phone
|
||||
role
|
||||
${vendorFragment}
|
||||
${thirdPartyFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -129,10 +129,10 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const vendorContacts = await proboApiRequestAllItems.call(
|
||||
const thirdPartyContacts = await proboApiRequestAllItems.call(
|
||||
this,
|
||||
query,
|
||||
{ vendorId },
|
||||
{ thirdPartyId },
|
||||
(response) => {
|
||||
const data = response?.data as IDataObject | undefined;
|
||||
const node = data?.node as IDataObject | undefined;
|
||||
@@ -143,7 +143,7 @@ export async function execute(
|
||||
);
|
||||
|
||||
return {
|
||||
json: { vendorContacts },
|
||||
json: { thirdPartyContacts },
|
||||
pairedItem: { item: itemIndex },
|
||||
};
|
||||
}
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequestAllItems } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllRiskAssessments'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllRiskAssessments'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'number',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllRiskAssessments'],
|
||||
returnAll: [false],
|
||||
},
|
||||
@@ -68,17 +68,17 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllRiskAssessments'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Include Vendor',
|
||||
name: 'includeVendor',
|
||||
displayName: 'Include ThirdParty',
|
||||
name: 'includeThirdParty',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendor in the response',
|
||||
description: 'Whether to include thirdParty in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -88,24 +88,24 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const returnAll = this.getNodeParameter('returnAll', itemIndex) as boolean;
|
||||
const limit = this.getNodeParameter('limit', itemIndex, 50) as number;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeVendor?: boolean;
|
||||
includeThirdParty?: boolean;
|
||||
};
|
||||
|
||||
const vendorFragment = options.includeVendor
|
||||
? `vendor {
|
||||
const thirdPartyFragment = options.includeThirdParty
|
||||
? `thirdParty {
|
||||
id
|
||||
name
|
||||
}`
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendorRiskAssessments($vendorId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $vendorId) {
|
||||
... on Vendor {
|
||||
query GetThirdPartyRiskAssessments($thirdPartyId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $thirdPartyId) {
|
||||
... on ThirdParty {
|
||||
riskAssessments(first: $first, after: $after) {
|
||||
edges {
|
||||
node {
|
||||
@@ -114,7 +114,7 @@ export async function execute(
|
||||
dataSensitivity
|
||||
businessImpact
|
||||
notes
|
||||
${vendorFragment}
|
||||
${thirdPartyFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -129,10 +129,10 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const vendorRiskAssessments = await proboApiRequestAllItems.call(
|
||||
const thirdPartyRiskAssessments = await proboApiRequestAllItems.call(
|
||||
this,
|
||||
query,
|
||||
{ vendorId },
|
||||
{ thirdPartyId },
|
||||
(response) => {
|
||||
const data = response?.data as IDataObject | undefined;
|
||||
const node = data?.node as IDataObject | undefined;
|
||||
@@ -143,7 +143,7 @@ export async function execute(
|
||||
);
|
||||
|
||||
return {
|
||||
json: { vendorRiskAssessments },
|
||||
json: { thirdPartyRiskAssessments },
|
||||
pairedItem: { item: itemIndex },
|
||||
};
|
||||
}
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequestAllItems } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllServices'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllServices'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'number',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllServices'],
|
||||
returnAll: [false],
|
||||
},
|
||||
@@ -68,17 +68,17 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getAllServices'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Include Vendor',
|
||||
name: 'includeVendor',
|
||||
displayName: 'Include ThirdParty',
|
||||
name: 'includeThirdParty',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendor in the response',
|
||||
description: 'Whether to include thirdParty in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -88,31 +88,31 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const returnAll = this.getNodeParameter('returnAll', itemIndex) as boolean;
|
||||
const limit = this.getNodeParameter('limit', itemIndex, 50) as number;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeVendor?: boolean;
|
||||
includeThirdParty?: boolean;
|
||||
};
|
||||
|
||||
const vendorFragment = options.includeVendor
|
||||
? `vendor {
|
||||
const thirdPartyFragment = options.includeThirdParty
|
||||
? `thirdParty {
|
||||
id
|
||||
name
|
||||
}`
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendorServices($vendorId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $vendorId) {
|
||||
... on Vendor {
|
||||
query GetThirdPartyServices($thirdPartyId: ID!, $first: Int, $after: CursorKey) {
|
||||
node(id: $thirdPartyId) {
|
||||
... on ThirdParty {
|
||||
services(first: $first, after: $after) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
name
|
||||
description
|
||||
${vendorFragment}
|
||||
${thirdPartyFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -127,10 +127,10 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const vendorServices = await proboApiRequestAllItems.call(
|
||||
const thirdPartyServices = await proboApiRequestAllItems.call(
|
||||
this,
|
||||
query,
|
||||
{ vendorId },
|
||||
{ thirdPartyId },
|
||||
(response) => {
|
||||
const data = response?.data as IDataObject | undefined;
|
||||
const node = data?.node as IDataObject | undefined;
|
||||
@@ -141,7 +141,7 @@ export async function execute(
|
||||
);
|
||||
|
||||
return {
|
||||
json: { vendorServices },
|
||||
json: { thirdPartyServices },
|
||||
pairedItem: { item: itemIndex },
|
||||
};
|
||||
}
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getBusinessAssociateAgreement'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,12 +36,12 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
query GetVendorBusinessAssociateAgreement($vendorId: ID!) {
|
||||
node(id: $vendorId) {
|
||||
... on Vendor {
|
||||
query GetThirdPartyBusinessAssociateAgreement($thirdPartyId: ID!) {
|
||||
node(id: $thirdPartyId) {
|
||||
... on ThirdParty {
|
||||
businessAssociateAgreement {
|
||||
id
|
||||
validFrom
|
||||
@@ -57,7 +57,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { vendorId });
|
||||
const responseData = await proboApiRequest.call(this, query, { thirdPartyId });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Contact ID',
|
||||
name: 'vendorContactId',
|
||||
displayName: 'ThirdParty Contact ID',
|
||||
name: 'thirdPartyContactId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getContact'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor contact',
|
||||
description: 'The ID of the thirdParty contact',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -38,17 +38,17 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getContact'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Include Vendor',
|
||||
name: 'includeVendor',
|
||||
displayName: 'Include ThirdParty',
|
||||
name: 'includeThirdParty',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendor in the response',
|
||||
description: 'Whether to include thirdParty in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -58,28 +58,28 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorContactId = this.getNodeParameter('vendorContactId', itemIndex) as string;
|
||||
const thirdPartyContactId = this.getNodeParameter('thirdPartyContactId', itemIndex) as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeVendor?: boolean;
|
||||
includeThirdParty?: boolean;
|
||||
};
|
||||
|
||||
const vendorFragment = options.includeVendor
|
||||
? `vendor {
|
||||
const thirdPartyFragment = options.includeThirdParty
|
||||
? `thirdParty {
|
||||
id
|
||||
name
|
||||
}`
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendorContact($vendorContactId: ID!) {
|
||||
node(id: $vendorContactId) {
|
||||
... on VendorContact {
|
||||
query GetThirdPartyContact($thirdPartyContactId: ID!) {
|
||||
node(id: $thirdPartyContactId) {
|
||||
... on ThirdPartyContact {
|
||||
id
|
||||
fullName
|
||||
email
|
||||
phone
|
||||
role
|
||||
${vendorFragment}
|
||||
${thirdPartyFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -87,7 +87,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { vendorContactId });
|
||||
const responseData = await proboApiRequest.call(this, query, { thirdPartyContactId });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getDataPrivacyAgreement'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
];
|
||||
@@ -36,12 +36,12 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
|
||||
const query = `
|
||||
query GetVendorDataPrivacyAgreement($vendorId: ID!) {
|
||||
node(id: $vendorId) {
|
||||
... on Vendor {
|
||||
query GetThirdPartyDataPrivacyAgreement($thirdPartyId: ID!) {
|
||||
node(id: $thirdPartyId) {
|
||||
... on ThirdParty {
|
||||
dataPrivacyAgreement {
|
||||
id
|
||||
validFrom
|
||||
@@ -57,7 +57,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, { vendorId });
|
||||
const responseData = await proboApiRequest.call(this, query, { thirdPartyId });
|
||||
|
||||
return {
|
||||
json: responseData,
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Risk Assessment ID',
|
||||
name: 'vendorRiskAssessmentId',
|
||||
displayName: 'ThirdParty Risk Assessment ID',
|
||||
name: 'thirdPartyRiskAssessmentId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getRiskAssessment'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor risk assessment',
|
||||
description: 'The ID of the thirdParty risk assessment',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -38,17 +38,17 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getRiskAssessment'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Include Vendor',
|
||||
name: 'includeVendor',
|
||||
displayName: 'Include ThirdParty',
|
||||
name: 'includeThirdParty',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendor in the response',
|
||||
description: 'Whether to include thirdParty in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -58,28 +58,28 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorRiskAssessmentId = this.getNodeParameter('vendorRiskAssessmentId', itemIndex) as string;
|
||||
const thirdPartyRiskAssessmentId = this.getNodeParameter('thirdPartyRiskAssessmentId', itemIndex) as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeVendor?: boolean;
|
||||
includeThirdParty?: boolean;
|
||||
};
|
||||
|
||||
const vendorFragment = options.includeVendor
|
||||
? `vendor {
|
||||
const thirdPartyFragment = options.includeThirdParty
|
||||
? `thirdParty {
|
||||
id
|
||||
name
|
||||
}`
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendorRiskAssessment($vendorRiskAssessmentId: ID!) {
|
||||
node(id: $vendorRiskAssessmentId) {
|
||||
... on VendorRiskAssessment {
|
||||
query GetThirdPartyRiskAssessment($thirdPartyRiskAssessmentId: ID!) {
|
||||
node(id: $thirdPartyRiskAssessmentId) {
|
||||
... on ThirdPartyRiskAssessment {
|
||||
id
|
||||
expiresAt
|
||||
dataSensitivity
|
||||
businessImpact
|
||||
notes
|
||||
${vendorFragment}
|
||||
${thirdPartyFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -88,7 +88,7 @@ export async function execute(
|
||||
`;
|
||||
|
||||
const variables = {
|
||||
vendorRiskAssessmentId,
|
||||
thirdPartyRiskAssessmentId,
|
||||
};
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, variables);
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Service ID',
|
||||
name: 'vendorServiceId',
|
||||
displayName: 'ThirdParty Service ID',
|
||||
name: 'thirdPartyServiceId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor service',
|
||||
description: 'The ID of the thirdParty service',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -38,17 +38,17 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['getService'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Include Vendor',
|
||||
name: 'includeVendor',
|
||||
displayName: 'Include ThirdParty',
|
||||
name: 'includeThirdParty',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to include vendor in the response',
|
||||
description: 'Whether to include thirdParty in the response',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -58,26 +58,26 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorServiceId = this.getNodeParameter('vendorServiceId', itemIndex) as string;
|
||||
const thirdPartyServiceId = this.getNodeParameter('thirdPartyServiceId', itemIndex) as string;
|
||||
const options = this.getNodeParameter('options', itemIndex, {}) as {
|
||||
includeVendor?: boolean;
|
||||
includeThirdParty?: boolean;
|
||||
};
|
||||
|
||||
const vendorFragment = options.includeVendor
|
||||
? `vendor {
|
||||
const thirdPartyFragment = options.includeThirdParty
|
||||
? `thirdParty {
|
||||
id
|
||||
name
|
||||
}`
|
||||
: '';
|
||||
|
||||
const query = `
|
||||
query GetVendorService($vendorServiceId: ID!) {
|
||||
node(id: $vendorServiceId) {
|
||||
... on VendorService {
|
||||
query GetThirdPartyService($thirdPartyServiceId: ID!) {
|
||||
node(id: $thirdPartyServiceId) {
|
||||
... on ThirdPartyService {
|
||||
id
|
||||
name
|
||||
description
|
||||
${vendorFragment}
|
||||
${thirdPartyFragment}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
@@ -86,7 +86,7 @@ export async function execute(
|
||||
`;
|
||||
|
||||
const variables = {
|
||||
vendorServiceId,
|
||||
thirdPartyServiceId,
|
||||
};
|
||||
|
||||
const responseData = await proboApiRequest.call(this, query, variables);
|
||||
@@ -49,171 +49,171 @@ export const description: INodeProperties[] = [
|
||||
noDataExpression: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Create',
|
||||
value: 'create',
|
||||
description: 'Create a new vendor',
|
||||
action: 'Create a vendor',
|
||||
description: 'Create a new third party',
|
||||
action: 'Create a third party',
|
||||
},
|
||||
{
|
||||
name: 'Create Contact',
|
||||
value: 'createContact',
|
||||
description: 'Create a new vendor contact',
|
||||
action: 'Create a vendor contact',
|
||||
description: 'Create a new third party contact',
|
||||
action: 'Create a third party contact',
|
||||
},
|
||||
{
|
||||
name: 'Create Risk Assessment',
|
||||
value: 'createRiskAssessment',
|
||||
description: 'Create a new vendor risk assessment',
|
||||
action: 'Create a vendor risk assessment',
|
||||
description: 'Create a new third party risk assessment',
|
||||
action: 'Create a third party risk assessment',
|
||||
},
|
||||
{
|
||||
name: 'Create Service',
|
||||
value: 'createService',
|
||||
description: 'Create a new vendor service',
|
||||
action: 'Create a vendor service',
|
||||
description: 'Create a new third party service',
|
||||
action: 'Create a third party service',
|
||||
},
|
||||
{
|
||||
name: 'Delete',
|
||||
value: 'delete',
|
||||
description: 'Delete a vendor',
|
||||
action: 'Delete a vendor',
|
||||
description: 'Delete a third party',
|
||||
action: 'Delete a third party',
|
||||
},
|
||||
{
|
||||
name: 'Delete Business Associate Agreement',
|
||||
value: 'deleteBusinessAssociateAgreement',
|
||||
description: 'Delete a vendor business associate agreement',
|
||||
action: 'Delete a vendor business associate agreement',
|
||||
description: 'Delete a third party business associate agreement',
|
||||
action: 'Delete a third party business associate agreement',
|
||||
},
|
||||
{
|
||||
name: 'Delete Compliance Report',
|
||||
value: 'deleteComplianceReport',
|
||||
description: 'Delete a vendor compliance report',
|
||||
action: 'Delete a vendor compliance report',
|
||||
description: 'Delete a third party compliance report',
|
||||
action: 'Delete a third party compliance report',
|
||||
},
|
||||
{
|
||||
name: 'Delete Contact',
|
||||
value: 'deleteContact',
|
||||
description: 'Delete a vendor contact',
|
||||
action: 'Delete a vendor contact',
|
||||
description: 'Delete a third party contact',
|
||||
action: 'Delete a third party contact',
|
||||
},
|
||||
{
|
||||
name: 'Delete Data Privacy Agreement',
|
||||
value: 'deleteDataPrivacyAgreement',
|
||||
description: 'Delete a vendor data privacy agreement',
|
||||
action: 'Delete a vendor data privacy agreement',
|
||||
description: 'Delete a third party data privacy agreement',
|
||||
action: 'Delete a third party data privacy agreement',
|
||||
},
|
||||
{
|
||||
name: 'Delete Service',
|
||||
value: 'deleteService',
|
||||
description: 'Delete a vendor service',
|
||||
action: 'Delete a vendor service',
|
||||
description: 'Delete a third party service',
|
||||
action: 'Delete a third party service',
|
||||
},
|
||||
{
|
||||
name: 'Get',
|
||||
value: 'get',
|
||||
description: 'Get a vendor',
|
||||
action: 'Get a vendor',
|
||||
description: 'Get a third party',
|
||||
action: 'Get a third party',
|
||||
},
|
||||
{
|
||||
name: 'Get Business Associate Agreement',
|
||||
value: 'getBusinessAssociateAgreement',
|
||||
description: 'Get a vendor business associate agreement',
|
||||
action: 'Get a vendor business associate agreement',
|
||||
description: 'Get a third party business associate agreement',
|
||||
action: 'Get a third party business associate agreement',
|
||||
},
|
||||
{
|
||||
name: 'Get Contact',
|
||||
value: 'getContact',
|
||||
description: 'Get a vendor contact',
|
||||
action: 'Get a vendor contact',
|
||||
description: 'Get a third party contact',
|
||||
action: 'Get a third party contact',
|
||||
},
|
||||
{
|
||||
name: 'Get Data Privacy Agreement',
|
||||
value: 'getDataPrivacyAgreement',
|
||||
description: 'Get a vendor data privacy agreement',
|
||||
action: 'Get a vendor data privacy agreement',
|
||||
description: 'Get a third party data privacy agreement',
|
||||
action: 'Get a third party data privacy agreement',
|
||||
},
|
||||
{
|
||||
name: 'Get Many',
|
||||
value: 'getAll',
|
||||
description: 'Get many vendors',
|
||||
action: 'Get many vendors',
|
||||
description: 'Get many third parties',
|
||||
action: 'Get many third parties',
|
||||
},
|
||||
{
|
||||
name: 'Get Many Compliance Reports',
|
||||
value: 'getAllComplianceReports',
|
||||
description: 'Get many vendor compliance reports',
|
||||
action: 'Get many vendor compliance reports',
|
||||
description: 'Get many third party compliance reports',
|
||||
action: 'Get many third party compliance reports',
|
||||
},
|
||||
{
|
||||
name: 'Get Many Contacts',
|
||||
value: 'getAllContacts',
|
||||
description: 'Get many vendor contacts',
|
||||
action: 'Get many vendor contacts',
|
||||
description: 'Get many third party contacts',
|
||||
action: 'Get many third party contacts',
|
||||
},
|
||||
{
|
||||
name: 'Get Many Risk Assessments',
|
||||
value: 'getAllRiskAssessments',
|
||||
description: 'Get many vendor risk assessments',
|
||||
action: 'Get many vendor risk assessments',
|
||||
description: 'Get many third party risk assessments',
|
||||
action: 'Get many third party risk assessments',
|
||||
},
|
||||
{
|
||||
name: 'Get Many Services',
|
||||
value: 'getAllServices',
|
||||
description: 'Get many vendor services',
|
||||
action: 'Get many vendor services',
|
||||
description: 'Get many third party services',
|
||||
action: 'Get many third party services',
|
||||
},
|
||||
{
|
||||
name: 'Get Risk Assessment',
|
||||
value: 'getRiskAssessment',
|
||||
description: 'Get a vendor risk assessment',
|
||||
action: 'Get a vendor risk assessment',
|
||||
description: 'Get a third party risk assessment',
|
||||
action: 'Get a third party risk assessment',
|
||||
},
|
||||
{
|
||||
name: 'Get Service',
|
||||
value: 'getService',
|
||||
description: 'Get a vendor service',
|
||||
action: 'Get a vendor service',
|
||||
description: 'Get a third party service',
|
||||
action: 'Get a third party service',
|
||||
},
|
||||
{
|
||||
name: 'Publish List',
|
||||
value: 'publish',
|
||||
description: 'Publish the vendor register as a document version',
|
||||
action: 'Publish the vendor register',
|
||||
description: 'Publish the third party register as a document version',
|
||||
action: 'Publish the third party register',
|
||||
},
|
||||
{
|
||||
name: 'Update',
|
||||
value: 'update',
|
||||
description: 'Update an existing vendor',
|
||||
action: 'Update a vendor',
|
||||
description: 'Update an existing third party',
|
||||
action: 'Update a third party',
|
||||
},
|
||||
{
|
||||
name: 'Update Business Associate Agreement',
|
||||
value: 'updateBusinessAssociateAgreement',
|
||||
description: 'Update a vendor business associate agreement validity',
|
||||
action: 'Update a vendor business associate agreement',
|
||||
description: 'Update a third party business associate agreement validity',
|
||||
action: 'Update a third party business associate agreement',
|
||||
},
|
||||
{
|
||||
name: 'Update Contact',
|
||||
value: 'updateContact',
|
||||
description: 'Update an existing vendor contact',
|
||||
action: 'Update a vendor contact',
|
||||
description: 'Update an existing third party contact',
|
||||
action: 'Update a third party contact',
|
||||
},
|
||||
{
|
||||
name: 'Update Data Privacy Agreement',
|
||||
value: 'updateDataPrivacyAgreement',
|
||||
description: 'Update a vendor data privacy agreement validity',
|
||||
action: 'Update a vendor data privacy agreement',
|
||||
description: 'Update a third party data privacy agreement validity',
|
||||
action: 'Update a third party data privacy agreement',
|
||||
},
|
||||
{
|
||||
name: 'Update Service',
|
||||
value: 'updateService',
|
||||
description: 'Update an existing vendor service',
|
||||
action: 'Update a vendor service',
|
||||
description: 'Update an existing third party service',
|
||||
action: 'Update a third party service',
|
||||
},
|
||||
],
|
||||
default: 'create',
|
||||
@@ -22,12 +22,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['publish'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the organization whose vendor list to publish',
|
||||
description: 'The ID of the organization whose thirdParty list to publish',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['publish'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['publish'],
|
||||
},
|
||||
},
|
||||
@@ -67,8 +67,8 @@ export async function execute(
|
||||
const minor = this.getNodeParameter('minor', itemIndex, false) as boolean;
|
||||
|
||||
const query = `
|
||||
mutation PublishVendorList($input: PublishVendorListInput!) {
|
||||
publishVendorList(input: $input) {
|
||||
mutation PublishThirdPartyList($input: PublishThirdPartyListInput!) {
|
||||
publishThirdPartyList(input: $input) {
|
||||
documentEdge {
|
||||
node {
|
||||
id
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor to update',
|
||||
description: 'The ID of the thirdParty to update',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,12 +36,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The name of the vendor',
|
||||
description: 'The name of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Description',
|
||||
@@ -52,12 +52,12 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The description of the vendor',
|
||||
description: 'The description of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Category',
|
||||
@@ -65,12 +65,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The category of the vendor',
|
||||
description: 'The category of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Website URL',
|
||||
@@ -78,12 +78,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The website URL of the vendor',
|
||||
description: 'The website URL of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Legal Name',
|
||||
@@ -91,12 +91,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The legal name of the vendor',
|
||||
description: 'The legal name of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Headquarter Address',
|
||||
@@ -104,12 +104,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The headquarter address of the vendor',
|
||||
description: 'The headquarter address of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Business Owner ID',
|
||||
@@ -117,7 +117,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
@@ -130,7 +130,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
@@ -143,12 +143,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
default: false,
|
||||
description: 'Whether to show the vendor on the trust center',
|
||||
description: 'Whether to show the thirdParty on the trust center',
|
||||
},
|
||||
{
|
||||
displayName: 'Additional Fields',
|
||||
@@ -158,7 +158,7 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['update'],
|
||||
},
|
||||
},
|
||||
@@ -212,7 +212,7 @@ export const description: INodeProperties[] = [
|
||||
name: 'statusPageUrl',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'The status page URL of the vendor',
|
||||
description: 'The status page URL of the thirdParty',
|
||||
},
|
||||
{
|
||||
displayName: 'Subprocessors List URL',
|
||||
@@ -240,7 +240,7 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const name = this.getNodeParameter('name', itemIndex, '') as string;
|
||||
const description = this.getNodeParameter('description', itemIndex, '') as string;
|
||||
const category = this.getNodeParameter('category', itemIndex, '') as string;
|
||||
@@ -265,9 +265,9 @@ export async function execute(
|
||||
};
|
||||
|
||||
const query = `
|
||||
mutation UpdateVendor($input: UpdateVendorInput!) {
|
||||
updateVendor(input: $input) {
|
||||
vendor {
|
||||
mutation UpdateThirdParty($input: UpdateThirdPartyInput!) {
|
||||
updateThirdParty(input: $input) {
|
||||
thirdParty {
|
||||
id
|
||||
name
|
||||
description
|
||||
@@ -294,7 +294,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = { id: vendorId };
|
||||
const input: Record<string, unknown> = { id: thirdPartyId };
|
||||
if (name) input.name = name;
|
||||
if (description !== undefined) input.description = description === '' ? null : description;
|
||||
if (category) input.category = category;
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateBusinessAssociateAgreement'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateBusinessAssociateAgreement'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateBusinessAssociateAgreement'],
|
||||
},
|
||||
},
|
||||
@@ -62,14 +62,14 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const validFrom = this.getNodeParameter('validFrom', itemIndex, '') as string;
|
||||
const validUntil = this.getNodeParameter('validUntil', itemIndex, '') as string;
|
||||
|
||||
const query = `
|
||||
mutation UpdateVendorBusinessAssociateAgreement($input: UpdateVendorBusinessAssociateAgreementInput!) {
|
||||
updateVendorBusinessAssociateAgreement(input: $input) {
|
||||
vendorBusinessAssociateAgreement {
|
||||
mutation UpdateThirdPartyBusinessAssociateAgreement($input: UpdateThirdPartyBusinessAssociateAgreementInput!) {
|
||||
updateThirdPartyBusinessAssociateAgreement(input: $input) {
|
||||
thirdPartyBusinessAssociateAgreement {
|
||||
id
|
||||
validFrom
|
||||
validUntil
|
||||
@@ -78,7 +78,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = { vendorId };
|
||||
const input: Record<string, unknown> = { thirdPartyId };
|
||||
if (validFrom) input.validFrom = validFrom;
|
||||
if (validUntil) input.validUntil = validUntil;
|
||||
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Contact ID',
|
||||
name: 'vendorContactId',
|
||||
displayName: 'ThirdParty Contact ID',
|
||||
name: 'thirdPartyContactId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateContact'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor contact to update',
|
||||
description: 'The ID of the thirdParty contact to update',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -38,7 +38,7 @@ export const description: INodeProperties[] = [
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateContact'],
|
||||
},
|
||||
},
|
||||
@@ -80,7 +80,7 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorContactId = this.getNodeParameter('vendorContactId', itemIndex) as string;
|
||||
const thirdPartyContactId = this.getNodeParameter('thirdPartyContactId', itemIndex) as string;
|
||||
const additionalFields = this.getNodeParameter('additionalFields', itemIndex, {}) as {
|
||||
fullName?: string;
|
||||
email?: string;
|
||||
@@ -89,9 +89,9 @@ export async function execute(
|
||||
};
|
||||
|
||||
const query = `
|
||||
mutation UpdateVendorContact($input: UpdateVendorContactInput!) {
|
||||
updateVendorContact(input: $input) {
|
||||
vendorContact {
|
||||
mutation UpdateThirdPartyContact($input: UpdateThirdPartyContactInput!) {
|
||||
updateThirdPartyContact(input: $input) {
|
||||
thirdPartyContact {
|
||||
id
|
||||
fullName
|
||||
email
|
||||
@@ -104,7 +104,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = { id: vendorContactId };
|
||||
const input: Record<string, unknown> = { id: thirdPartyContactId };
|
||||
if (additionalFields.fullName !== undefined) input.fullName = additionalFields.fullName === '' ? null : additionalFields.fullName;
|
||||
if (additionalFields.email !== undefined) input.email = additionalFields.email === '' ? null : additionalFields.email;
|
||||
if (additionalFields.phone !== undefined) input.phone = additionalFields.phone === '' ? null : additionalFields.phone;
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor ID',
|
||||
name: 'vendorId',
|
||||
displayName: 'ThirdParty ID',
|
||||
name: 'thirdPartyId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateDataPrivacyAgreement'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor',
|
||||
description: 'The ID of the thirdParty',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,7 +36,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateDataPrivacyAgreement'],
|
||||
},
|
||||
},
|
||||
@@ -49,7 +49,7 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateDataPrivacyAgreement'],
|
||||
},
|
||||
},
|
||||
@@ -62,14 +62,14 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorId = this.getNodeParameter('vendorId', itemIndex) as string;
|
||||
const thirdPartyId = this.getNodeParameter('thirdPartyId', itemIndex) as string;
|
||||
const validFrom = this.getNodeParameter('validFrom', itemIndex, '') as string;
|
||||
const validUntil = this.getNodeParameter('validUntil', itemIndex, '') as string;
|
||||
|
||||
const query = `
|
||||
mutation UpdateVendorDataPrivacyAgreement($input: UpdateVendorDataPrivacyAgreementInput!) {
|
||||
updateVendorDataPrivacyAgreement(input: $input) {
|
||||
vendorDataPrivacyAgreement {
|
||||
mutation UpdateThirdPartyDataPrivacyAgreement($input: UpdateThirdPartyDataPrivacyAgreementInput!) {
|
||||
updateThirdPartyDataPrivacyAgreement(input: $input) {
|
||||
thirdPartyDataPrivacyAgreement {
|
||||
id
|
||||
validFrom
|
||||
validUntil
|
||||
@@ -78,7 +78,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = { vendorId };
|
||||
const input: Record<string, unknown> = { thirdPartyId };
|
||||
if (validFrom) input.validFrom = validFrom;
|
||||
if (validUntil) input.validUntil = validUntil;
|
||||
|
||||
@@ -17,17 +17,17 @@ import { proboApiRequest } from '../../GenericFunctions';
|
||||
|
||||
export const description: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Vendor Service ID',
|
||||
name: 'vendorServiceId',
|
||||
displayName: 'ThirdParty Service ID',
|
||||
name: 'thirdPartyServiceId',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The ID of the vendor service to update',
|
||||
description: 'The ID of the thirdParty service to update',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
@@ -36,12 +36,12 @@ export const description: INodeProperties[] = [
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The name of the vendor service',
|
||||
description: 'The name of the thirdParty service',
|
||||
},
|
||||
{
|
||||
displayName: 'Description',
|
||||
@@ -52,12 +52,12 @@ export const description: INodeProperties[] = [
|
||||
},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['vendor'],
|
||||
resource: ['thirdParty'],
|
||||
operation: ['updateService'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
description: 'The description of the vendor service',
|
||||
description: 'The description of the thirdParty service',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -65,14 +65,14 @@ export async function execute(
|
||||
this: IExecuteFunctions,
|
||||
itemIndex: number,
|
||||
): Promise<INodeExecutionData> {
|
||||
const vendorServiceId = this.getNodeParameter('vendorServiceId', itemIndex) as string;
|
||||
const thirdPartyServiceId = this.getNodeParameter('thirdPartyServiceId', itemIndex) as string;
|
||||
const name = this.getNodeParameter('name', itemIndex, '') as string;
|
||||
const description = this.getNodeParameter('description', itemIndex, '') as string;
|
||||
|
||||
const query = `
|
||||
mutation UpdateVendorService($input: UpdateVendorServiceInput!) {
|
||||
updateVendorService(input: $input) {
|
||||
vendorService {
|
||||
mutation UpdateThirdPartyService($input: UpdateThirdPartyServiceInput!) {
|
||||
updateThirdPartyService(input: $input) {
|
||||
thirdPartyService {
|
||||
id
|
||||
name
|
||||
description
|
||||
@@ -83,7 +83,7 @@ export async function execute(
|
||||
}
|
||||
`;
|
||||
|
||||
const input: Record<string, unknown> = { id: vendorServiceId };
|
||||
const input: Record<string, unknown> = { id: thirdPartyServiceId };
|
||||
if (name) input.name = name;
|
||||
if (description !== undefined) input.description = description === '' ? null : description;
|
||||
|
||||
@@ -61,12 +61,12 @@ export const description: INodeProperties[] = [
|
||||
{ name: 'Obligation Created', value: 'OBLIGATION_CREATED' },
|
||||
{ name: 'Obligation Deleted', value: 'OBLIGATION_DELETED' },
|
||||
{ name: 'Obligation Updated', value: 'OBLIGATION_UPDATED' },
|
||||
{ name: 'Third Party Created', value: 'THIRD_PARTY_CREATED' },
|
||||
{ name: 'Third Party Deleted', value: 'THIRD_PARTY_DELETED' },
|
||||
{ name: 'Third Party Updated', value: 'THIRD_PARTY_UPDATED' },
|
||||
{ name: 'User Created', value: 'USER_CREATED' },
|
||||
{ name: 'User Deleted', value: 'USER_DELETED' },
|
||||
{ name: 'User Updated', value: 'USER_UPDATED' },
|
||||
{ name: 'Vendor Created', value: 'VENDOR_CREATED' },
|
||||
{ name: 'Vendor Deleted', value: 'VENDOR_DELETED' },
|
||||
{ name: 'Vendor Updated', value: 'VENDOR_UPDATED' },
|
||||
],
|
||||
default: [],
|
||||
description: 'The event types to subscribe to',
|
||||
|
||||
@@ -60,12 +60,12 @@ export const description: INodeProperties[] = [
|
||||
{ name: 'Obligation Created', value: 'OBLIGATION_CREATED' },
|
||||
{ name: 'Obligation Deleted', value: 'OBLIGATION_DELETED' },
|
||||
{ name: 'Obligation Updated', value: 'OBLIGATION_UPDATED' },
|
||||
{ name: 'Third Party Created', value: 'THIRD_PARTY_CREATED' },
|
||||
{ name: 'Third Party Deleted', value: 'THIRD_PARTY_DELETED' },
|
||||
{ name: 'Third Party Updated', value: 'THIRD_PARTY_UPDATED' },
|
||||
{ name: 'User Created', value: 'USER_CREATED' },
|
||||
{ name: 'User Deleted', value: 'USER_DELETED' },
|
||||
{ name: 'User Updated', value: 'USER_UPDATED' },
|
||||
{ name: 'Vendor Created', value: 'VENDOR_CREATED' },
|
||||
{ name: 'Vendor Deleted', value: 'VENDOR_DELETED' },
|
||||
{ name: 'Vendor Updated', value: 'VENDOR_UPDATED' },
|
||||
],
|
||||
default: [],
|
||||
description: 'The event types to subscribe to (replaces existing selection)',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Vendors
|
||||
# Third parties
|
||||
|
||||
The [vendors.json](vendors.json) file and derived files contains data about various vendors and their security certifications. This data is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.
|
||||
The [data.json](data.json) file and derived files contain data about various third parties and their security certifications. This data is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.
|
||||
|
||||
## License Requirements
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
# Vendors library
|
||||
# ThirdParties library
|
||||
|
||||
A curated collection of software vendor information for use in vendor management and compliance activities.
|
||||
A curated collection of software thirdParty information for use in thirdParty management and compliance activities.
|
||||
|
||||
## Overview
|
||||
|
||||
This package provides a structured dataset of software vendors and service providers with comprehensive metadata including:
|
||||
This package provides a structured dataset of software thirdParties and service providers with comprehensive metadata including:
|
||||
|
||||
- Basic vendor information (name, website, description)
|
||||
- Basic thirdParty information (name, website, description)
|
||||
- Legal documentation URLs (privacy policy, terms of service, etc.)
|
||||
- Compliance certifications
|
||||
- Security information
|
||||
|
||||
## Data Structure
|
||||
|
||||
Each vendor entry follows the structure defined in `data.d.ts`, including fields for:
|
||||
Each thirdParty entry follows the structure defined in `data.d.ts`, including fields for:
|
||||
|
||||
- `name`: Display name of the vendor
|
||||
- `name`: Display name of the thirdParty
|
||||
- `legalName`: Legal business name
|
||||
- `websiteUrl`: Vendor's website
|
||||
- `websiteUrl`: ThirdParty's website
|
||||
- `privacyPolicyUrl`: URL to privacy policy
|
||||
- `termsOfServiceUrl`: URL to terms of service
|
||||
- And many more compliance-related URLs and metadata
|
||||
@@ -1,4 +1,4 @@
|
||||
# Vendors
|
||||
# ThirdParties
|
||||
|
||||
## Table of Contents by Category
|
||||
|
||||
@@ -2727,7 +2727,7 @@ AI-powered global spend platform offering corporate cards, expense management, b
|
||||
|
||||
## Ramp
|
||||
|
||||
Corporate spend-management platform offering corporate cards, expense automation, bill pay, and vendor management for finance teams.
|
||||
Corporate spend-management platform offering corporate cards, expense automation, bill pay, and thirdParty management for finance teams.
|
||||
|
||||
**Legal Name:** Ramp Business Corporation
|
||||
|
||||
@@ -2861,7 +2861,7 @@ Puzzle provides modern, real-time accounting software that gives startups automa
|
||||
|
||||
## Probo
|
||||
|
||||
Probo is an open-source compliance platform that helps startups achieve SOC 2 and ISO 27001 certifications quickly and affordably, with expert guidance and no vendor lock-in.
|
||||
Probo is an open-source compliance platform that helps startups achieve SOC 2 and ISO 27001 certifications quickly and affordably, with expert guidance and no thirdParty lock-in.
|
||||
|
||||
**Legal Name:** Probo Inc.
|
||||
|
||||
@@ -3057,7 +3057,7 @@ Comprehensive public cloud computing platform offering infrastructure, data anal
|
||||
- Cloud Computing Compliance Controls Catalog (C5)
|
||||
- CSA
|
||||
- GSMA SAS-SM
|
||||
- Higher Education Cloud Vendor Assessment Tool (HECVAT)
|
||||
- Higher Education Cloud ThirdParty Assessment Tool (HECVAT)
|
||||
- ISO 9001:2015
|
||||
- ISO 22301:2019 & BS EN ISO 22301:2019
|
||||
- ISO 50001:2018
|
||||
@@ -13,13 +13,13 @@
|
||||
// PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
/**
|
||||
* Type definitions for vendor data
|
||||
* Type definitions for thirdParty data
|
||||
*/
|
||||
|
||||
/**
|
||||
* Category types for vendors
|
||||
* Category types for thirdParties
|
||||
*/
|
||||
export type VendorCategory =
|
||||
export type ThirdPartyCategory =
|
||||
| "ANALYTICS"
|
||||
| "CLOUD_MONITORING"
|
||||
| "CLOUD_PROVIDER"
|
||||
@@ -44,72 +44,72 @@ export type VendorCategory =
|
||||
| "VERSION_CONTROL";
|
||||
|
||||
/**
|
||||
* Represents a software vendor or service provider with associated metadata
|
||||
* Represents a software thirdParty or service provider with associated metadata
|
||||
*/
|
||||
export interface Vendor {
|
||||
/** Display name of the vendor */
|
||||
export interface ThirdParty {
|
||||
/** Display name of the thirdParty */
|
||||
name: string;
|
||||
|
||||
/** Legal business name of the vendor */
|
||||
/** Legal business name of the thirdParty */
|
||||
legalName?: string;
|
||||
|
||||
/** Physical headquarters address */
|
||||
headquarterAddress?: string;
|
||||
|
||||
/** Vendor's website URL */
|
||||
/** ThirdParty's website URL */
|
||||
websiteUrl: string;
|
||||
|
||||
/** URL to vendor's privacy policy */
|
||||
/** URL to thirdParty's privacy policy */
|
||||
privacyPolicyUrl?: string;
|
||||
|
||||
/** URL to vendor's terms of service */
|
||||
/** URL to thirdParty's terms of service */
|
||||
termsOfServiceUrl?: string;
|
||||
|
||||
/** URL to vendor's service level agreement */
|
||||
/** URL to thirdParty's service level agreement */
|
||||
serviceLevelAgreementUrl?: string;
|
||||
|
||||
/** URL to service software agreement */
|
||||
serviceSoftwareAgreementUrl?: string;
|
||||
|
||||
/** URL to vendor's data processing agreement */
|
||||
/** URL to thirdParty's data processing agreement */
|
||||
dataProcessingAgreementUrl?: string;
|
||||
|
||||
/** URL to vendor's list of subprocessors */
|
||||
/** URL to thirdParty's list of subprocessors */
|
||||
subprocessorsListUrl?: string;
|
||||
|
||||
/** URL to vendor's business associate agreement */
|
||||
/** URL to thirdParty's business associate agreement */
|
||||
businessAssociateAgreementUrl?: string;
|
||||
|
||||
/** Short description of the vendor/service */
|
||||
/** Short description of the thirdParty/service */
|
||||
description?: string;
|
||||
|
||||
/** Primary category for the vendor */
|
||||
category?: VendorCategory;
|
||||
/** Primary category for the thirdParty */
|
||||
category?: ThirdPartyCategory;
|
||||
|
||||
/** Security or compliance certifications held by the vendor */
|
||||
/** Security or compliance certifications held by the thirdParty */
|
||||
certifications?: string[];
|
||||
|
||||
/** URL to vendor's security page */
|
||||
/** URL to thirdParty's security page */
|
||||
securityPageUrl?: string;
|
||||
|
||||
/** URL to vendor's trust page */
|
||||
/** URL to thirdParty's trust page */
|
||||
trustPageUrl?: string;
|
||||
|
||||
/** URL to vendor's status page */
|
||||
/** URL to thirdParty's status page */
|
||||
statusPageUrl?: string;
|
||||
|
||||
/** Countries where the vendor is located */
|
||||
/** Countries where the thirdParty is located */
|
||||
countries?: CountryCode[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Array of vendor data
|
||||
* Array of thirdParty data
|
||||
*/
|
||||
export type Vendors = Vendor[];
|
||||
export type ThirdParties = ThirdParty[];
|
||||
|
||||
/**
|
||||
* Default export representing the entire vendor dataset
|
||||
* Default export representing the entire thirdParty dataset
|
||||
*/
|
||||
declare const data: Vendors;
|
||||
declare const data: ThirdParties;
|
||||
|
||||
export default data;
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "@probo/vendors",
|
||||
"name": "@probo/third-parties",
|
||||
"version": "0.0.1",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
143
packages/third-parties/scripts/build-md.mjs
Normal file
143
packages/third-parties/scripts/build-md.mjs
Normal file
@@ -0,0 +1,143 @@
|
||||
import { readFile } from "node:fs/promises";
|
||||
import { createWriteStream } from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const data = await readFile(path.join(import.meta.dirname, '../data.json'), 'utf8');
|
||||
const thirdParties = JSON.parse(data);
|
||||
|
||||
const output = path.join(import.meta.dirname, '../VENDORS.md');
|
||||
const file = createWriteStream(output);
|
||||
|
||||
const formatAsList = (array) => {
|
||||
if (!array || array.length === 0) return '';
|
||||
if (typeof array === 'string') {
|
||||
return array.split(',').map(item => `- ${item.trim()}`).join('\n');
|
||||
}
|
||||
return array.map(item => `- ${item}`).join('\n');
|
||||
};
|
||||
|
||||
file.write('# ThirdParties\n\n');
|
||||
file.write('## Table of Contents by Category\n\n');
|
||||
|
||||
const categoriesMap = new Map();
|
||||
|
||||
for (const thirdParty of thirdParties) {
|
||||
const category = (thirdParty.category || thirdParty.categories || 'Uncategorized');
|
||||
|
||||
if (!categoriesMap.has(category)) {
|
||||
categoriesMap.set(category, []);
|
||||
}
|
||||
|
||||
categoriesMap.get(category).push(thirdParty.name);
|
||||
}
|
||||
|
||||
const sortedCategories = [...categoriesMap.keys()].sort();
|
||||
|
||||
for (const category of sortedCategories) {
|
||||
file.write(`### ${category}\n\n`);
|
||||
|
||||
const thirdPartiesInCategory = categoriesMap.get(category).sort();
|
||||
for (const thirdPartyName of thirdPartiesInCategory) {
|
||||
// Create proper anchor by:
|
||||
// 1. Converting to lowercase
|
||||
// 2. Replacing spaces with hyphens
|
||||
// 3. Removing parentheses, dots, and other special characters
|
||||
const anchor = thirdPartyName.toLowerCase()
|
||||
.replace(/\s+/g, '-')
|
||||
.replace(/[\(\)\.]/g, '')
|
||||
.replace(/[^a-z0-9\-]/g, '');
|
||||
|
||||
file.write(`- [${thirdPartyName}](#${anchor})\n`);
|
||||
}
|
||||
|
||||
file.write('\n');
|
||||
}
|
||||
|
||||
file.write('---\n\n');
|
||||
|
||||
for (const thirdParty of thirdParties) {
|
||||
file.write(`## ${thirdParty.name}\n\n`);
|
||||
if (thirdParty.description) {
|
||||
file.write(`${thirdParty.description}\n\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.legalName) {
|
||||
file.write(`**Legal Name:** ${thirdParty.legalName}\n\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.headquarterAddress) {
|
||||
file.write(`**Headquarters:** ${thirdParty.headquarterAddress}\n\n`);
|
||||
}
|
||||
|
||||
file.write('### Links\n\n');
|
||||
file.write('| Resource | Link |\n');
|
||||
file.write('|----------|------|\n');
|
||||
|
||||
if (thirdParty.websiteUrl) {
|
||||
file.write(`| Website | [Link](${thirdParty.websiteUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.privacyPolicyUrl) {
|
||||
file.write(`| Privacy Policy | [Link](${thirdParty.privacyPolicyUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.termsOfServiceUrl && thirdParty.termsOfServiceUrl !== 'undefined') {
|
||||
file.write(`| Terms of Service | [Link](${thirdParty.termsOfServiceUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.serviceLevelAgreementUrl && thirdParty.serviceLevelAgreementUrl !== 'undefined') {
|
||||
file.write(`| Service Level Agreement | [Link](${thirdParty.serviceLevelAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.securityPageUrl && thirdParty.securityPageUrl !== 'undefined') {
|
||||
file.write(`| Security Page | [Link](${thirdParty.securityPageUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.trustPageUrl && thirdParty.trustPageUrl !== 'undefined') {
|
||||
file.write(`| Trust Page | [Link](${thirdParty.trustPageUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.statusPageUrl && thirdParty.statusPageUrl !== 'undefined') {
|
||||
file.write(`| Status Page | [Link](${thirdParty.statusPageUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.dataProcessingAgreementUrl && thirdParty.dataProcessingAgreementUrl !== 'undefined') {
|
||||
file.write(`| Data Processing Agreement | [Link](${thirdParty.dataProcessingAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.businessAssociateAgreementUrl && thirdParty.businessAssociateAgreementUrl !== 'undefined') {
|
||||
file.write(`| Business Associate Agreement | [Link](${thirdParty.businessAssociateAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.serviceSoftwareAgreementUrl && thirdParty.serviceSoftwareAgreementUrl !== 'undefined') {
|
||||
file.write(`| Service Software Agreement | [Link](${thirdParty.serviceSoftwareAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.subprocessorsListUrl && thirdParty.subprocessorsListUrl !== 'undefined') {
|
||||
file.write(`| Subprocessors List | [Link](${thirdParty.subprocessorsListUrl}) |\n`);
|
||||
}
|
||||
|
||||
file.write('\n');
|
||||
|
||||
if (thirdParty.categories && thirdParty.categories !== 'undefined') {
|
||||
file.write(`**Categories:** ${thirdParty.categories}\n\n`);
|
||||
} else if (thirdParty.category && thirdParty.category !== 'undefined') {
|
||||
file.write(`**Category:** ${thirdParty.category}\n\n`);
|
||||
}
|
||||
|
||||
if (thirdParty.certifications && thirdParty.certifications !== 'undefined') {
|
||||
file.write('### Certifications\n\n');
|
||||
file.write(formatAsList(thirdParty.certifications));
|
||||
file.write('\n\n');
|
||||
}
|
||||
|
||||
if (thirdParty.subprocessors && thirdParty.subprocessors !== 'undefined') {
|
||||
file.write('### Subprocessors\n\n');
|
||||
file.write(formatAsList(thirdParty.subprocessors));
|
||||
file.write('\n\n');
|
||||
}
|
||||
|
||||
file.write('---\n\n');
|
||||
}
|
||||
|
||||
file.end();
|
||||
@@ -33,7 +33,7 @@ import { Slack } from "./Slack";
|
||||
import { Supabase } from "./Supabase";
|
||||
import { Tally } from "./Tally";
|
||||
|
||||
const vendors: Record<string, FC<ComponentProps<"svg">>> = {
|
||||
const thirdParties: Record<string, FC<ComponentProps<"svg">>> = {
|
||||
BREX: Brex,
|
||||
CLOUDFLARE: Cloudflare,
|
||||
DOCUSIGN: DocuSign,
|
||||
@@ -57,15 +57,15 @@ const vendors: Record<string, FC<ComponentProps<"svg">>> = {
|
||||
TALLY: Tally,
|
||||
};
|
||||
|
||||
type VendorLogoProps = ComponentProps<"svg"> & {
|
||||
/** The vendor/brand name (case-insensitive, supports enum values like GOOGLE_WORKSPACE). */
|
||||
vendor: string;
|
||||
type ThirdPartyLogoProps = ComponentProps<"svg"> & {
|
||||
/** The thirdParty/brand name (case-insensitive, supports enum values like GOOGLE_WORKSPACE). */
|
||||
thirdParty: string;
|
||||
/** When true, renders the SVG in monochrome, adapting to the current theme. */
|
||||
tint?: boolean;
|
||||
};
|
||||
|
||||
export function VendorLogo({ vendor, tint, ...props }: VendorLogoProps) {
|
||||
const Component = vendors[vendor.toUpperCase()];
|
||||
export function ThirdPartyLogo({ thirdParty, tint, ...props }: ThirdPartyLogoProps) {
|
||||
const Component = thirdParties[thirdParty.toUpperCase()];
|
||||
if (!Component) return null;
|
||||
|
||||
if (tint) {
|
||||
@@ -16,4 +16,4 @@ export { Sentry } from "./Sentry";
|
||||
export { Slack } from "./Slack";
|
||||
export { Supabase } from "./Supabase";
|
||||
export { Tally } from "./Tally";
|
||||
export { VendorLogo } from "./VendorLogo";
|
||||
export { ThirdPartyLogo } from "./ThirdPartyLogo";
|
||||
@@ -61,7 +61,7 @@ export {
|
||||
Row,
|
||||
RowButton,
|
||||
} from "./Atoms/DataTable/DataTable";
|
||||
export * from "./Atoms/Vendors";
|
||||
export * from "./Atoms/ThirdParties";
|
||||
|
||||
// Molecules
|
||||
export {
|
||||
|
||||
143
packages/vendors/scripts/build-md.mjs
vendored
143
packages/vendors/scripts/build-md.mjs
vendored
@@ -1,143 +0,0 @@
|
||||
import { readFile } from "node:fs/promises";
|
||||
import { createWriteStream } from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const data = await readFile(path.join(import.meta.dirname, '../data.json'), 'utf8');
|
||||
const vendors = JSON.parse(data);
|
||||
|
||||
const output = path.join(import.meta.dirname, '../VENDORS.md');
|
||||
const file = createWriteStream(output);
|
||||
|
||||
const formatAsList = (array) => {
|
||||
if (!array || array.length === 0) return '';
|
||||
if (typeof array === 'string') {
|
||||
return array.split(',').map(item => `- ${item.trim()}`).join('\n');
|
||||
}
|
||||
return array.map(item => `- ${item}`).join('\n');
|
||||
};
|
||||
|
||||
file.write('# Vendors\n\n');
|
||||
file.write('## Table of Contents by Category\n\n');
|
||||
|
||||
const categoriesMap = new Map();
|
||||
|
||||
for (const vendor of vendors) {
|
||||
const category = (vendor.category || vendor.categories || 'Uncategorized');
|
||||
|
||||
if (!categoriesMap.has(category)) {
|
||||
categoriesMap.set(category, []);
|
||||
}
|
||||
|
||||
categoriesMap.get(category).push(vendor.name);
|
||||
}
|
||||
|
||||
const sortedCategories = [...categoriesMap.keys()].sort();
|
||||
|
||||
for (const category of sortedCategories) {
|
||||
file.write(`### ${category}\n\n`);
|
||||
|
||||
const vendorsInCategory = categoriesMap.get(category).sort();
|
||||
for (const vendorName of vendorsInCategory) {
|
||||
// Create proper anchor by:
|
||||
// 1. Converting to lowercase
|
||||
// 2. Replacing spaces with hyphens
|
||||
// 3. Removing parentheses, dots, and other special characters
|
||||
const anchor = vendorName.toLowerCase()
|
||||
.replace(/\s+/g, '-')
|
||||
.replace(/[\(\)\.]/g, '')
|
||||
.replace(/[^a-z0-9\-]/g, '');
|
||||
|
||||
file.write(`- [${vendorName}](#${anchor})\n`);
|
||||
}
|
||||
|
||||
file.write('\n');
|
||||
}
|
||||
|
||||
file.write('---\n\n');
|
||||
|
||||
for (const vendor of vendors) {
|
||||
file.write(`## ${vendor.name}\n\n`);
|
||||
if (vendor.description) {
|
||||
file.write(`${vendor.description}\n\n`);
|
||||
}
|
||||
|
||||
if (vendor.legalName) {
|
||||
file.write(`**Legal Name:** ${vendor.legalName}\n\n`);
|
||||
}
|
||||
|
||||
if (vendor.headquarterAddress) {
|
||||
file.write(`**Headquarters:** ${vendor.headquarterAddress}\n\n`);
|
||||
}
|
||||
|
||||
file.write('### Links\n\n');
|
||||
file.write('| Resource | Link |\n');
|
||||
file.write('|----------|------|\n');
|
||||
|
||||
if (vendor.websiteUrl) {
|
||||
file.write(`| Website | [Link](${vendor.websiteUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.privacyPolicyUrl) {
|
||||
file.write(`| Privacy Policy | [Link](${vendor.privacyPolicyUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.termsOfServiceUrl && vendor.termsOfServiceUrl !== 'undefined') {
|
||||
file.write(`| Terms of Service | [Link](${vendor.termsOfServiceUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.serviceLevelAgreementUrl && vendor.serviceLevelAgreementUrl !== 'undefined') {
|
||||
file.write(`| Service Level Agreement | [Link](${vendor.serviceLevelAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.securityPageUrl && vendor.securityPageUrl !== 'undefined') {
|
||||
file.write(`| Security Page | [Link](${vendor.securityPageUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.trustPageUrl && vendor.trustPageUrl !== 'undefined') {
|
||||
file.write(`| Trust Page | [Link](${vendor.trustPageUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.statusPageUrl && vendor.statusPageUrl !== 'undefined') {
|
||||
file.write(`| Status Page | [Link](${vendor.statusPageUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.dataProcessingAgreementUrl && vendor.dataProcessingAgreementUrl !== 'undefined') {
|
||||
file.write(`| Data Processing Agreement | [Link](${vendor.dataProcessingAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.businessAssociateAgreementUrl && vendor.businessAssociateAgreementUrl !== 'undefined') {
|
||||
file.write(`| Business Associate Agreement | [Link](${vendor.businessAssociateAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.serviceSoftwareAgreementUrl && vendor.serviceSoftwareAgreementUrl !== 'undefined') {
|
||||
file.write(`| Service Software Agreement | [Link](${vendor.serviceSoftwareAgreementUrl}) |\n`);
|
||||
}
|
||||
|
||||
if (vendor.subprocessorsListUrl && vendor.subprocessorsListUrl !== 'undefined') {
|
||||
file.write(`| Subprocessors List | [Link](${vendor.subprocessorsListUrl}) |\n`);
|
||||
}
|
||||
|
||||
file.write('\n');
|
||||
|
||||
if (vendor.categories && vendor.categories !== 'undefined') {
|
||||
file.write(`**Categories:** ${vendor.categories}\n\n`);
|
||||
} else if (vendor.category && vendor.category !== 'undefined') {
|
||||
file.write(`**Category:** ${vendor.category}\n\n`);
|
||||
}
|
||||
|
||||
if (vendor.certifications && vendor.certifications !== 'undefined') {
|
||||
file.write('### Certifications\n\n');
|
||||
file.write(formatAsList(vendor.certifications));
|
||||
file.write('\n\n');
|
||||
}
|
||||
|
||||
if (vendor.subprocessors && vendor.subprocessors !== 'undefined') {
|
||||
file.write('### Subprocessors\n\n');
|
||||
file.write(formatAsList(vendor.subprocessors));
|
||||
file.write('\n\n');
|
||||
}
|
||||
|
||||
file.write('---\n\n');
|
||||
}
|
||||
|
||||
file.end();
|
||||
Reference in New Issue
Block a user