# 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 MesureState @goModel(model: "github.com/getprobo/probo/pkg/coredata.MesureState") { NOT_STARTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MesureStateNotStarted" ) IN_PROGRESS @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MesureStateInProgress" ) NOT_APPLICABLE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MesureStateNotApplicable" ) IMPLEMENTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MesureStateImplemented" ) } 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 MesureOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.MesureOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MesureOrderFieldCreatedAt" ) } 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" ) } 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 MesureOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.MesureOrderBy" ) { direction: OrderDirection! field: MesureOrderField! } 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) mesures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MesureOrder ): MesureConnection! @goField(forceResolver: true) risks( first: Int after: CursorKey last: Int before: CursorKey orderBy: RiskOrder ): RiskConnection! @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! createdAt: Datetime! updatedAt: Datetime! } type Vendor implements Node { id: ID! name: String! description: String 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) serviceStartAt: Datetime! serviceTerminationAt: Datetime 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! 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! mesures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MesureOrder ): MesureConnection! @goField(forceResolver: true) policies( first: Int after: CursorKey last: Int before: CursorKey orderBy: PolicyOrder ): PolicyConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Mesure implements Node { id: ID! category: String! name: String! description: String! state: MesureState! 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) 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! createdAt: Datetime! updatedAt: Datetime! } type Policy implements Node { id: ID! title: String! description: String! currentPublishedVersion: Int owner: People! @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! inherentSeverity: Int! residualLikelihood: Int! residualImpact: Int! residualSeverity: Int! note: String! owner: People @goField(forceResolver: true) mesures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MesureOrder ): MesureConnection! @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 MesureConnection { edges: [MesureEdge!]! pageInfo: PageInfo! } type MesureEdge { cursor: CursorKey! node: Mesure! } 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! # Mesure mutations createMesure(input: CreateMesureInput!): CreateMesurePayload! updateMesure(input: UpdateMesureInput!): UpdateMesurePayload! importMesure(input: ImportMesureInput!): ImportMesurePayload! deleteMesure(input: DeleteMesureInput!): DeleteMesurePayload! # Control mutations createControlMesureMapping( input: CreateControlMesureMappingInput! ): CreateControlMesureMappingPayload! createControlPolicyMapping( input: CreateControlPolicyMappingInput! ): CreateControlPolicyMappingPayload! deleteControlMesureMapping( input: DeleteControlMesureMappingInput! ): DeleteControlMesureMappingPayload! 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! createRiskMesureMapping( input: CreateRiskMesureMappingInput! ): CreateRiskMesureMappingPayload! deleteRiskMesureMapping( input: DeleteRiskMesureMappingInput! ): DeleteRiskMesureMappingPayload! createRiskPolicyMapping( input: CreateRiskPolicyMappingInput! ): CreateRiskPolicyMappingPayload! deleteRiskPolicyMapping( input: DeleteRiskPolicyMappingInput! ): DeleteRiskPolicyMappingPayload! # Evidence mutations requestEvidence(input: RequestEvidenceInput!): RequestEvidencePayload! fulfillEvidence(input: FulfillEvidenceInput!): FulfillEvidencePayload! createEvidence(input: CreateEvidenceInput!): CreateEvidencePayload! deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! # 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! createVendorRiskAssessment(input: CreateVendorRiskAssessmentInput!): CreateVendorRiskAssessmentPayload! } # 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 serviceStartAt: Datetime! serviceTerminationAt: Datetime businessOwnerId: ID securityOwnerId: ID } input UpdateVendorInput { id: ID! name: String description: String serviceStartAt: Datetime serviceTerminationAt: Datetime 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! } input UpdatePeopleInput { id: ID! fullName: String primaryEmailAddress: String additionalEmailAddresses: [String!] kind: PeopleKind } 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 CreateMesureInput { organizationId: ID! name: String! description: String! category: String! } input UpdateMesureInput { id: ID! name: String description: String category: String state: MesureState } input ImportMesureInput { organizationId: ID! file: Upload! } input CreateTaskInput { mesureId: 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 CreateControlMesureMappingInput { controlId: ID! mesureId: ID! } input CreateControlPolicyMappingInput { controlId: ID! policyId: ID! } input DeleteControlMesureMappingInput { controlId: ID! mesureId: 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 CreateRiskMesureMappingInput { riskId: ID! mesureId: ID! } input DeleteRiskMesureMappingInput { riskId: ID! mesureId: 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 CreateMesurePayload { mesureEdge: MesureEdge! } type UpdateMesurePayload { mesure: Mesure! } type ImportMesurePayload { mesureEdges: [MesureEdge!]! } type CreateTaskPayload { taskEdge: TaskEdge! } type UpdateTaskPayload { task: Task! } type DeleteTaskPayload { deletedTaskId: ID! } type AssignTaskPayload { task: Task! } type UnassignTaskPayload { task: Task! } type CreateControlMesureMappingPayload { success: Boolean! } type CreateControlPolicyMappingPayload { success: Boolean! } type DeleteControlMesureMappingPayload { success: Boolean! } type DeleteControlPolicyMappingPayload { success: Boolean! } type CreateRiskPayload { riskEdge: RiskEdge! } type UpdateRiskPayload { risk: Risk! } type DeleteRiskPayload { deletedRiskId: ID! } type CreateRiskMesureMappingPayload { success: Boolean! } type DeleteRiskMesureMappingPayload { success: Boolean! } type CreateRiskPolicyMappingPayload { success: Boolean! } type DeleteRiskPolicyMappingPayload { success: Boolean! } 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 DeleteMesureInput { mesureId: ID! } type DeleteMesurePayload { deletedMesureId: 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! }