enum VendorCategory @goModel(model: "go.probo.inc/probo/pkg/coredata.VendorCategory") { ANALYTICS @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryAnalytics" ) CLOUD_MONITORING @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryCloudMonitoring" ) CLOUD_PROVIDER @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryCloudProvider" ) COLLABORATION @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryCollaboration" ) CUSTOMER_SUPPORT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryCustomerSupport" ) DATA_STORAGE_AND_PROCESSING @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryDataStorageAndProcessing" ) DOCUMENT_MANAGEMENT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryDocumentManagement" ) EMPLOYEE_MANAGEMENT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryEmployeeManagement" ) ENGINEERING @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryEngineering" ) FINANCE @goEnum(value: "go.probo.inc/probo/pkg/coredata.VendorCategoryFinance") IDENTITY_PROVIDER @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryIdentityProvider" ) IT @goEnum(value: "go.probo.inc/probo/pkg/coredata.VendorCategoryIT") MARKETING @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryMarketing" ) OFFICE_OPERATIONS @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryOfficeOperations" ) OTHER @goEnum(value: "go.probo.inc/probo/pkg/coredata.VendorCategoryOther") PASSWORD_MANAGEMENT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryPasswordManagement" ) PRODUCT_AND_DESIGN @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryProductAndDesign" ) PROFESSIONAL_SERVICES @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryProfessionalServices" ) RECRUITING @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryRecruiting" ) SALES @goEnum(value: "go.probo.inc/probo/pkg/coredata.VendorCategorySales") SECURITY @goEnum(value: "go.probo.inc/probo/pkg/coredata.VendorCategorySecurity") VERSION_CONTROL @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorCategoryVersionControl" ) } enum DataSensitivity @goModel(model: "go.probo.inc/probo/pkg/coredata.DataSensitivity") { NONE @goEnum(value: "go.probo.inc/probo/pkg/coredata.DataSensitivityNone") LOW @goEnum(value: "go.probo.inc/probo/pkg/coredata.DataSensitivityLow") MEDIUM @goEnum(value: "go.probo.inc/probo/pkg/coredata.DataSensitivityMedium") HIGH @goEnum(value: "go.probo.inc/probo/pkg/coredata.DataSensitivityHigh") CRITICAL @goEnum( value: "go.probo.inc/probo/pkg/coredata.DataSensitivityCritical" ) } enum BusinessImpact @goModel(model: "go.probo.inc/probo/pkg/coredata.BusinessImpact") { LOW @goEnum(value: "go.probo.inc/probo/pkg/coredata.BusinessImpactLow") MEDIUM @goEnum(value: "go.probo.inc/probo/pkg/coredata.BusinessImpactMedium") HIGH @goEnum(value: "go.probo.inc/probo/pkg/coredata.BusinessImpactHigh") CRITICAL @goEnum(value: "go.probo.inc/probo/pkg/coredata.BusinessImpactCritical") } enum VendorOrderField @goModel(model: "go.probo.inc/probo/pkg/coredata.VendorOrderField") { NAME @goEnum(value: "go.probo.inc/probo/pkg/coredata.VendorOrderFieldName") CREATED_AT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorOrderFieldCreatedAt" ) UPDATED_AT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorOrderFieldUpdatedAt" ) } enum VendorComplianceReportOrderField @goModel( model: "go.probo.inc/probo/pkg/coredata.VendorComplianceReportOrderField" ) { REPORT_DATE @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorComplianceReportOrderFieldReportDate" ) CREATED_AT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorComplianceReportOrderFieldCreatedAt" ) } enum VendorContactOrderField @goModel(model: "go.probo.inc/probo/pkg/coredata.VendorContactOrderField") { CREATED_AT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorContactOrderFieldCreatedAt" ) FULL_NAME @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorContactOrderFieldFullName" ) EMAIL @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorContactOrderFieldEmail" ) } enum VendorServiceOrderField @goModel(model: "go.probo.inc/probo/pkg/coredata.VendorServiceOrderField") { CREATED_AT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorServiceOrderFieldCreatedAt" ) NAME @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorServiceOrderFieldName" ) } enum VendorRiskAssessmentOrderField @goModel( model: "go.probo.inc/probo/pkg/coredata.VendorRiskAssessmentOrderField" ) { CREATED_AT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorRiskAssessmentOrderFieldCreatedAt" ) EXPIRES_AT @goEnum( value: "go.probo.inc/probo/pkg/coredata.VendorRiskAssessmentOrderFieldExpiresAt" ) } input VendorOrder @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.VendorOrderBy" ) { direction: OrderDirection! field: VendorOrderField! } input VendorComplianceReportOrder @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.VendorComplianceReportOrderBy" ) { direction: OrderDirection! field: VendorComplianceReportOrderField! } input VendorContactOrder @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.VendorContactOrderBy" ) { direction: OrderDirection! field: VendorContactOrderField! } input VendorServiceOrder @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.VendorServiceOrderBy" ) { direction: OrderDirection! field: VendorServiceOrderField! } input VendorRiskAssessmentOrder { field: VendorRiskAssessmentOrderField! direction: OrderDirection! } input VendorFilter { snapshotId: ID } type Vendor implements Node { id: ID! snapshotId: ID name: String! category: VendorCategory! description: String organization: Organization! @goField(forceResolver: true) complianceReports( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorComplianceReportOrder ): VendorComplianceReportConnection! @goField(forceResolver: true) businessAssociateAgreement: VendorBusinessAssociateAgreement @goField(forceResolver: true) dataPrivacyAgreement: VendorDataPrivacyAgreement @goField(forceResolver: true) contacts( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorContactOrder ): VendorContactConnection! @goField(forceResolver: true) services( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorServiceOrder ): VendorServiceConnection! @goField(forceResolver: true) riskAssessments( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorRiskAssessmentOrder ): VendorRiskAssessmentConnection! @goField(forceResolver: true) businessOwner: Profile @goField(forceResolver: true) securityOwner: Profile @goField(forceResolver: true) statusPageUrl: String termsOfServiceUrl: String privacyPolicyUrl: String serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String businessAssociateAgreementUrl: String subprocessorsListUrl: String certifications: [String!]! countries: [CountryCode!]! securityPageUrl: String trustPageUrl: String headquarterAddress: String legalName: String websiteUrl: String showOnTrustCenter: Boolean! createdAt: Datetime! updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true) } type VendorComplianceReport implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) reportDate: Datetime! validUntil: Datetime reportName: String! file: File @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true) } type VendorBusinessAssociateAgreement implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) validFrom: Datetime validUntil: Datetime fileName: String! fileUrl: String! @goField(forceResolver: true) fileSize: BigInt! createdAt: Datetime! updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true) } type VendorContact implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) fullName: String email: EmailAddr phone: String role: String createdAt: Datetime! updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true) } type VendorService implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) name: String! description: String createdAt: Datetime! updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true) } type VendorDataPrivacyAgreement implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) validFrom: Datetime validUntil: Datetime fileName: String! fileUrl: String! @goField(forceResolver: true) fileSize: BigInt! createdAt: Datetime! updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true) } type VendorRiskAssessment implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) expiresAt: Datetime! dataSensitivity: DataSensitivity! businessImpact: BusinessImpact! notes: String createdAt: Datetime! updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true) } type VendorConnection @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.VendorConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [VendorEdge!]! pageInfo: PageInfo! } type VendorEdge { cursor: CursorKey! node: Vendor! } type VendorComplianceReportConnection { edges: [VendorComplianceReportEdge!]! pageInfo: PageInfo! } type VendorComplianceReportEdge { cursor: CursorKey! node: VendorComplianceReport! } type VendorContactConnection { edges: [VendorContactEdge!]! pageInfo: PageInfo! } type VendorContactEdge { cursor: CursorKey! node: VendorContact! } type VendorServiceConnection { edges: [VendorServiceEdge!]! pageInfo: PageInfo! } type VendorServiceEdge { cursor: CursorKey! node: VendorService! } type VendorRiskAssessmentConnection { edges: [VendorRiskAssessmentEdge!]! pageInfo: PageInfo! } type VendorRiskAssessmentEdge { cursor: CursorKey! node: VendorRiskAssessment! } extend type Mutation { createVendor(input: CreateVendorInput!): CreateVendorPayload! updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! createVendorContact( input: CreateVendorContactInput! ): CreateVendorContactPayload! updateVendorContact( input: UpdateVendorContactInput! ): UpdateVendorContactPayload! deleteVendorContact( input: DeleteVendorContactInput! ): DeleteVendorContactPayload! createVendorService( input: CreateVendorServiceInput! ): CreateVendorServicePayload! updateVendorService( input: UpdateVendorServiceInput! ): UpdateVendorServicePayload! deleteVendorService( input: DeleteVendorServiceInput! ): DeleteVendorServicePayload! uploadVendorComplianceReport( input: UploadVendorComplianceReportInput! ): UploadVendorComplianceReportPayload! deleteVendorComplianceReport( input: DeleteVendorComplianceReportInput! ): DeleteVendorComplianceReportPayload! uploadVendorBusinessAssociateAgreement( input: UploadVendorBusinessAssociateAgreementInput! ): UploadVendorBusinessAssociateAgreementPayload! updateVendorBusinessAssociateAgreement( input: UpdateVendorBusinessAssociateAgreementInput! ): UpdateVendorBusinessAssociateAgreementPayload! deleteVendorBusinessAssociateAgreement( input: DeleteVendorBusinessAssociateAgreementInput! ): DeleteVendorBusinessAssociateAgreementPayload! uploadVendorDataPrivacyAgreement( input: UploadVendorDataPrivacyAgreementInput! ): UploadVendorDataPrivacyAgreementPayload! updateVendorDataPrivacyAgreement( input: UpdateVendorDataPrivacyAgreementInput! ): UpdateVendorDataPrivacyAgreementPayload! deleteVendorDataPrivacyAgreement( input: DeleteVendorDataPrivacyAgreementInput! ): DeleteVendorDataPrivacyAgreementPayload! createVendorRiskAssessment( input: CreateVendorRiskAssessmentInput! ): CreateVendorRiskAssessmentPayload! assessVendor(input: AssessVendorInput!): AssessVendorPayload! } input CreateVendorInput { organizationId: ID! name: String! description: String headquarterAddress: String legalName: String websiteUrl: String privacyPolicyUrl: String category: VendorCategory serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String businessAssociateAgreementUrl: String subprocessorsListUrl: String certifications: [String!] countries: [CountryCode!] securityPageUrl: String trustPageUrl: String statusPageUrl: String termsOfServiceUrl: String businessOwnerId: ID securityOwnerId: ID } input UpdateVendorInput { id: ID! name: String description: String @goField(omittable: true) statusPageUrl: String @goField(omittable: true) termsOfServiceUrl: String @goField(omittable: true) privacyPolicyUrl: String @goField(omittable: true) serviceLevelAgreementUrl: String @goField(omittable: true) dataProcessingAgreementUrl: String @goField(omittable: true) businessAssociateAgreementUrl: String @goField(omittable: true) subprocessorsListUrl: String @goField(omittable: true) websiteUrl: String @goField(omittable: true) legalName: String @goField(omittable: true) headquarterAddress: String @goField(omittable: true) category: VendorCategory certifications: [String!] countries: [CountryCode!] securityPageUrl: String @goField(omittable: true) trustPageUrl: String @goField(omittable: true) businessOwnerId: ID @goField(omittable: true) securityOwnerId: ID @goField(omittable: true) showOnTrustCenter: Boolean } input DeleteVendorInput { vendorId: ID! } input CreateVendorContactInput { vendorId: ID! fullName: String email: EmailAddr phone: String role: String } input UpdateVendorContactInput { id: ID! fullName: String @goField(omittable: true) email: EmailAddr @goField(omittable: true) phone: String @goField(omittable: true) role: String @goField(omittable: true) } input DeleteVendorContactInput { vendorContactId: ID! } input CreateVendorServiceInput { vendorId: ID! name: String! description: String url: String type: String } input UpdateVendorServiceInput { id: ID! name: String description: String @goField(omittable: true) url: String type: String } input DeleteVendorServiceInput { vendorServiceId: ID! } input UploadVendorComplianceReportInput { vendorId: ID! reportDate: Datetime! validUntil: Datetime reportName: String! file: Upload! } input DeleteVendorComplianceReportInput { reportId: ID! } input UploadVendorBusinessAssociateAgreementInput { vendorId: ID! validFrom: Datetime validUntil: Datetime fileName: String! file: Upload! } input UpdateVendorBusinessAssociateAgreementInput { vendorId: ID! validFrom: Datetime @goField(omittable: true) validUntil: Datetime @goField(omittable: true) } input DeleteVendorBusinessAssociateAgreementInput { vendorId: ID! } input UploadVendorDataPrivacyAgreementInput { vendorId: ID! validFrom: Datetime validUntil: Datetime fileName: String! file: Upload! } input UpdateVendorDataPrivacyAgreementInput { vendorId: ID! validFrom: Datetime @goField(omittable: true) validUntil: Datetime @goField(omittable: true) } input DeleteVendorDataPrivacyAgreementInput { vendorId: ID! } input CreateVendorRiskAssessmentInput { vendorId: ID! expiresAt: Datetime! dataSensitivity: DataSensitivity! businessImpact: BusinessImpact! notes: String } input AssessVendorInput { id: ID! websiteUrl: String! procedure: String } type VendorSubprocessor { name: String! country: String! purpose: String! } type CreateVendorPayload { vendorEdge: VendorEdge! } type UpdateVendorPayload { vendor: Vendor! } type DeleteVendorPayload { deletedVendorId: ID! } type CreateVendorContactPayload { vendorContactEdge: VendorContactEdge! } type UpdateVendorContactPayload { vendorContact: VendorContact! } type DeleteVendorContactPayload { deletedVendorContactId: ID! } type CreateVendorServicePayload { vendorServiceEdge: VendorServiceEdge! } type UpdateVendorServicePayload { vendorService: VendorService! } type DeleteVendorServicePayload { deletedVendorServiceId: ID! } type UploadVendorComplianceReportPayload { vendorComplianceReportEdge: VendorComplianceReportEdge! } type DeleteVendorComplianceReportPayload { deletedVendorComplianceReportId: ID! } type UploadVendorBusinessAssociateAgreementPayload { vendorBusinessAssociateAgreement: VendorBusinessAssociateAgreement! } type UpdateVendorBusinessAssociateAgreementPayload { vendorBusinessAssociateAgreement: VendorBusinessAssociateAgreement! } type DeleteVendorBusinessAssociateAgreementPayload { deletedVendorId: ID! } type UploadVendorDataPrivacyAgreementPayload { vendorDataPrivacyAgreement: VendorDataPrivacyAgreement! } type UpdateVendorDataPrivacyAgreementPayload { vendorDataPrivacyAgreement: VendorDataPrivacyAgreement! } type DeleteVendorDataPrivacyAgreementPayload { deletedVendorId: ID! } type CreateVendorRiskAssessmentPayload { vendorRiskAssessmentEdge: VendorRiskAssessmentEdge! } type AssessVendorPayload { vendor: Vendor! report: String! subprocessors: [VendorSubprocessor!]! }