Files
probo/pkg/server/api/console/v1/graphql/access_review_campaign.graphql
2026-07-30 15:43:47 +02:00

682 lines
19 KiB
GraphQL

enum AccessReviewCampaignStatus
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignStatus"
) {
DRAFT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignStatusDraft"
)
IN_PROGRESS
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignStatusInProgress"
)
PENDING_ACTIONS
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignStatusPendingActions"
)
COMPLETED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignStatusCompleted"
)
CANCELLED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignStatusCancelled"
)
}
enum AccessReviewCampaignSourceFetchStatus
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignSourceFetchStatus"
) {
QUEUED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignSourceFetchStatusQueued"
)
FETCHING
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignSourceFetchStatusFetching"
)
SUCCESS
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignSourceFetchStatusSuccess"
)
FAILED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignSourceFetchStatusFailed"
)
}
enum AccessReviewEntryFlag
@goModel(model: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlag") {
NONE
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagNone"
)
ORPHANED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagOrphaned"
)
INACTIVE
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagInactive"
)
EXCESSIVE
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagExcessive"
)
ROLE_MISMATCH
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagRoleMismatch"
)
NEW
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagNew"
)
DORMANT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagDormant"
)
TERMINATED_USER
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagTerminatedUser"
)
CONTRACTOR_EXPIRED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagContractorExpired"
)
SOD_CONFLICT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagSoDConflict"
)
PRIVILEGED_ACCESS
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagPrivilegedAccess"
)
ROLE_CREEP
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagRoleCreep"
)
NO_BUSINESS_JUSTIFICATION
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagNoBusinessJustification"
)
OUT_OF_DEPARTMENT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagOutOfDepartment"
)
SHARED_ACCOUNT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFlagSharedAccount"
)
}
enum AccessReviewEntryDecision
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryDecision"
) {
PENDING
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryDecisionPending"
)
APPROVED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryDecisionApproved"
)
REVOKE
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryDecisionRevoke"
)
DEFER
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryDecisionDefer"
)
ESCALATE
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryDecisionEscalate"
)
}
enum AccessReviewEntryIncrementalTag
@goModel(model: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryIncrementalTag") {
NEW
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryIncrementalTagNew"
)
REMOVED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryIncrementalTagRemoved"
)
UNCHANGED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryIncrementalTagUnchanged"
)
}
enum MfaStatus
@goModel(model: "go.probo.inc/probo/pkg/coredata.MFAStatus") {
ENABLED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.MFAStatusEnabled"
)
DISABLED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.MFAStatusDisabled"
)
UNKNOWN
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.MFAStatusUnknown"
)
}
enum AccessReviewEntryAuthMethod
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAuthMethod"
) {
SSO
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAuthMethodSSO"
)
PASSWORD
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAuthMethodPassword"
)
API_KEY
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAuthMethodAPIKey"
)
SERVICE_ACCOUNT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAuthMethodServiceAccount"
)
UNKNOWN
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAuthMethodUnknown"
)
}
enum AccessReviewEntryAccountType
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAccountType"
) {
USER
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAccountTypeUser"
)
SERVICE_ACCOUNT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryAccountTypeServiceAccount"
)
}
enum AccessReviewSourceOrderField
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewSourceOrderField"
) {
CREATED_AT
}
enum AccessReviewCampaignOrderField
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignOrderField"
) {
CREATED_AT
}
enum AccessReviewEntryOrderField
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryOrderField"
) {
CREATED_AT
}
enum AccessReviewCampaignSourceFetchAttemptOrderField
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignSourceFetchAttemptOrderField"
) {
CREATED_AT
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.AccessReviewCampaignSourceFetchAttemptOrderFieldCreatedAt"
)
}
input AccessReviewCampaignSourceFetchAttemptOrder {
direction: OrderDirection!
field: AccessReviewCampaignSourceFetchAttemptOrderField!
}
enum AccessReviewSourceConnectionStatus {
CONNECTED
DISCONNECTED
RECONNECT_REQUIRED
NOT_APPLICABLE
}
input AccessReviewSourceOrder {
direction: OrderDirection!
field: AccessReviewSourceOrderField!
}
input AccessReviewCampaignOrder {
direction: OrderDirection!
field: AccessReviewCampaignOrderField!
}
input AccessReviewEntryOrder {
direction: OrderDirection!
field: AccessReviewEntryOrderField!
}
input AccessReviewEntryFilter
@goModel(
model: "go.probo.inc/probo/pkg/coredata.AccessReviewEntryFilter"
) {
decision: AccessReviewEntryDecision
flag: AccessReviewEntryFlag
incrementalTag: AccessReviewEntryIncrementalTag
isAdmin: Boolean
active: Boolean
authMethod: AccessReviewEntryAuthMethod
accountType: AccessReviewEntryAccountType
}
type ProviderOrganization {
slug: String!
displayName: String!
}
type AccessReviewSource implements Node {
id: ID!
organization: Organization! @goField(forceResolver: true)
connectorId: ID
connector: Connector @goField(forceResolver: true)
name: String!
csvData: String
providerOrganizations: [ProviderOrganization!]! @goField(forceResolver: true)
needsConfiguration: Boolean! @goField(forceResolver: true)
connectionStatus: AccessReviewSourceConnectionStatus! @goField(forceResolver: true)
selectedOrganization: String @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
permission(action: String!): Boolean! @goField(forceResolver: true)
}
type AccessReviewCampaignSourceFetchAttempt {
id: ID!
attemptNumber: Int!
status: AccessReviewCampaignSourceFetchStatus!
fetchedAccountsCount: Int!
error: String
startedAt: Datetime
completedAt: Datetime
createdAt: Datetime!
updatedAt: Datetime!
}
type AccessReviewCampaignSource implements Node {
id: ID!
campaign: AccessReviewCampaign! @goField(forceResolver: true)
sourceId: ID
"The live access source this snapshot was taken from. Null once the source is deleted."
source: AccessReviewSource @goField(forceResolver: true)
name: String!
fetchAttempts(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: AccessReviewCampaignSourceFetchAttemptOrder
): AccessReviewCampaignSourceFetchAttemptConnection!
@goField(forceResolver: true)
entries(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: AccessReviewEntryOrder
filter: AccessReviewEntryFilter
): AccessReviewEntryConnection! @goField(forceResolver: true)
statistics: AccessReviewStatistics! @goField(forceResolver: true)
}
type AccessReviewCampaign implements Node {
id: ID!
organization: Organization! @goField(forceResolver: true)
name: String!
description: String!
status: AccessReviewCampaignStatus!
startedAt: Datetime
completedAt: Datetime
createdAt: Datetime!
updatedAt: Datetime!
sources: [AccessReviewCampaignSource!]! @goField(forceResolver: true)
entries(
first: Int
after: CursorKey
last: Int
before: CursorKey
orderBy: AccessReviewEntryOrder
filter: AccessReviewEntryFilter
): AccessReviewEntryConnection! @goField(forceResolver: true)
statistics: AccessReviewStatistics! @goField(forceResolver: true)
permission(action: String!): Boolean! @goField(forceResolver: true)
}
type AccessReviewEntry implements Node {
id: ID!
campaign: AccessReviewCampaign! @goField(forceResolver: true)
campaignSource: AccessReviewCampaignSource! @goField(forceResolver: true)
email: String!
fullName: String!
roles: [String!]!
jobTitle: String!
isAdmin: Boolean!
active: Boolean
mfaStatus: MfaStatus!
authMethod: AccessReviewEntryAuthMethod!
accountType: AccessReviewEntryAccountType!
lastLogin: Datetime
accountCreatedAt: Datetime
externalId: String!
incrementalTag: AccessReviewEntryIncrementalTag!
flags: [AccessReviewEntryFlag!]!
flagReasons: [String!]!
decision: AccessReviewEntryDecision!
decisionNote: String
decidedBy: ID
decidedAt: Datetime
decisionHistory: [AccessReviewEntryDecisionHistoryEntry!]!
@goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime!
permission(action: String!): Boolean! @goField(forceResolver: true)
}
type AccessReviewEntryDecisionHistoryEntry {
id: ID!
decision: AccessReviewEntryDecision!
decisionNote: String
decidedBy: ID
decidedAt: Datetime!
createdAt: Datetime!
}
type AccessReviewSourceConnection
@goModel(
model: "go.probo.inc/probo/pkg/server/api/console/v1/types.AccessReviewSourceConnection"
) {
totalCount: Int! @goField(forceResolver: true)
edges: [AccessReviewSourceEdge!]!
pageInfo: PageInfo!
}
type AccessReviewSourceEdge {
cursor: CursorKey!
node: AccessReviewSource!
}
type AccessReviewCampaignConnection
@goModel(
model: "go.probo.inc/probo/pkg/server/api/console/v1/types.AccessReviewCampaignConnection"
) {
totalCount: Int! @goField(forceResolver: true)
edges: [AccessReviewCampaignEdge!]!
pageInfo: PageInfo!
}
type AccessReviewCampaignEdge {
cursor: CursorKey!
node: AccessReviewCampaign!
}
type AccessReviewEntryConnection
@goModel(
model: "go.probo.inc/probo/pkg/server/api/console/v1/types.AccessReviewEntryConnection"
) {
totalCount: Int! @goField(forceResolver: true)
edges: [AccessReviewEntryEdge!]!
pageInfo: PageInfo!
}
type AccessReviewEntryEdge {
cursor: CursorKey!
node: AccessReviewEntry!
}
type AccessReviewCampaignSourceFetchAttemptConnection
@goModel(
model: "go.probo.inc/probo/pkg/server/api/console/v1/types.AccessReviewCampaignSourceFetchAttemptConnection"
) {
totalCount: Int! @goField(forceResolver: true)
edges: [AccessReviewCampaignSourceFetchAttemptEdge!]!
pageInfo: PageInfo!
}
type AccessReviewCampaignSourceFetchAttemptEdge {
cursor: CursorKey!
node: AccessReviewCampaignSourceFetchAttempt!
}
type AccessReviewStatistics {
totalCount: Int!
decisionCounts: [AccessReviewEntryDecisionCount!]!
flagCounts: [AccessReviewEntryFlagCount!]!
incrementalTagCounts: [AccessReviewEntryIncrementalTagCount!]!
}
type AccessReviewEntryDecisionCount {
decision: AccessReviewEntryDecision!
count: Int!
}
type AccessReviewEntryFlagCount {
flag: AccessReviewEntryFlag!
count: Int!
}
type AccessReviewEntryIncrementalTagCount {
incrementalTag: AccessReviewEntryIncrementalTag!
count: Int!
}
extend type Mutation {
createAccessReviewSource(
input: CreateAccessReviewSourceInput!
): CreateAccessReviewSourcePayload!
updateAccessReviewSource(
input: UpdateAccessReviewSourceInput!
): UpdateAccessReviewSourcePayload!
deleteAccessReviewSource(
input: DeleteAccessReviewSourceInput!
): DeleteAccessReviewSourcePayload!
configureAccessReviewSource(
input: ConfigureAccessReviewSourceInput!
): ConfigureAccessReviewSourcePayload!
createAccessReviewCampaign(
input: CreateAccessReviewCampaignInput!
): CreateAccessReviewCampaignPayload!
updateAccessReviewCampaign(
input: UpdateAccessReviewCampaignInput!
): UpdateAccessReviewCampaignPayload!
deleteAccessReviewCampaign(
input: DeleteAccessReviewCampaignInput!
): DeleteAccessReviewCampaignPayload!
startAccessReviewCampaign(
input: StartAccessReviewCampaignInput!
): StartAccessReviewCampaignPayload!
closeAccessReviewCampaign(
input: CloseAccessReviewCampaignInput!
): CloseAccessReviewCampaignPayload!
cancelAccessReviewCampaign(
input: CancelAccessReviewCampaignInput!
): CancelAccessReviewCampaignPayload!
addAccessReviewCampaignSource(
input: AddAccessReviewCampaignSourceInput!
): AddAccessReviewCampaignSourcePayload!
removeAccessReviewCampaignSource(
input: RemoveAccessReviewCampaignSourceInput!
): RemoveAccessReviewCampaignSourcePayload!
recordAccessReviewEntryDecision(
input: RecordAccessReviewEntryDecisionInput!
): RecordAccessReviewEntryDecisionPayload!
recordAccessReviewEntryDecisions(
input: RecordAccessReviewEntryDecisionsInput!
): RecordAccessReviewEntryDecisionsPayload!
flagAccessReviewEntry(
input: FlagAccessReviewEntryInput!
): FlagAccessReviewEntryPayload!
}
input CreateAccessReviewSourceInput {
organizationId: ID!
connectorId: ID
name: String!
csvData: String
}
type CreateAccessReviewSourcePayload {
accessReviewSourceEdge: AccessReviewSourceEdge!
}
input UpdateAccessReviewSourceInput {
accessReviewSourceId: ID!
name: String @goField(omittable: true)
connectorId: ID @goField(omittable: true)
csvData: String @goField(omittable: true)
}
type UpdateAccessReviewSourcePayload {
accessReviewSource: AccessReviewSource!
}
input DeleteAccessReviewSourceInput {
accessReviewSourceId: ID!
}
type DeleteAccessReviewSourcePayload {
deletedAccessReviewSourceId: ID!
}
input ConfigureAccessReviewSourceInput {
accessReviewSourceId: ID!
organizationSlug: String!
}
type ConfigureAccessReviewSourcePayload {
accessReviewSource: AccessReviewSource!
}
input CreateAccessReviewCampaignInput {
organizationId: ID!
name: String!
description: String
accessReviewSourceIds: [ID!]
}
type CreateAccessReviewCampaignPayload {
accessReviewCampaignEdge: AccessReviewCampaignEdge!
}
input UpdateAccessReviewCampaignInput {
accessReviewCampaignId: ID!
name: String @goField(omittable: true)
description: String @goField(omittable: true)
accessReviewSourceIds: [ID!] @goField(omittable: true)
}
type UpdateAccessReviewCampaignPayload {
accessReviewCampaign: AccessReviewCampaign!
}
input DeleteAccessReviewCampaignInput {
accessReviewCampaignId: ID!
}
type DeleteAccessReviewCampaignPayload {
deletedAccessReviewCampaignId: ID!
}
input StartAccessReviewCampaignInput {
accessReviewCampaignId: ID!
}
type StartAccessReviewCampaignPayload {
accessReviewCampaign: AccessReviewCampaign!
}
input CloseAccessReviewCampaignInput {
accessReviewCampaignId: ID!
}
type CloseAccessReviewCampaignPayload {
accessReviewCampaign: AccessReviewCampaign!
}
input CancelAccessReviewCampaignInput {
accessReviewCampaignId: ID!
}
type CancelAccessReviewCampaignPayload {
accessReviewCampaign: AccessReviewCampaign!
}
input AddAccessReviewCampaignSourceInput {
accessReviewCampaignId: ID!
accessReviewSourceId: ID!
}
type AddAccessReviewCampaignSourcePayload {
accessReviewCampaign: AccessReviewCampaign!
}
input RemoveAccessReviewCampaignSourceInput {
accessReviewCampaignId: ID!
accessReviewSourceId: ID!
}
type RemoveAccessReviewCampaignSourcePayload {
accessReviewCampaign: AccessReviewCampaign!
}
input RecordAccessReviewEntryDecisionInput {
accessReviewEntryId: ID!
decision: AccessReviewEntryDecision!
decisionNote: String
}
type RecordAccessReviewEntryDecisionPayload {
accessReviewEntry: AccessReviewEntry!
}
input RecordAccessReviewEntryDecisionsInput {
decisions: [AccessReviewEntryDecisionInput!]!
}
input AccessReviewEntryDecisionInput {
accessReviewEntryId: ID!
decision: AccessReviewEntryDecision!
decisionNote: String
}
type RecordAccessReviewEntryDecisionsPayload {
accessReviewEntries: [AccessReviewEntry!]!
}
input FlagAccessReviewEntryInput {
accessReviewEntryId: ID!
flags: [AccessReviewEntryFlag!]!
flagReasons: [String!]
}
type FlagAccessReviewEntryPayload {
accessReviewEntry: AccessReviewEntry!
}