Files
probo/pkg/server/api/console/v1/schema.graphql
gearnode 9b868220f6 Add vendor business and security owner
Signed-off-by: gearnode <bryan@frimin.fr>
2025-04-12 14:53:16 -07:00

1393 lines
28 KiB
GraphQL

# 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 MitigationState
@goModel(model: "github.com/getprobo/probo/pkg/coredata.MitigationState") {
NOT_STARTED
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationStateNotStarted"
)
IN_PROGRESS
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationStateInProgress"
)
NOT_APPLICABLE
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationStateNotApplicable"
)
IMPLEMENTED
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationStateImplemented"
)
}
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 MitigationImportance
@goModel(
model: "github.com/getprobo/probo/pkg/coredata.MitigationImportance"
) {
MANDATORY
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationImportanceMandatory"
)
PREFERRED
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationImportancePreferred"
)
ADVANCED
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationImportanceAdvanced"
)
}
enum ServiceCriticality
@goModel(model: "github.com/getprobo/probo/pkg/coredata.ServiceCriticality") {
LOW
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityLow"
)
MEDIUM
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityMedium"
)
HIGH
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityHigh"
)
}
enum RiskTier
@goModel(model: "github.com/getprobo/probo/pkg/coredata.RiskTier") {
CRITICAL
@goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierCritical")
SIGNIFICANT
@goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierSignificant")
GENERAL
@goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierGeneral")
}
enum PolicyStatus
@goModel(model: "github.com/getprobo/probo/pkg/coredata.PolicyStatus") {
DRAFT
@goEnum(value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusDraft")
ACTIVE
@goEnum(value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusActive")
}
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 MitigationOrderField
@goModel(
model: "github.com/getprobo/probo/pkg/coredata.MitigationOrderField"
) {
CREATED_AT
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.MitigationOrderFieldCreatedAt"
)
}
enum TaskOrderField
@goModel(model: "github.com/getprobo/probo/pkg/coredata.TaskOrderField") {
CREATED_AT
}
enum PolicyOrderField
@goModel(model: "github.com/getprobo/probo/pkg/coredata.PolicyOrderField") {
NAME
}
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
}
# 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 MitigationOrder
@goModel(
model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.MitigationOrderBy"
) {
direction: OrderDirection!
field: MitigationOrderField!
}
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!
}
# 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)
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)
mitigations(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: MitigationOrder
): MitigationConnection! @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!
}
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)
businessOwner: People @goField(forceResolver: true)
securityOwner: People @goField(forceResolver: true)
serviceStartAt: Datetime!
serviceTerminationAt: Datetime
serviceCriticality: ServiceCriticality!
riskTier: RiskTier!
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!
mitigations(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: MitigationOrder
): MitigationConnection! @goField(forceResolver: true)
policies(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: PolicyOrder
): PolicyConnection! @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
}
type Mitigation implements Node {
id: ID!
category: String!
name: String!
description: String!
state: MitigationState!
importance: MitigationImportance!
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!
name: String!
status: PolicyStatus!
content: String!
reviewDate: Datetime
owner: People! @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!
treatment: RiskTreatment!
inherentLikelihood: Float!
inherentImpact: Float!
inherentSeverity: Float!
residualLikelihood: Float!
residualImpact: Float!
residualSeverity: Float!
owner: People @goField(forceResolver: true)
mitigations(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: MitigationOrder
): MitigationConnection! @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 MitigationConnection {
edges: [MitigationEdge!]!
pageInfo: PageInfo!
}
type MitigationEdge {
cursor: CursorKey!
node: Mitigation!
}
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!
}
# 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!
# Mitigation mutations
createMitigation(input: CreateMitigationInput!): CreateMitigationPayload!
updateMitigation(input: UpdateMitigationInput!): UpdateMitigationPayload!
importMitigation(input: ImportMitigationInput!): ImportMitigationPayload!
# Control mutations
createControlMitigationMapping(
input: CreateControlMitigationMappingInput!
): CreateControlMitigationMappingPayload!
createControlPolicyMapping(
input: CreateControlPolicyMappingInput!
): CreateControlPolicyMappingPayload!
deleteControlMitigationMapping(
input: DeleteControlMitigationMappingInput!
): DeleteControlMitigationMappingPayload!
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!
createRiskMitigationMapping(
input: CreateRiskMitigationMappingInput!
): CreateRiskMitigationMappingPayload!
deleteRiskMitigationMapping(
input: DeleteRiskMitigationMappingInput!
): DeleteRiskMitigationMappingPayload!
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!
updatePolicy(input: UpdatePolicyInput!): UpdatePolicyPayload!
deletePolicy(input: DeletePolicyInput!): DeletePolicyPayload!
}
# 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
serviceCriticality: ServiceCriticality!
riskTier: RiskTier!
businessOwnerId: ID
securityOwnerId: ID
}
input UpdateVendorInput {
id: ID!
name: String
description: String
serviceStartAt: Datetime
serviceTerminationAt: Datetime
serviceCriticality: ServiceCriticality
riskTier: RiskTier
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 CreateMitigationInput {
organizationId: ID!
name: String!
description: String!
category: String!
importance: MitigationImportance!
}
input UpdateMitigationInput {
id: ID!
name: String
description: String
category: String
state: MitigationState
importance: MitigationImportance
}
input ImportMitigationInput {
organizationId: ID!
file: Upload!
}
input CreateTaskInput {
mitigationId: 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 CreateControlMitigationMappingInput {
controlId: ID!
mitigationId: ID!
}
input CreateControlPolicyMappingInput {
controlId: ID!
policyId: ID!
}
input DeleteControlMitigationMappingInput {
controlId: ID!
mitigationId: ID!
}
input DeleteControlPolicyMappingInput {
controlId: ID!
policyId: ID!
}
input CreateRiskInput {
organizationId: ID!
name: String!
description: String!
ownerId: ID
treatment: RiskTreatment!
inherentLikelihood: Float!
inherentImpact: Float!
residualLikelihood: Float
residualImpact: Float
}
input UpdateRiskInput {
id: ID!
name: String
description: String
ownerId: ID
treatment: RiskTreatment
inherentLikelihood: Float
inherentImpact: Float
residualLikelihood: Float
residualImpact: Float
}
input DeleteRiskInput {
riskId: ID!
}
input CreateRiskMitigationMappingInput {
riskId: ID!
mitigationId: ID!
}
input DeleteRiskMitigationMappingInput {
riskId: ID!
mitigationId: 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!
name: String!
content: String!
status: PolicyStatus!
reviewDate: Datetime
ownerId: ID!
}
input UpdatePolicyInput {
id: ID!
name: String
content: String
status: PolicyStatus
reviewDate: Datetime
ownerId: 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 CreateMitigationPayload {
mitigationEdge: MitigationEdge!
}
type UpdateMitigationPayload {
mitigation: Mitigation!
}
type ImportMitigationPayload {
mitigationEdges: [MitigationEdge!]!
}
type CreateTaskPayload {
taskEdge: TaskEdge!
}
type UpdateTaskPayload {
task: Task!
}
type DeleteTaskPayload {
deletedTaskId: ID!
}
type AssignTaskPayload {
task: Task!
}
type UnassignTaskPayload {
task: Task!
}
type CreateControlMitigationMappingPayload {
success: Boolean!
}
type CreateControlPolicyMappingPayload {
success: Boolean!
}
type DeleteControlMitigationMappingPayload {
success: Boolean!
}
type DeleteControlPolicyMappingPayload {
success: Boolean!
}
type CreateRiskPayload {
riskEdge: RiskEdge!
}
type UpdateRiskPayload {
risk: Risk!
}
type DeleteRiskPayload {
deletedRiskId: ID!
}
type CreateRiskMitigationMappingPayload {
success: Boolean!
}
type DeleteRiskMitigationMappingPayload {
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!
}
type UpdatePolicyPayload {
policy: Policy!
}
type DeletePolicyPayload {
deletedPolicyId: ID!
}
type ConfirmEmailPayload {
success: Boolean!
}
type InviteUserPayload {
success: Boolean!
}
type RemoveUserPayload {
success: Boolean!
}