1136 lines
22 KiB
GraphQL
1136 lines
22 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") {
|
|
VALID
|
|
@goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceStateValid")
|
|
INVALID
|
|
@goEnum(
|
|
value: "github.com/getprobo/probo/pkg/coredata.EvidenceStateInvalid"
|
|
)
|
|
EXPIRED
|
|
@goEnum(
|
|
value: "github.com/getprobo/probo/pkg/coredata.EvidenceStateExpired"
|
|
)
|
|
}
|
|
|
|
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")
|
|
}
|
|
|
|
# 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 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 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!
|
|
serviceStartAt: Datetime!
|
|
serviceTerminationAt: Datetime
|
|
serviceCriticality: ServiceCriticality!
|
|
riskTier: RiskTier!
|
|
statusPageUrl: String
|
|
termsOfServiceUrl: String
|
|
privacyPolicyUrl: String
|
|
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)
|
|
|
|
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)
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
}
|
|
|
|
type Risk implements Node {
|
|
id: ID!
|
|
name: String!
|
|
description: String!
|
|
probability: Float!
|
|
impact: Float!
|
|
|
|
mitigations(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
orderBy: MitigationOrder
|
|
): MitigationConnection! @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!
|
|
}
|
|
|
|
# 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
|
|
createControlMapping(
|
|
input: CreateControlMappingInput!
|
|
): CreateControlMappingPayload!
|
|
deleteControlMapping(
|
|
input: DeleteControlMappingInput!
|
|
): DeleteControlMappingPayload!
|
|
|
|
# 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!
|
|
createRiskMapping(input: CreateRiskMappingInput!): CreateRiskMappingPayload!
|
|
deleteRiskMapping(input: DeleteRiskMappingInput!): DeleteRiskMappingPayload!
|
|
|
|
# Evidence mutations
|
|
uploadEvidence(input: UploadEvidenceInput!): UploadEvidencePayload!
|
|
deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload!
|
|
|
|
# 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!
|
|
serviceStartAt: Datetime!
|
|
serviceTerminationAt: Datetime
|
|
serviceCriticality: ServiceCriticality!
|
|
riskTier: RiskTier!
|
|
statusPageUrl: String
|
|
termsOfServiceUrl: String
|
|
privacyPolicyUrl: String
|
|
}
|
|
|
|
input UpdateVendorInput {
|
|
id: ID!
|
|
name: String
|
|
description: String
|
|
serviceStartAt: Datetime
|
|
serviceTerminationAt: Datetime
|
|
serviceCriticality: ServiceCriticality
|
|
riskTier: RiskTier
|
|
statusPageUrl: String
|
|
termsOfServiceUrl: String
|
|
privacyPolicyUrl: String
|
|
}
|
|
|
|
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 CreateControlMappingInput {
|
|
controlId: ID!
|
|
mitigationId: ID!
|
|
}
|
|
|
|
input DeleteControlMappingInput {
|
|
controlId: ID!
|
|
mitigationId: ID!
|
|
}
|
|
|
|
input CreateRiskInput {
|
|
organizationId: ID!
|
|
name: String!
|
|
description: String!
|
|
probability: Float!
|
|
impact: Float!
|
|
}
|
|
|
|
input UpdateRiskInput {
|
|
id: ID!
|
|
name: String
|
|
description: String
|
|
probability: Float
|
|
impact: Float
|
|
}
|
|
|
|
input DeleteRiskInput {
|
|
riskId: ID!
|
|
}
|
|
|
|
input CreateRiskMappingInput {
|
|
riskId: ID!
|
|
mitigationId: ID!
|
|
probability: Float!
|
|
impact: Float!
|
|
}
|
|
|
|
input DeleteRiskMappingInput {
|
|
riskId: ID!
|
|
mitigationId: ID!
|
|
}
|
|
|
|
input UploadEvidenceInput {
|
|
taskId: ID!
|
|
name: String!
|
|
file: Upload
|
|
type: EvidenceType!
|
|
url: String
|
|
description: String!
|
|
}
|
|
|
|
input DeleteEvidenceInput {
|
|
evidenceId: 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 CreateControlMappingPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type DeleteControlMappingPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type CreateRiskPayload {
|
|
riskEdge: RiskEdge!
|
|
}
|
|
|
|
type UpdateRiskPayload {
|
|
risk: Risk!
|
|
}
|
|
|
|
type DeleteRiskPayload {
|
|
deletedRiskId: ID!
|
|
}
|
|
|
|
type CreateRiskMappingPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type DeleteRiskMappingPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type UploadEvidencePayload {
|
|
evidenceEdge: EvidenceEdge!
|
|
}
|
|
|
|
type DeleteEvidencePayload {
|
|
deletedEvidenceId: 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!
|
|
}
|