Files
probo/pkg/server/api/console/v1/schema.graphql
Sacha Al Himdani 67cc9d9ddc Add control fulltext search
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-06-07 13:01:06 -07:00

2133 lines
47 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 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 DocumentStatus
@goModel(model: "github.com/getprobo/probo/pkg/coredata.DocumentStatus") {
DRAFT
@goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentStatusDraft")
PUBLISHED
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentStatusPublished"
)
}
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"
)
SECTION_TITLE
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.ControlOrderFieldSectionTitle"
)
}
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 DocumentOrderField
@goModel(model: "github.com/getprobo/probo/pkg/coredata.DocumentOrderField") {
TITLE
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentOrderFieldTitle"
)
CREATED_AT
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentOrderFieldCreatedAt"
)
}
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"
)
INHERENT_RISK_SCORE
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldInherentRiskScore"
)
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 @goModel(model: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderField") {
NAME @goEnum(value: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderFieldName")
CREATED_AT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderFieldCreatedAt")
UPDATED_AT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderFieldUpdatedAt")
}
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 DocumentVersionOrderField
@goModel(
model: "github.com/getprobo/probo/pkg/coredata.DocumentVersionOrderField"
) {
VERSION
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionOrderFieldVersion"
)
CREATED_AT
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionOrderFieldCreatedAt"
)
}
enum VendorCategory @goModel(model: "github.com/getprobo/probo/pkg/coredata.VendorCategory") {
ANALYTICS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryAnalytics")
CLOUD_MONITORING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudMonitoring")
CLOUD_PROVIDER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudProvider")
COLLABORATION @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCollaboration")
CUSTOMER_SUPPORT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCustomerSupport")
DATA_STORAGE_AND_PROCESSING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDataStorageAndProcessing")
DOCUMENT_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDocumentManagement")
EMPLOYEE_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEmployeeManagement")
ENGINEERING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEngineering")
FINANCE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryFinance")
IDENTITY_PROVIDER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIdentityProvider")
IT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIT")
MARKETING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryMarketing")
OFFICE_OPERATIONS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOfficeOperations")
OTHER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOther")
PASSWORD_MANAGEMENT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryPasswordManagement")
PRODUCT_AND_DESIGN @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProductAndDesign")
PROFESSIONAL_SERVICES @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProfessionalServices")
RECRUITING @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryRecruiting")
SALES @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySales")
SECURITY @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySecurity")
VERSION_CONTROL @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryVersionControl")
}
enum DocumentType @goModel(model: "github.com/getprobo/probo/pkg/coredata.DocumentType") {
OTHER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentTypeOther")
ISMS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentTypeISMS")
POLICY @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentTypePolicy")
}
enum AssetType @goModel(model: "github.com/getprobo/probo/pkg/coredata.AssetType") {
PHYSICAL @goEnum(value: "github.com/getprobo/probo/pkg/coredata.AssetTypePhysical")
VIRTUAL @goEnum(value: "github.com/getprobo/probo/pkg/coredata.AssetTypeVirtual")
}
enum CriticityLevel @goModel(model: "github.com/getprobo/probo/pkg/coredata.CriticityLevel") {
LOW @goEnum(value: "github.com/getprobo/probo/pkg/coredata.CriticityLevelLow")
MEDIUM @goEnum(value: "github.com/getprobo/probo/pkg/coredata.CriticityLevelMedium")
HIGH @goEnum(value: "github.com/getprobo/probo/pkg/coredata.CriticityLevelHigh")
}
enum AssetOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.AssetOrderField") {
CREATED_AT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.AssetOrderFieldCreatedAt")
AMOUNT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.AssetOrderFieldAmount")
CRITICITY @goEnum(value: "github.com/getprobo/probo/pkg/coredata.AssetOrderFieldCriticity")
}
enum DatumOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.DatumOrderField") {
CREATED_AT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DatumOrderFieldCreatedAt")
NAME @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DatumOrderFieldName")
DATA_SENSITIVITY @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DatumOrderFieldDataSensitivity")
}
# 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 DocumentOrder
@goModel(
model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.DocumentOrderBy"
) {
direction: OrderDirection!
field: DocumentOrderField!
}
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 DocumentVersionOrder
@goModel(
model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.DocumentVersionOrderBy"
) {
direction: OrderDirection!
field: DocumentVersionOrderField!
}
input DocumentVersionFilter {
status: DocumentStatus
}
# Input Types for Filtering
input ControlFilter {
query: String
}
# 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)
controls(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: ControlOrder
filter: ControlFilter
): ControlConnection! @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)
documents(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: DocumentOrder
): DocumentConnection! @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)
assets(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: AssetOrder
): AssetConnection! @goField(forceResolver: true)
data(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: DatumOrder
): DatumConnection! @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!
category: VendorCategory!
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
businessAssociateAgreementUrl: String
subprocessorsListUrl: 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
filter: ControlFilter
): ControlConnection! @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
}
type Control implements Node {
id: ID!
sectionTitle: 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)
documents(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: DocumentOrder
): DocumentConnection! @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
filter: ControlFilter
): ControlConnection! @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
}
type Task implements Node {
id: ID!
name: String!
description: String!
state: TaskState!
timeEstimate: Duration
deadline: Datetime
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 Document implements Node {
id: ID!
title: String!
description: String!
documentType: DocumentType!
currentPublishedVersion: Int
owner: People! @goField(forceResolver: true)
organization: Organization! @goField(forceResolver: true)
versions(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: DocumentVersionOrder
filter: DocumentVersionFilter
): DocumentVersionConnection! @goField(forceResolver: true)
controls(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: ControlOrder
filter: ControlFilter
): 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)
documents(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: DocumentOrder
): DocumentConnection! @goField(forceResolver: true)
controls(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: ControlOrder
filter: ControlFilter
): 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 DocumentConnection {
edges: [DocumentEdge!]!
pageInfo: PageInfo!
}
type DocumentEdge {
cursor: CursorKey!
node: Document!
}
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 DocumentVersionConnection {
edges: [DocumentVersionEdge!]!
pageInfo: PageInfo!
}
type DocumentVersionEdge {
cursor: CursorKey!
node: DocumentVersion!
}
type DatumConnection {
edges: [DatumEdge!]!
pageInfo: PageInfo!
}
type DatumEdge {
cursor: CursorKey!
node: Datum!
}
# 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!
# Control mutations
createControl(input: CreateControlInput!): CreateControlPayload!
updateControl(input: UpdateControlInput!): UpdateControlPayload!
deleteControl(input: DeleteControlInput!): DeleteControlPayload!
# Measure mutations
createMeasure(input: CreateMeasureInput!): CreateMeasurePayload!
updateMeasure(input: UpdateMeasureInput!): UpdateMeasurePayload!
importMeasure(input: ImportMeasureInput!): ImportMeasurePayload!
deleteMeasure(input: DeleteMeasureInput!): DeleteMeasurePayload!
# Control mutations
createControlMeasureMapping(
input: CreateControlMeasureMappingInput!
): CreateControlMeasureMappingPayload!
createControlDocumentMapping(
input: CreateControlDocumentMappingInput!
): CreateControlDocumentMappingPayload!
deleteControlMeasureMapping(
input: DeleteControlMeasureMappingInput!
): DeleteControlMeasureMappingPayload!
deleteControlDocumentMapping(
input: DeleteControlDocumentMappingInput!
): DeleteControlDocumentMappingPayload!
# 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!
createRiskDocumentMapping(
input: CreateRiskDocumentMappingInput!
): CreateRiskDocumentMappingPayload!
deleteRiskDocumentMapping(
input: DeleteRiskDocumentMappingInput!
): DeleteRiskDocumentMappingPayload!
# 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!
# Document mutations
createDocument(input: CreateDocumentInput!): CreateDocumentPayload!
updateDocument(input: UpdateDocumentInput!): UpdateDocumentPayload!
deleteDocument(input: DeleteDocumentInput!): DeleteDocumentPayload!
publishDocumentVersion(
input: PublishDocumentVersionInput!
): PublishDocumentVersionPayload!
generateDocumentChangelog(
input: GenerateDocumentChangelogInput!
): GenerateDocumentChangelogPayload!
createDraftDocumentVersion(
input: CreateDraftDocumentVersionInput!
): CreateDraftDocumentVersionPayload!
updateDocumentVersion(
input: UpdateDocumentVersionInput!
): UpdateDocumentVersionPayload!
requestSignature(input: RequestSignatureInput!): RequestSignaturePayload!
sendSigningNotifications(
input: SendSigningNotificationsInput!
): SendSigningNotificationsPayload!
createVendorRiskAssessment(
input: CreateVendorRiskAssessmentInput!
): CreateVendorRiskAssessmentPayload!
exportAudit(input: ExportAuditInput!): ExportAuditPayload!
assessVendor(input: AssessVendorInput!): AssessVendorPayload!
createAsset(input: CreateAssetInput!): CreateAssetPayload!
updateAsset(input: UpdateAssetInput!): UpdateAssetPayload!
deleteAsset(input: DeleteAssetInput!): DeleteAssetPayload!
addAssetVendor(input: AddAssetVendorInput!): AddAssetVendorPayload!
removeAssetVendor(input: RemoveAssetVendorInput!): RemoveAssetVendorPayload!
createDatum(input: CreateDatumInput!): CreateDatumPayload!
updateDatum(input: UpdateDatumInput!): UpdateDatumPayload!
deleteDatum(input: DeleteDatumInput!): DeleteDatumPayload!
addDatumVendor(input: AddDatumVendorInput!): AddDatumVendorPayload!
removeDatumVendor(input: RemoveDatumVendorInput!): RemoveDatumVendorPayload!
}
# 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: VendorCategory
serviceLevelAgreementUrl: String
dataProcessingAgreementUrl: String
businessAssociateAgreementUrl: String
subprocessorsListUrl: 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
businessAssociateAgreementUrl: String
subprocessorsListUrl: String
websiteUrl: String
legalName: String
headquarterAddress: String
category: VendorCategory
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
deadline: Datetime
}
input UpdateTaskInput {
taskId: ID!
name: String
description: String
state: TaskState
timeEstimate: Duration
deadline: Datetime
}
input DeleteTaskInput {
taskId: ID!
}
input AssignTaskInput {
taskId: ID!
assignedToId: ID!
}
input UnassignTaskInput {
taskId: ID!
}
input CreateControlMeasureMappingInput {
controlId: ID!
measureId: ID!
}
input CreateControlDocumentMappingInput {
controlId: ID!
documentId: ID!
}
input DeleteControlMeasureMappingInput {
controlId: ID!
measureId: ID!
}
input DeleteControlDocumentMappingInput {
controlId: ID!
documentId: 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 CreateRiskDocumentMappingInput {
riskId: ID!
documentId: ID!
}
input DeleteRiskDocumentMappingInput {
riskId: ID!
documentId: 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 CreateDocumentInput {
organizationId: ID!
title: String!
content: String!
ownerId: ID!
documentType: DocumentType!
}
input UpdateDocumentInput {
id: ID!
title: String
content: String
ownerId: ID
createdBy: ID
documentType: DocumentType
}
input DeleteDocumentInput {
documentId: ID!
}
input ConfirmEmailInput {
token: String!
}
input InviteUserInput {
organizationId: ID!
email: String!
fullName: String!
}
input RemoveUserInput {
organizationId: ID!
userId: ID!
}
input CreateControlInput {
frameworkId: ID!
sectionTitle: String!
name: String!
description: String!
}
input UpdateControlInput {
id: ID!
sectionTitle: String
name: String
description: String
}
input DeleteControlInput {
controlId: ID!
}
# Payload Types
type CreateOrganizationPayload {
organizationEdge: OrganizationEdge!
}
type UpdateOrganizationPayload {
organization: Organization!
}
type DeleteOrganizationPayload {
deletedOrganizationId: ID!
}
type CreateControlPayload {
controlEdge: ControlEdge!
}
type UpdateControlPayload {
control: Control!
}
type DeleteControlPayload {
deletedControlId: 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 CreateControlDocumentMappingPayload {
controlEdge: ControlEdge!
documentEdge: DocumentEdge!
}
type DeleteControlMeasureMappingPayload {
deletedControlId: ID!
deletedMeasureId: ID!
}
type DeleteControlDocumentMappingPayload {
deletedControlId: ID!
deletedDocumentId: 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 CreateRiskDocumentMappingPayload {
riskEdge: RiskEdge!
documentEdge: DocumentEdge!
}
type DeleteRiskDocumentMappingPayload {
deletedRiskId: ID!
deletedDocumentId: 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 CreateDocumentPayload {
documentEdge: DocumentEdge!
documentVersionEdge: DocumentVersionEdge!
}
type UpdateDocumentPayload {
document: Document!
}
type DeleteDocumentPayload {
deletedDocumentId: 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 DocumentVersion implements Node {
id: ID!
document: Document! @goField(forceResolver: true)
status: DocumentStatus!
version: Int!
content: String!
changelog: String!
title: String!
owner: People! @goField(forceResolver: true)
signatures(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: DocumentVersionSignatureOrder
): DocumentVersionSignatureConnection! @goField(forceResolver: true)
publishedBy: People @goField(forceResolver: true)
publishedAt: Datetime
createdAt: Datetime!
updatedAt: Datetime!
}
type DocumentVersionSignatureConnection {
edges: [DocumentVersionSignatureEdge!]!
pageInfo: PageInfo!
}
type DocumentVersionSignatureEdge {
cursor: CursorKey!
node: DocumentVersionSignature!
}
input DocumentVersionSignatureOrder {
field: DocumentVersionSignatureOrderField!
direction: OrderDirection!
}
enum DocumentVersionSignatureState
@goModel(
model: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureState"
) {
REQUESTED
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureStateRequested"
)
SIGNED
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureStateSigned"
)
}
enum DocumentVersionSignatureOrderField
@goModel(
model: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureOrderField"
) {
CREATED_AT
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureOrderFieldCreatedAt"
)
SIGNED_AT
@goEnum(
value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureOrderFieldSignedAt"
)
}
type DocumentVersionSignature implements Node {
id: ID!
documentVersion: DocumentVersion! @goField(forceResolver: true)
state: DocumentVersionSignatureState!
signedBy: People! @goField(forceResolver: true)
signedAt: Datetime
requestedAt: Datetime!
requestedBy: People! @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
}
input RequestSignatureInput {
documentVersionId: ID!
signatoryId: ID!
}
type RequestSignaturePayload {
documentVersionSignatureEdge: DocumentVersionSignatureEdge!
}
input PublishDocumentVersionInput {
documentId: ID!
changelog: String
}
type PublishDocumentVersionPayload {
documentVersion: DocumentVersion!
document: Document!
}
type CreateDraftDocumentVersionPayload {
documentVersionEdge: DocumentVersionEdge!
}
input CreateDraftDocumentVersionInput {
documentID: ID!
}
input UpdateDocumentVersionInput {
documentVersionId: ID!
content: String!
}
type UpdateDocumentVersionPayload {
documentVersion: DocumentVersion!
}
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!
}
input GenerateDocumentChangelogInput {
documentId: ID!
}
type GenerateDocumentChangelogPayload {
changelog: String!
}
input AssessVendorInput {
id: ID!
websiteUrl: String!
}
type AssessVendorPayload {
vendor: Vendor!
}
type Asset implements Node {
id: ID!
name: String!
amount: Int!
owner: People! @goField(forceResolver: true)
vendors(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: VendorOrder
): VendorConnection! @goField(forceResolver: true)
criticity: CriticityLevel!
assetType: AssetType! @goField(forceResolver: true)
dataTypesStored: String!
organization: Organization! @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
}
type AssetConnection {
edges: [AssetEdge!]!
pageInfo: PageInfo!
}
type AssetEdge {
cursor: CursorKey!
node: Asset!
}
input AssetOrder {
direction: OrderDirection!
field: AssetOrderField!
}
input CreateAssetInput {
organizationId: ID!
name: String!
amount: Int!
ownerId: ID!
criticity: CriticityLevel! = MEDIUM
assetType: AssetType!
dataTypesStored: String!
vendorIds: [ID!]
}
input UpdateAssetInput {
id: ID!
name: String
amount: Int
ownerId: ID
criticity: CriticityLevel
assetType: AssetType
dataTypesStored: String
vendorIds: [ID!]
}
input DeleteAssetInput {
assetId: ID!
}
input AddAssetVendorInput {
assetId: ID!
vendorId: ID!
}
input RemoveAssetVendorInput {
assetId: ID!
vendorId: ID!
}
type CreateAssetPayload {
assetEdge: AssetEdge!
}
type UpdateAssetPayload {
asset: Asset!
}
type DeleteAssetPayload {
deletedAssetId: ID!
}
type AddAssetVendorPayload {
asset: Asset!
}
type RemoveAssetVendorPayload {
asset: Asset!
}
type Datum implements Node {
id: ID!
name: String!
dataSensitivity: DataSensitivity!
owner: People! @goField(forceResolver: true)
vendors(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: VendorOrder
): VendorConnection! @goField(forceResolver: true)
organization: Organization! @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
}
input DatumOrder {
direction: OrderDirection!
field: DatumOrderField!
}
input CreateDatumInput {
organizationId: ID!
name: String!
dataSensitivity: DataSensitivity!
ownerId: ID!
vendorIds: [ID!]
}
input UpdateDatumInput {
id: ID!
name: String
dataSensitivity: DataSensitivity
ownerId: ID
vendorIds: [ID!]
}
input DeleteDatumInput {
datumId: ID!
}
input AddDatumVendorInput {
datumId: ID!
vendorId: ID!
}
input RemoveDatumVendorInput {
datumId: ID!
vendorId: ID!
}
type CreateDatumPayload {
datumEdge: DatumEdge!
}
type UpdateDatumPayload {
datum: Datum!
}
type DeleteDatumPayload {
deletedDatumId: ID!
}
type AddDatumVendorPayload {
datum: Datum!
}
type RemoveDatumVendorPayload {
datum: Datum!
}