# Directives directive @goField( forceResolver: Boolean name: String omittable: Boolean ) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION directive @goModel( model: String models: [String!] ) on OBJECT | INPUT_OBJECT | SCALAR | ENUM | INTERFACE | UNION directive @goEnum(value: String) on ENUM_VALUE # Scalars scalar CursorKey scalar Void scalar Datetime scalar Upload scalar Duration # Interfaces interface Node { id: ID! } # Pagination type PageInfo { hasNextPage: Boolean! hasPreviousPage: Boolean! startCursor: CursorKey endCursor: CursorKey } # Enums enum OrderDirection @goModel(model: "github.com/getprobo/probo/pkg/page.OrderDirection") { ASC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionAsc") DESC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionDesc") } enum MeasureState @goModel(model: "github.com/getprobo/probo/pkg/coredata.MeasureState") { NOT_STARTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateNotStarted" ) IN_PROGRESS @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateInProgress" ) NOT_APPLICABLE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateNotApplicable" ) IMPLEMENTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateImplemented" ) } enum TaskState @goModel(model: "github.com/getprobo/probo/pkg/coredata.TaskState") { TODO @goEnum(value: "github.com/getprobo/probo/pkg/coredata.TaskStateTodo") DONE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.TaskStateDone") } enum EvidenceState @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceState") { FULFILLED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.EvidenceStateFulfilled" ) REQUESTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.EvidenceStateRequested" ) } enum PeopleKind @goModel(model: "github.com/getprobo/probo/pkg/coredata.PeopleKind") { EMPLOYEE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.PeopleKindEmployee") CONTRACTOR @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleKindContractor" ) SERVICE_ACCOUNT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleKindServiceAccount" ) } enum PolicyStatus @goModel(model: "github.com/getprobo/probo/pkg/coredata.PolicyStatus") { DRAFT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusDraft") PUBLISHED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusPublished" ) } enum EvidenceType @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceType") { FILE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeFile") LINK @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeLink") } enum RiskTreatment @goModel(model: "github.com/getprobo/probo/pkg/coredata.RiskTreatment") { MITIGATED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentMitigated" ) ACCEPTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentAccepted" ) AVOIDED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentAvoided" ) TRANSFERRED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentTransferred" ) } # Order Field Enums enum UserOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.UserOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.UserOrderFieldCreatedAt" ) } enum PeopleOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.PeopleOrderField") { FULL_NAME @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleOrderFieldFullName" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleOrderFieldCreatedAt" ) } enum VendorOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.VendorOrderField") { NAME } enum FrameworkOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.FrameworkOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.FrameworkOrderFieldCreatedAt" ) } enum ControlOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.ControlOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.ControlOrderFieldCreatedAt" ) } enum MeasureOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.MeasureOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureOrderFieldCreatedAt" ) } enum TaskOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.TaskOrderField") { CREATED_AT } enum PolicyOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.PolicyOrderField") { TITLE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyOrderFieldTitle" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyOrderFieldCreatedAt" ) } enum RiskOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.RiskOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldCreatedAt" ) UPDATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldUpdatedAt" ) NAME @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldName") CATEGORY @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldCategory" ) TREATMENT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldTreatment" ) INITIAL_RISK_SCORE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldInitialRiskScore" ) RESIDUAL_RISK_SCORE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldResidualRiskScore" ) } enum EvidenceOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceOrderField") { CREATED_AT } enum VendorComplianceReportOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.VendorComplianceReportOrderField" ) { REPORT_DATE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorComplianceReportOrderFieldReportDate" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorComplianceReportOrderFieldCreatedAt" ) } enum OrganizationOrderField { NAME CREATED_AT UPDATED_AT } enum ConnectorOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.ConnectorOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.ConnectorOrderFieldCreatedAt" ) NAME @goEnum( value: "github.com/getprobo/probo/pkg/coredata.ConnectorOrderFieldName" ) } enum DataSensitivity @goModel(model: "github.com/getprobo/probo/pkg/coredata.DataSensitivity") { NONE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityNone") LOW @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityLow") MEDIUM @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityMedium" ) HIGH @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityHigh") CRITICAL @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityCritical" ) } enum BusinessImpact @goModel(model: "github.com/getprobo/probo/pkg/coredata.BusinessImpact") { LOW @goEnum(value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactLow") MEDIUM @goEnum( value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactMedium" ) HIGH @goEnum(value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactHigh") CRITICAL @goEnum( value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactCritical" ) } enum PolicyVersionOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.PolicyVersionOrderField" ) { VERSION @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyVersionOrderFieldVersion" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyVersionOrderFieldCreatedAt" ) } # Order Input Types input UserOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.UserOrderBy" ) { direction: OrderDirection! field: UserOrderField! } input PeopleOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.PeopleOrderBy" ) { direction: OrderDirection! field: PeopleOrderField! } input VendorOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.VendorOrderBy" ) { direction: OrderDirection! field: VendorOrderField! } input FrameworkOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.FrameworkOrderBy" ) { direction: OrderDirection! field: FrameworkOrderField! } input ControlOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.ControlOrderBy" ) { direction: OrderDirection! field: ControlOrderField! } input MeasureOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.MeasureOrderBy" ) { direction: OrderDirection! field: MeasureOrderField! } input TaskOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.TaskOrderBy" ) { direction: OrderDirection! field: TaskOrderField! } input PolicyOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.PolicyOrderBy" ) { direction: OrderDirection! field: PolicyOrderField! } input RiskOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.RiskOrderBy" ) { direction: OrderDirection! field: RiskOrderField! } input EvidenceOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.EvidenceOrderBy" ) { direction: OrderDirection! field: EvidenceOrderField! } input VendorComplianceReportOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.VendorComplianceReportOrderBy" ) { direction: OrderDirection! field: VendorComplianceReportOrderField! } input OrganizationOrder { direction: OrderDirection! field: OrganizationOrderField! } input ConnectorOrder { field: ConnectorOrderField! direction: OrderDirection! } input PolicyVersionOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.PolicyVersionOrderBy" ) { direction: OrderDirection! field: PolicyVersionOrderField! } input PolicyVersionFilter { status: PolicyStatus } # Core Types type Organization implements Node { id: ID! name: String! logoUrl: String @goField(forceResolver: true) users( first: Int after: CursorKey last: Int before: CursorKey orderBy: UserOrder ): UserConnection! @goField(forceResolver: true) connectors( first: Int after: CursorKey last: Int before: CursorKey orderBy: ConnectorOrder ): ConnectorConnection! @goField(forceResolver: true) frameworks( first: Int after: CursorKey last: Int before: CursorKey orderBy: FrameworkOrder ): FrameworkConnection! @goField(forceResolver: true) vendors( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorOrder ): VendorConnection! @goField(forceResolver: true) peoples( first: Int after: CursorKey last: Int before: CursorKey orderBy: PeopleOrder ): PeopleConnection! @goField(forceResolver: true) policies( first: Int after: CursorKey last: Int before: CursorKey orderBy: PolicyOrder ): PolicyConnection! @goField(forceResolver: true) measures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MeasureOrder ): MeasureConnection! @goField(forceResolver: true) risks( first: Int after: CursorKey last: Int before: CursorKey orderBy: RiskOrder ): RiskConnection! @goField(forceResolver: true) tasks( first: Int after: CursorKey last: Int before: CursorKey orderBy: TaskOrder ): TaskConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type User implements Node { id: ID! fullName: String! email: String! createdAt: Datetime! updatedAt: Datetime! people(organizationId: ID!): People @goField(forceResolver: true) } type Connector implements Node { id: ID! name: String! type: String! createdAt: Datetime! updatedAt: Datetime! } type People implements Node { id: ID! fullName: String! primaryEmailAddress: String! additionalEmailAddresses: [String!]! kind: PeopleKind! position: String contractStartDate: Datetime contractEndDate: Datetime createdAt: Datetime! updatedAt: Datetime! } type Vendor implements Node { id: ID! name: String! description: String organization: Organization! @goField(forceResolver: true) complianceReports( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorComplianceReportOrder ): VendorComplianceReportConnection! @goField(forceResolver: true) riskAssessments( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorRiskAssessmentOrder ): VendorRiskAssessmentConnection! @goField(forceResolver: true) businessOwner: People @goField(forceResolver: true) securityOwner: People @goField(forceResolver: true) statusPageUrl: String termsOfServiceUrl: String privacyPolicyUrl: String serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String certifications: [String!]! securityPageUrl: String trustPageUrl: String headquarterAddress: String legalName: String websiteUrl: String createdAt: Datetime! updatedAt: Datetime! } type VendorComplianceReport implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) reportDate: Datetime! validUntil: Datetime reportName: String! fileUrl: String! @goField(forceResolver: true) fileSize: Int! createdAt: Datetime! updatedAt: Datetime! } type Framework implements Node { id: ID! name: String! description: String! organization: Organization! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Control implements Node { id: ID! referenceId: String! name: String! description: String! framework: Framework! @goField(forceResolver: true) measures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MeasureOrder ): MeasureConnection! @goField(forceResolver: true) policies( first: Int after: CursorKey last: Int before: CursorKey orderBy: PolicyOrder ): PolicyConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Measure implements Node { id: ID! category: String! name: String! description: String! state: MeasureState! evidences( first: Int after: CursorKey last: Int before: CursorKey orderBy: EvidenceOrder ): EvidenceConnection! @goField(forceResolver: true) tasks( first: Int after: CursorKey last: Int before: CursorKey orderBy: TaskOrder ): TaskConnection! @goField(forceResolver: true) risks( first: Int after: CursorKey last: Int before: CursorKey orderBy: RiskOrder ): RiskConnection! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Task implements Node { id: ID! name: String! description: String! state: TaskState! timeEstimate: Duration assignedTo: People @goField(forceResolver: true) organization: Organization! @goField(forceResolver: true) measure: Measure @goField(forceResolver: true) evidences( first: Int after: CursorKey last: Int before: CursorKey orderBy: EvidenceOrder ): EvidenceConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Evidence implements Node { id: ID! fileUrl: String @goField(forceResolver: true) mimeType: String! size: Int! state: EvidenceState! type: EvidenceType! filename: String! url: String description: String! task: Task @goField(forceResolver: true) measure: Measure! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Policy implements Node { id: ID! title: String! description: String! currentPublishedVersion: Int owner: People! @goField(forceResolver: true) organization: Organization! @goField(forceResolver: true) versions( first: Int after: CursorKey last: Int before: CursorKey orderBy: PolicyVersionOrder filter: PolicyVersionFilter ): PolicyVersionConnection! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Risk implements Node { id: ID! name: String! description: String! category: String! treatment: RiskTreatment! inherentLikelihood: Int! inherentImpact: Int! inherentRiskScore: Int! residualLikelihood: Int! residualImpact: Int! residualRiskScore: Int! note: String! owner: People @goField(forceResolver: true) organization: Organization! @goField(forceResolver: true) measures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MeasureOrder ): MeasureConnection! @goField(forceResolver: true) policies( first: Int after: CursorKey last: Int before: CursorKey orderBy: PolicyOrder ): PolicyConnection! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Session { id: ID! expiresAt: Datetime! } type Viewer { id: ID! user: User! organizations( first: Int after: CursorKey last: Int before: CursorKey orderBy: OrganizationOrder ): OrganizationConnection! @goField(forceResolver: true) } # Connection Types type OrganizationConnection { edges: [OrganizationEdge!]! pageInfo: PageInfo! } type OrganizationEdge { cursor: CursorKey! node: Organization! } type UserConnection { edges: [UserEdge!]! pageInfo: PageInfo! } type UserEdge { cursor: CursorKey! node: User! } type PeopleConnection { edges: [PeopleEdge!]! pageInfo: PageInfo! } type PeopleEdge { cursor: CursorKey! node: People! } type VendorConnection { edges: [VendorEdge!]! pageInfo: PageInfo! } type VendorEdge { cursor: CursorKey! node: Vendor! } type FrameworkConnection { edges: [FrameworkEdge!]! pageInfo: PageInfo! } type FrameworkEdge { cursor: CursorKey! node: Framework! } type ControlConnection { edges: [ControlEdge!]! pageInfo: PageInfo! } type ControlEdge { cursor: CursorKey! node: Control! } type MeasureConnection { edges: [MeasureEdge!]! pageInfo: PageInfo! } type MeasureEdge { cursor: CursorKey! node: Measure! } type TaskConnection { edges: [TaskEdge!]! pageInfo: PageInfo! } type TaskEdge { cursor: CursorKey! node: Task! } type EvidenceConnection { edges: [EvidenceEdge!]! pageInfo: PageInfo! } type EvidenceEdge { cursor: CursorKey! node: Evidence! } type PolicyConnection { edges: [PolicyEdge!]! pageInfo: PageInfo! } type PolicyEdge { cursor: CursorKey! node: Policy! } type RiskConnection { edges: [RiskEdge!]! pageInfo: PageInfo! } type RiskEdge { cursor: CursorKey! node: Risk! } type VendorComplianceReportConnection { edges: [VendorComplianceReportEdge!]! pageInfo: PageInfo! } type VendorComplianceReportEdge { cursor: CursorKey! node: VendorComplianceReport! } type ConnectorConnection { edges: [ConnectorEdge!]! pageInfo: PageInfo! } type ConnectorEdge { cursor: CursorKey! node: Connector! } type VendorRiskAssessmentConnection { edges: [VendorRiskAssessmentEdge!]! pageInfo: PageInfo! } type VendorRiskAssessmentEdge { cursor: CursorKey! node: VendorRiskAssessment! } type PolicyVersionConnection { edges: [PolicyVersionEdge!]! pageInfo: PageInfo! } type PolicyVersionEdge { cursor: CursorKey! node: PolicyVersion! } # Root Types type Query { node(id: ID!): Node! viewer: Viewer! } type Mutation { # Organization mutations createOrganization( input: CreateOrganizationInput! ): CreateOrganizationPayload! updateOrganization( input: UpdateOrganizationInput! ): UpdateOrganizationPayload! deleteOrganization( input: DeleteOrganizationInput! ): DeleteOrganizationPayload! # User mutations confirmEmail(input: ConfirmEmailInput!): ConfirmEmailPayload! inviteUser(input: InviteUserInput!): InviteUserPayload! removeUser(input: RemoveUserInput!): RemoveUserPayload! # People mutations createPeople(input: CreatePeopleInput!): CreatePeoplePayload! updatePeople(input: UpdatePeopleInput!): UpdatePeoplePayload! deletePeople(input: DeletePeopleInput!): DeletePeoplePayload! # Vendor mutations createVendor(input: CreateVendorInput!): CreateVendorPayload! updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! # Framework mutations createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! # Measure mutations createMeasure(input: CreateMeasureInput!): CreateMeasurePayload! updateMeasure(input: UpdateMeasureInput!): UpdateMeasurePayload! importMeasure(input: ImportMeasureInput!): ImportMeasurePayload! deleteMeasure(input: DeleteMeasureInput!): DeleteMeasurePayload! # Control mutations createControlMeasureMapping( input: CreateControlMeasureMappingInput! ): CreateControlMeasureMappingPayload! createControlPolicyMapping( input: CreateControlPolicyMappingInput! ): CreateControlPolicyMappingPayload! deleteControlMeasureMapping( input: DeleteControlMeasureMappingInput! ): DeleteControlMeasureMappingPayload! deleteControlPolicyMapping( input: DeleteControlPolicyMappingInput! ): DeleteControlPolicyMappingPayload! # Task mutations createTask(input: CreateTaskInput!): CreateTaskPayload! updateTask(input: UpdateTaskInput!): UpdateTaskPayload! deleteTask(input: DeleteTaskInput!): DeleteTaskPayload! assignTask(input: AssignTaskInput!): AssignTaskPayload! unassignTask(input: UnassignTaskInput!): UnassignTaskPayload! # Risk mutations createRisk(input: CreateRiskInput!): CreateRiskPayload! updateRisk(input: UpdateRiskInput!): UpdateRiskPayload! deleteRisk(input: DeleteRiskInput!): DeleteRiskPayload! createRiskMeasureMapping( input: CreateRiskMeasureMappingInput! ): CreateRiskMeasureMappingPayload! deleteRiskMeasureMapping( input: DeleteRiskMeasureMappingInput! ): DeleteRiskMeasureMappingPayload! createRiskPolicyMapping( input: CreateRiskPolicyMappingInput! ): CreateRiskPolicyMappingPayload! deleteRiskPolicyMapping( input: DeleteRiskPolicyMappingInput! ): DeleteRiskPolicyMappingPayload! # Evidence mutations requestEvidence(input: RequestEvidenceInput!): RequestEvidencePayload! fulfillEvidence(input: FulfillEvidenceInput!): FulfillEvidencePayload! deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! uploadTaskEvidence( input: UploadTaskEvidenceInput! ): UploadTaskEvidencePayload! uploadMeasureEvidence( input: UploadMeasureEvidenceInput! ): UploadMeasureEvidencePayload! # Vendor Compliance Report mutations uploadVendorComplianceReport( input: UploadVendorComplianceReportInput! ): UploadVendorComplianceReportPayload! deleteVendorComplianceReport( input: DeleteVendorComplianceReportInput! ): DeleteVendorComplianceReportPayload! # Policy mutations createPolicy(input: CreatePolicyInput!): CreatePolicyPayload! deletePolicy(input: DeletePolicyInput!): DeletePolicyPayload! publishPolicyVersion( input: PublishPolicyVersionInput! ): PublishPolicyVersionPayload! createDraftPolicyVersion( input: CreateDraftPolicyVersionInput! ): CreateDraftPolicyVersionPayload! updatePolicyVersion( input: UpdatePolicyVersionInput! ): UpdatePolicyVersionPayload! requestSignature(input: RequestSignatureInput!): RequestSignaturePayload! sendSigningNotifications( input: SendSigningNotificationsInput! ): SendSigningNotificationsPayload! createVendorRiskAssessment( input: CreateVendorRiskAssessmentInput! ): CreateVendorRiskAssessmentPayload! exportAudit(input: ExportAuditInput!): ExportAuditPayload! } # Input Types input CreateOrganizationInput { name: String! } input UpdateOrganizationInput { organizationId: ID! name: String logo: Upload } input DeleteOrganizationInput { organizationId: ID! } input CreateVendorInput { organizationId: ID! name: String! description: String headquarterAddress: String legalName: String websiteUrl: String privacyPolicyUrl: String category: String serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String certifications: [String!] securityPageUrl: String trustPageUrl: String statusPageUrl: String termsOfServiceUrl: String businessOwnerId: ID securityOwnerId: ID } input UpdateVendorInput { id: ID! name: String description: String statusPageUrl: String termsOfServiceUrl: String privacyPolicyUrl: String serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String websiteUrl: String legalName: String headquarterAddress: String category: String certifications: [String!] securityPageUrl: String trustPageUrl: String businessOwnerId: ID securityOwnerId: ID } input DeleteVendorInput { vendorId: ID! } input CreatePeopleInput { organizationId: ID! fullName: String! primaryEmailAddress: String! additionalEmailAddresses: [String!] kind: PeopleKind! position: String contractStartDate: Datetime contractEndDate: Datetime } input UpdatePeopleInput { id: ID! fullName: String primaryEmailAddress: String additionalEmailAddresses: [String!] kind: PeopleKind position: String contractStartDate: Datetime contractEndDate: Datetime } input DeletePeopleInput { peopleId: ID! } input CreateFrameworkInput { organizationId: ID! name: String! description: String! } input UpdateFrameworkInput { id: ID! name: String description: String } input ImportFrameworkInput { organizationId: ID! file: Upload! } input DeleteFrameworkInput { frameworkId: ID! } input CreateMeasureInput { organizationId: ID! name: String! description: String! category: String! } input UpdateMeasureInput { id: ID! name: String description: String category: String state: MeasureState } input ImportMeasureInput { organizationId: ID! file: Upload! } input CreateTaskInput { organizationId: ID! measureId: ID name: String! description: String! timeEstimate: Duration assignedToId: ID } input UpdateTaskInput { taskId: ID! name: String description: String state: TaskState timeEstimate: Duration } input DeleteTaskInput { taskId: ID! } input AssignTaskInput { taskId: ID! assignedToId: ID! } input UnassignTaskInput { taskId: ID! } input CreateControlMeasureMappingInput { controlId: ID! measureId: ID! } input CreateControlPolicyMappingInput { controlId: ID! policyId: ID! } input DeleteControlMeasureMappingInput { controlId: ID! measureId: ID! } input DeleteControlPolicyMappingInput { controlId: ID! policyId: ID! } input CreateRiskInput { organizationId: ID! name: String! description: String! category: String! ownerId: ID treatment: RiskTreatment! inherentLikelihood: Int! inherentImpact: Int! residualLikelihood: Int residualImpact: Int note: String } input UpdateRiskInput { id: ID! name: String description: String category: String ownerId: ID treatment: RiskTreatment inherentLikelihood: Int inherentImpact: Int residualLikelihood: Int residualImpact: Int note: String } input DeleteRiskInput { riskId: ID! } input CreateRiskMeasureMappingInput { riskId: ID! measureId: ID! } input DeleteRiskMeasureMappingInput { riskId: ID! measureId: ID! } input CreateRiskPolicyMappingInput { riskId: ID! policyId: ID! } input DeleteRiskPolicyMappingInput { riskId: ID! policyId: ID! } input RequestEvidenceInput { taskId: ID! name: String! type: EvidenceType! description: String! } input FulfillEvidenceInput { evidenceId: ID! name: String file: Upload url: String } input CreateEvidenceInput { taskId: ID! name: String! type: EvidenceType! url: String file: Upload description: String! } input DeleteEvidenceInput { evidenceId: ID! } input UploadVendorComplianceReportInput { vendorId: ID! reportDate: Datetime! validUntil: Datetime reportName: String! file: Upload! } input DeleteVendorComplianceReportInput { reportId: ID! } input CreatePolicyInput { organizationId: ID! title: String! content: String! ownerId: ID! } input UpdatePolicyInput { id: ID! title: String content: String ownerId: ID createdBy: ID } input DeletePolicyInput { policyId: ID! } input ConfirmEmailInput { token: String! } input InviteUserInput { organizationId: ID! email: String! fullName: String! } input RemoveUserInput { organizationId: ID! userId: ID! } # Payload Types type CreateOrganizationPayload { organizationEdge: OrganizationEdge! } type UpdateOrganizationPayload { organization: Organization! } type DeleteOrganizationPayload { deletedOrganizationId: ID! } type CreateVendorPayload { vendorEdge: VendorEdge! } type UpdateVendorPayload { vendor: Vendor! } type DeleteVendorPayload { deletedVendorId: ID! } type CreatePeoplePayload { peopleEdge: PeopleEdge! } type UpdatePeoplePayload { people: People! } type DeletePeoplePayload { deletedPeopleId: ID! } type CreateFrameworkPayload { frameworkEdge: FrameworkEdge! } type UpdateFrameworkPayload { framework: Framework! } type ImportFrameworkPayload { frameworkEdge: FrameworkEdge! } type DeleteFrameworkPayload { deletedFrameworkId: ID! } type CreateMeasurePayload { measureEdge: MeasureEdge! } type UpdateMeasurePayload { measure: Measure! } type ImportMeasurePayload { measureEdges: [MeasureEdge!]! } type CreateTaskPayload { taskEdge: TaskEdge! } type UpdateTaskPayload { task: Task! } type DeleteTaskPayload { deletedTaskId: ID! } type AssignTaskPayload { task: Task! } type UnassignTaskPayload { task: Task! } type CreateControlMeasureMappingPayload { controlEdge: ControlEdge! measureEdge: MeasureEdge! } type CreateControlPolicyMappingPayload { controlEdge: ControlEdge! policyEdge: PolicyEdge! } type DeleteControlMeasureMappingPayload { deletedControlId: ID! deletedMeasureId: ID! } type DeleteControlPolicyMappingPayload { deletedControlId: ID! deletedPolicyId: ID! } type CreateRiskPayload { riskEdge: RiskEdge! } type UpdateRiskPayload { risk: Risk! } type DeleteRiskPayload { deletedRiskId: ID! } type CreateRiskMeasureMappingPayload { riskEdge: RiskEdge! measureEdge: MeasureEdge! } type DeleteRiskMeasureMappingPayload { deletedMeasureId: ID! deletedRiskId: ID! } type CreateRiskPolicyMappingPayload { riskEdge: RiskEdge! policyEdge: PolicyEdge! } type DeleteRiskPolicyMappingPayload { deletedRiskId: ID! deletedPolicyId: ID! } type RequestEvidencePayload { evidenceEdge: EvidenceEdge! } type FulfillEvidencePayload { evidenceEdge: EvidenceEdge! } type CreateEvidencePayload { evidenceEdge: EvidenceEdge! } type DeleteEvidencePayload { deletedEvidenceId: ID! } type UploadVendorComplianceReportPayload { vendorComplianceReportEdge: VendorComplianceReportEdge! } type DeleteVendorComplianceReportPayload { deletedVendorComplianceReportId: ID! } type CreatePolicyPayload { policyEdge: PolicyEdge! policyVersionEdge: PolicyVersionEdge! } type UpdatePolicyPayload { policy: Policy! } type DeletePolicyPayload { deletedPolicyId: ID! } type ConfirmEmailPayload { success: Boolean! } type InviteUserPayload { success: Boolean! } type RemoveUserPayload { success: Boolean! } input VendorRiskAssessmentOrder { field: VendorRiskAssessmentOrderField! direction: OrderDirection! } type VendorRiskAssessment implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) assessedAt: Datetime! assessedBy: People! @goField(forceResolver: true) expiresAt: Datetime! dataSensitivity: DataSensitivity! businessImpact: BusinessImpact! notes: String createdAt: Datetime! updatedAt: Datetime! } enum VendorRiskAssessmentOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderFieldCreatedAt" ) EXPIRES_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderFieldExpiresAt" ) ASSESSED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderFieldAssessedAt" ) } input CreateVendorRiskAssessmentInput { vendorId: ID! assessedBy: ID! expiresAt: Datetime! dataSensitivity: DataSensitivity! businessImpact: BusinessImpact! notes: String } type CreateVendorRiskAssessmentPayload { vendorRiskAssessmentEdge: VendorRiskAssessmentEdge! } input DeleteMeasureInput { measureId: ID! } type DeleteMeasurePayload { deletedMeasureId: ID! } type PolicyVersion implements Node { id: ID! policy: Policy! @goField(forceResolver: true) status: PolicyStatus! version: Int! content: String! changelog: String! signatures( first: Int after: CursorKey last: Int before: CursorKey orderBy: PolicyVersionSignatureOrder ): PolicyVersionSignatureConnection! @goField(forceResolver: true) publishedBy: People @goField(forceResolver: true) publishedAt: Datetime createdAt: Datetime! updatedAt: Datetime! } type PolicyVersionSignatureConnection { edges: [PolicyVersionSignatureEdge!]! pageInfo: PageInfo! } type PolicyVersionSignatureEdge { cursor: CursorKey! node: PolicyVersionSignature! } input PolicyVersionSignatureOrder { field: PolicyVersionSignatureOrderField! direction: OrderDirection! } enum PolicyVersionSignatureState @goModel( model: "github.com/getprobo/probo/pkg/coredata.PolicyVersionSignatureState" ) { REQUESTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyVersionSignatureStateRequested" ) SIGNED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyVersionSignatureStateSigned" ) } enum PolicyVersionSignatureOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.PolicyVersionSignatureOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyVersionSignatureOrderFieldCreatedAt" ) SIGNED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PolicyVersionSignatureOrderFieldSignedAt" ) } type PolicyVersionSignature implements Node { id: ID! policyVersion: PolicyVersion! @goField(forceResolver: true) state: PolicyVersionSignatureState! signedBy: People! @goField(forceResolver: true) signedAt: Datetime requestedAt: Datetime! requestedBy: People! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } input RequestSignatureInput { policyVersionId: ID! signatoryId: ID! } type RequestSignaturePayload { policyVersionSignatureEdge: PolicyVersionSignatureEdge! } input PublishPolicyVersionInput { policyId: ID! } type PublishPolicyVersionPayload { policyVersion: PolicyVersion! policy: Policy! } type CreateDraftPolicyVersionPayload { policyVersionEdge: PolicyVersionEdge! } input CreateDraftPolicyVersionInput { policyID: ID! } input UpdatePolicyVersionInput { policyVersionId: ID! content: String! } type UpdatePolicyVersionPayload { policyVersion: PolicyVersion! } input SendSigningNotificationsInput { organizationId: ID! } type SendSigningNotificationsPayload { success: Boolean! } type UploadTaskEvidencePayload { evidenceEdge: EvidenceEdge! } type UploadMeasureEvidencePayload { evidenceEdge: EvidenceEdge! } input UploadTaskEvidenceInput { taskId: ID! file: Upload! } input UploadMeasureEvidenceInput { measureId: ID! file: Upload! } input ExportAuditInput { frameworkId: ID! } type ExportAuditPayload { url: String! }