Add per-context fields so the frontend can read scopes from the type that owns each connection: - ConnectorProviderInfo.oauth2Scopes: access review providers - AccessSource.oauth2Scopes: access review reconnect flow - Organization.slackOAuth2Scopes (console): compliance page Slack - Organization.googleWorkspaceOAuth2Scopes (connect): SCIM bridge Resolvers delegate to the constants declared in each owning Go module. The Google Workspace field lives on Organization, not on SCIMConfiguration, so the Connect button can read it before any SCIM configuration exists. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
1041 lines
24 KiB
GraphQL
1041 lines
24 KiB
GraphQL
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
|
|
|
|
scalar CursorKey
|
|
scalar Datetime
|
|
scalar Upload
|
|
scalar EmailAddr
|
|
|
|
enum OrderDirection
|
|
@goModel(model: "go.probo.inc/probo/pkg/page.OrderDirection") {
|
|
ASC @goEnum(value: "go.probo.inc/probo/pkg/page.OrderDirectionAsc")
|
|
DESC @goEnum(value: "go.probo.inc/probo/pkg/page.OrderDirectionDesc")
|
|
}
|
|
|
|
enum SessionOrderField
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.SessionOrderField") {
|
|
CREATED_AT
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.SessionOrderFieldCreatedAt")
|
|
EXPIRED_AT
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.SessionOrderFieldExpiredAt")
|
|
UPDATED_AT
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.SessionOrderFieldUpdatedAt")
|
|
}
|
|
|
|
input SessionOrder {
|
|
direction: OrderDirection!
|
|
field: SessionOrderField!
|
|
}
|
|
|
|
interface Node {
|
|
id: ID!
|
|
}
|
|
|
|
type OIDCProviderInfo {
|
|
name: String!
|
|
loginURL: String!
|
|
}
|
|
|
|
type Query {
|
|
node(id: ID!): Node @session(required: PRESENT)
|
|
viewer: Identity @session(required: PRESENT)
|
|
ssoLoginURL(email: EmailAddr!): String
|
|
@goField(forceResolver: true)
|
|
@session(required: OPTIONAL)
|
|
oidcProviders: [OIDCProviderInfo!]!
|
|
@goField(forceResolver: true)
|
|
@session(required: OPTIONAL)
|
|
}
|
|
|
|
type Mutation {
|
|
signIn(input: SignInInput!): SignInPayload @session(required: OPTIONAL)
|
|
signUp(input: SignUpInput!): SignUpPayload @session(required: NONE)
|
|
signOut: SignOutPayload @session(required: PRESENT)
|
|
activateAccount(
|
|
input: ActivateAccountInput!
|
|
): ActivateAccountPayload @session(required: OPTIONAL)
|
|
forgotPassword(input: ForgotPasswordInput!): ForgotPasswordPayload
|
|
@session(required: NONE)
|
|
resetPassword(input: ResetPasswordInput!): ResetPasswordPayload
|
|
@session(required: NONE)
|
|
verifyEmail(input: VerifyEmailInput!): VerifyEmailPayload
|
|
@session(required: OPTIONAL)
|
|
changePassword(input: ChangePasswordInput!): ChangePasswordPayload
|
|
@session(required: PRESENT)
|
|
changeEmail(input: ChangeEmailInput!): ChangeEmailPayload
|
|
@session(required: PRESENT)
|
|
assumeOrganizationSession(
|
|
input: AssumeOrganizationSessionInput!
|
|
): AssumeOrganizationSessionPayload @session(required: PRESENT)
|
|
|
|
revokeSession(input: RevokeSessionInput!): RevokeSessionPayload!
|
|
@session(required: PRESENT)
|
|
revokeAllSessions: RevokeAllSessionsPayload @session(required: PRESENT)
|
|
|
|
createPersonalAPIKey(
|
|
input: CreatePersonalAPIKeyInput!
|
|
): CreatePersonalAPIKeyPayload @session(required: PRESENT)
|
|
revokePersonalAPIKey(
|
|
input: RevokePersonalAPIKeyInput!
|
|
): RevokePersonalAPIKeyPayload @session(required: PRESENT)
|
|
|
|
createOrganization(
|
|
input: CreateOrganizationInput!
|
|
): CreateOrganizationPayload @session(required: PRESENT)
|
|
updateOrganization(
|
|
input: UpdateOrganizationInput!
|
|
): UpdateOrganizationPayload @session(required: PRESENT)
|
|
deleteOrganization(
|
|
input: DeleteOrganizationInput!
|
|
): DeleteOrganizationPayload @session(required: PRESENT)
|
|
deleteOrganizationHorizontalLogo(
|
|
input: DeleteOrganizationHorizontalLogoInput!
|
|
): DeleteOrganizationHorizontalLogoPayload @session(required: PRESENT)
|
|
|
|
createUser(input: CreateUserInput!): CreateUserPayload
|
|
@session(required: PRESENT)
|
|
inviteUser(input: InviteUserInput!): InviteUserPayload
|
|
@session(required: PRESENT)
|
|
deactivateUser(input: DeactivateUserInput!): DeactivateUserPayload
|
|
updateUser(input: UpdateUserInput!): UpdateUserPayload!
|
|
updateMembership(input: UpdateMembershipInput!): UpdateMembershipPayload!
|
|
removeUser(input: RemoveUserInput!): RemoveUserPayload
|
|
@session(required: PRESENT)
|
|
|
|
createSAMLConfiguration(
|
|
input: CreateSAMLConfigurationInput!
|
|
): CreateSAMLConfigurationPayload @session(required: PRESENT)
|
|
updateSAMLConfiguration(
|
|
input: UpdateSAMLConfigurationInput!
|
|
): UpdateSAMLConfigurationPayload @session(required: PRESENT)
|
|
deleteSAMLConfiguration(
|
|
input: DeleteSAMLConfigurationInput!
|
|
): DeleteSAMLConfigurationPayload @session(required: PRESENT)
|
|
|
|
createSCIMConfiguration(
|
|
input: CreateSCIMConfigurationInput!
|
|
): CreateSCIMConfigurationPayload @session(required: PRESENT)
|
|
deleteSCIMConfiguration(
|
|
input: DeleteSCIMConfigurationInput!
|
|
): DeleteSCIMConfigurationPayload @session(required: PRESENT)
|
|
regenerateSCIMToken(
|
|
input: RegenerateSCIMTokenInput!
|
|
): RegenerateSCIMTokenPayload @session(required: PRESENT)
|
|
updateSCIMBridge(
|
|
input: UpdateSCIMBridgeInput!
|
|
): UpdateSCIMBridgePayload @session(required: PRESENT)
|
|
}
|
|
|
|
type Identity implements Node {
|
|
id: ID!
|
|
email: EmailAddr!
|
|
fullName: String!
|
|
emailVerified: Boolean!
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
|
|
profiles(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
orderBy: ProfileOrder
|
|
filter: ProfileFilter
|
|
): ProfileConnection @goField(forceResolver: true)
|
|
|
|
sessions(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
orderBy: SessionOrder
|
|
): SessionConnection @goField(forceResolver: true)
|
|
|
|
personalAPIKeys(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
): PersonalAPIKeyConnection @goField(forceResolver: true)
|
|
|
|
ssoLoginURL: String
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type Profile implements Node {
|
|
id: ID!
|
|
fullName: String!
|
|
emailAddress: EmailAddr!
|
|
source: String!
|
|
state: ProfileState!
|
|
additionalEmailAddresses: [EmailAddr!]!
|
|
kind: String
|
|
position: String
|
|
contractStartDate: Datetime
|
|
contractEndDate: Datetime
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
|
|
identity: Identity @goField(forceResolver: true)
|
|
organization: Organization @goField(forceResolver: true)
|
|
membership: Membership @goField(forceResolver: true)
|
|
pendingInvitations(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
orderBy: InvitationOrder
|
|
): InvitationConnection @goField(forceResolver: true)
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
enum ProfileState
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.ProfileState") {
|
|
ACTIVE @goEnum(value: "go.probo.inc/probo/pkg/coredata.ProfileStateActive")
|
|
INACTIVE
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.ProfileStateInactive")
|
|
}
|
|
|
|
enum ProfileSource
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.ProfileSource") {
|
|
MANUAL
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.ProfileSourceManual")
|
|
SAML @goEnum(value: "go.probo.inc/probo/pkg/coredata.ProfileSourceSAML")
|
|
SCIM @goEnum(value: "go.probo.inc/probo/pkg/coredata.ProfileSourceSCIM")
|
|
}
|
|
|
|
type Organization implements Node {
|
|
id: ID!
|
|
name: String!
|
|
logoUrl: String @goField(forceResolver: true)
|
|
horizontalLogoUrl: String @goField(forceResolver: true)
|
|
email: String
|
|
description: String
|
|
websiteUrl: String
|
|
headquarterAddress: String
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
|
|
profiles(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
orderBy: ProfileOrder
|
|
): ProfileConnection @goField(forceResolver: true)
|
|
|
|
samlConfigurations(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
): SAMLConfigurationConnection @goField(forceResolver: true)
|
|
|
|
scimConfiguration: SCIMConfiguration @goField(forceResolver: true)
|
|
googleWorkspaceOAuth2Scopes: [String!]! @goField(forceResolver: true)
|
|
|
|
auditLogEntries(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
orderBy: AuditLogEntryOrder
|
|
filter: AuditLogEntryFilter
|
|
): AuditLogEntryConnection! @goField(forceResolver: true)
|
|
|
|
viewer: Profile @goField(forceResolver: true)
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
enum MembershipRole
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.MembershipRole") {
|
|
OWNER @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleOwner")
|
|
ADMIN @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleAdmin")
|
|
EMPLOYEE
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleEmployee")
|
|
VIEWER @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleViewer")
|
|
AUDITOR
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleAuditor")
|
|
}
|
|
|
|
type Membership implements Node {
|
|
id: ID!
|
|
createdAt: Datetime!
|
|
role: MembershipRole!
|
|
|
|
lastSession: Session @goField(forceResolver: true)
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type Invitation implements Node {
|
|
id: ID!
|
|
expiresAt: Datetime!
|
|
acceptedAt: Datetime
|
|
createdAt: Datetime!
|
|
status: InvitationStatus!
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type Session implements Node {
|
|
id: ID!
|
|
identity: Identity @goField(forceResolver: true)
|
|
ipAddress: String!
|
|
userAgent: String!
|
|
updatedAt: Datetime!
|
|
createdAt: Datetime!
|
|
expiresAt: Datetime!
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type PersonalAPIKey implements Node {
|
|
id: ID!
|
|
name: String!
|
|
expiresAt: Datetime!
|
|
lastUsedAt: Datetime
|
|
createdAt: Datetime!
|
|
|
|
token: String @goField(forceResolver: true)
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type SAMLConfiguration implements Node {
|
|
id: ID!
|
|
emailDomain: String!
|
|
enforcementPolicy: SAMLEnforcementPolicy!
|
|
domainVerifiedAt: Datetime
|
|
domainVerificationToken: String
|
|
idpEntityId: String!
|
|
idpSsoUrl: String!
|
|
idpCertificate: String!
|
|
autoSignupEnabled: Boolean!
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
testLoginUrl: String! @goField(forceResolver: true)
|
|
attributeMappings: SAMLAttributeMappings!
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type SAMLAttributeMappings {
|
|
email: String!
|
|
firstName: String!
|
|
lastName: String!
|
|
role: String!
|
|
}
|
|
|
|
type SCIMConfiguration implements Node {
|
|
id: ID!
|
|
endpointUrl: String! @goField(forceResolver: true)
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
organization: Organization @goField(forceResolver: true)
|
|
|
|
bridge: SCIMBridge @goField(forceResolver: true)
|
|
|
|
events(
|
|
first: Int
|
|
after: CursorKey
|
|
last: Int
|
|
before: CursorKey
|
|
orderBy: SCIMEventOrder
|
|
): SCIMEventConnection @goField(forceResolver: true)
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type SCIMBridge implements Node {
|
|
id: ID!
|
|
state: SCIMBridgeState!
|
|
scimConfiguration: SCIMConfiguration @goField(forceResolver: true)
|
|
connector: Connector @goField(forceResolver: true)
|
|
type: SCIMBridgeType!
|
|
excludedUserNames: [String!]!
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type Connector implements Node {
|
|
id: ID!
|
|
provider: ConnectorProvider!
|
|
createdAt: Datetime!
|
|
updatedAt: Datetime!
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
enum ConnectorProvider
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.ConnectorProvider") {
|
|
SLACK @goEnum(value: "go.probo.inc/probo/pkg/coredata.ConnectorProviderSlack")
|
|
GOOGLE_WORKSPACE
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.ConnectorProviderGoogleWorkspace")
|
|
BREX @goEnum(value: "go.probo.inc/probo/pkg/coredata.ConnectorProviderBrex")
|
|
TALLY @goEnum(value: "go.probo.inc/probo/pkg/coredata.ConnectorProviderTally")
|
|
CLOUDFLARE
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.ConnectorProviderCloudflare")
|
|
}
|
|
|
|
enum SCIMBridgeType
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.SCIMBridgeType") {
|
|
GOOGLE_WORKSPACE @goEnum(value: "go.probo.inc/probo/pkg/coredata.SCIMBridgeTypeGoogleWorkspace")
|
|
}
|
|
|
|
enum SCIMBridgeState
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.SCIMBridgeState") {
|
|
PENDING @goEnum(value: "go.probo.inc/probo/pkg/coredata.SCIMBridgeStatePending")
|
|
ACTIVE @goEnum(value: "go.probo.inc/probo/pkg/coredata.SCIMBridgeStateActive")
|
|
FAILED @goEnum(value: "go.probo.inc/probo/pkg/coredata.SCIMBridgeStateFailed")
|
|
}
|
|
|
|
type SCIMEvent implements Node {
|
|
id: ID!
|
|
method: String!
|
|
path: String!
|
|
statusCode: Int!
|
|
requestBody: String
|
|
responseBody: String
|
|
errorMessage: String
|
|
userName: String!
|
|
ipAddress: String!
|
|
createdAt: Datetime!
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
enum InvitationStatus
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.InvitationStatus") {
|
|
PENDING
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.InvitationStatusPending")
|
|
ACCEPTED
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.InvitationStatusAccepted")
|
|
EXPIRED
|
|
@goEnum(value: "go.probo.inc/probo/pkg/coredata.InvitationStatusExpired")
|
|
}
|
|
|
|
enum SAMLEnforcementPolicy
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.SAMLEnforcementPolicy") {
|
|
OFF @goEnum(value: "go.probo.inc/probo/pkg/coredata.SAMLEnforcementPolicyOff")
|
|
OPTIONAL
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.SAMLEnforcementPolicyOptional"
|
|
)
|
|
REQUIRED
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.SAMLEnforcementPolicyRequired"
|
|
)
|
|
}
|
|
|
|
enum ReauthenticationReason {
|
|
SESSION_EXPIRED
|
|
SENSITIVE_ACTION
|
|
POLICY_REQUIREMENT
|
|
}
|
|
|
|
enum InvitationOrderField
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.InvitationOrderField") {
|
|
CREATED_AT
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.InvitationOrderFieldCreatedAt"
|
|
)
|
|
}
|
|
|
|
input InvitationOrder
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.InvitationOrderBy"
|
|
) {
|
|
direction: OrderDirection!
|
|
field: InvitationOrderField!
|
|
}
|
|
|
|
type InvitationConnection
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.InvitationConnection"
|
|
) {
|
|
edges: [InvitationEdge!]!
|
|
pageInfo: PageInfo!
|
|
}
|
|
|
|
type InvitationEdge {
|
|
node: Invitation!
|
|
cursor: CursorKey!
|
|
}
|
|
|
|
enum ProfileOrderField
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.MembershipProfileOrderField") {
|
|
FULL_NAME
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.MembershipProfileOrderFieldFullName"
|
|
)
|
|
CREATED_AT
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.MembershipProfileOrderFieldCreatedAt"
|
|
)
|
|
KIND @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipProfileOrderFieldKind")
|
|
ORGANIZATION_NAME
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.MembershipProfileOrderFieldOrganizationName"
|
|
)
|
|
STATE
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.MembershipProfileOrderFieldState"
|
|
)
|
|
}
|
|
|
|
input ProfileFilter {
|
|
excludeContractEnded: Boolean
|
|
state: ProfileState
|
|
}
|
|
|
|
input ProfileOrder
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.ProfileOrderBy"
|
|
) {
|
|
direction: OrderDirection!
|
|
field: ProfileOrderField!
|
|
}
|
|
|
|
type ProfileConnection
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.ProfileConnection"
|
|
) {
|
|
totalCount: Int @goField(forceResolver: true)
|
|
edges: [ProfileEdge!]!
|
|
pageInfo: PageInfo!
|
|
}
|
|
|
|
type ProfileEdge {
|
|
cursor: CursorKey!
|
|
node: Profile!
|
|
}
|
|
|
|
type SessionConnection
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.SessionConnection"
|
|
) {
|
|
edges: [SessionEdge!]!
|
|
pageInfo: PageInfo!
|
|
totalCount: Int @goField(forceResolver: true)
|
|
}
|
|
|
|
type SessionEdge {
|
|
node: Session!
|
|
cursor: CursorKey!
|
|
}
|
|
|
|
type PersonalAPIKeyConnection
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.PersonalAPIKeyConnection"
|
|
) {
|
|
edges: [PersonalAPIKeyEdge!]!
|
|
pageInfo: PageInfo!
|
|
totalCount: Int @goField(forceResolver: true)
|
|
}
|
|
|
|
type PersonalAPIKeyEdge {
|
|
node: PersonalAPIKey!
|
|
cursor: CursorKey!
|
|
}
|
|
|
|
type SAMLConfigurationConnection
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.SAMLConfigurationConnection"
|
|
) {
|
|
edges: [SAMLConfigurationEdge!]!
|
|
pageInfo: PageInfo!
|
|
totalCount: Int @goField(forceResolver: true)
|
|
}
|
|
|
|
type SAMLConfigurationEdge {
|
|
node: SAMLConfiguration!
|
|
cursor: CursorKey!
|
|
}
|
|
|
|
enum SCIMEventOrderField
|
|
@goModel(model: "go.probo.inc/probo/pkg/coredata.SCIMEventOrderField") {
|
|
CREATED_AT
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.SCIMEventOrderFieldCreatedAt"
|
|
)
|
|
}
|
|
|
|
input SCIMEventOrder
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.SCIMEventOrderBy"
|
|
) {
|
|
direction: OrderDirection!
|
|
field: SCIMEventOrderField!
|
|
}
|
|
|
|
type SCIMEventConnection
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.SCIMEventConnection"
|
|
) {
|
|
edges: [SCIMEventEdge!]!
|
|
pageInfo: PageInfo!
|
|
totalCount: Int @goField(forceResolver: true)
|
|
}
|
|
|
|
type SCIMEventEdge {
|
|
node: SCIMEvent!
|
|
cursor: CursorKey!
|
|
}
|
|
|
|
enum AuditLogActorType
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/coredata.AuditLogActorType"
|
|
) {
|
|
USER
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.AuditLogActorTypeUser"
|
|
)
|
|
API_KEY
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.AuditLogActorTypeAPIKey"
|
|
)
|
|
SYSTEM
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.AuditLogActorTypeSystem"
|
|
)
|
|
}
|
|
|
|
enum AuditLogEntryOrderField
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/coredata.AuditLogEntryOrderField"
|
|
) {
|
|
CREATED_AT
|
|
@goEnum(
|
|
value: "go.probo.inc/probo/pkg/coredata.AuditLogEntryOrderFieldCreatedAt"
|
|
)
|
|
}
|
|
|
|
input AuditLogEntryOrder
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.AuditLogEntryOrderBy"
|
|
) {
|
|
field: AuditLogEntryOrderField!
|
|
direction: OrderDirection!
|
|
}
|
|
|
|
input AuditLogEntryFilter {
|
|
action: String
|
|
actorId: ID
|
|
resourceType: String
|
|
resourceId: ID
|
|
}
|
|
|
|
type AuditLogEntry implements Node {
|
|
id: ID!
|
|
organization: Organization @goField(forceResolver: true)
|
|
actorId: ID!
|
|
actorType: AuditLogActorType!
|
|
action: String!
|
|
resourceType: String!
|
|
resourceId: ID!
|
|
metadata: String
|
|
createdAt: Datetime!
|
|
|
|
permission(action: String!): Boolean!
|
|
@goField(forceResolver: true)
|
|
@session(required: PRESENT)
|
|
}
|
|
|
|
type AuditLogEntryConnection
|
|
@goModel(
|
|
model: "go.probo.inc/probo/pkg/server/api/connect/v1/types.AuditLogEntryConnection"
|
|
) {
|
|
edges: [AuditLogEntryEdge!]!
|
|
pageInfo: PageInfo!
|
|
totalCount: Int! @goField(forceResolver: true)
|
|
}
|
|
|
|
type AuditLogEntryEdge {
|
|
cursor: CursorKey!
|
|
node: AuditLogEntry!
|
|
}
|
|
|
|
type PageInfo {
|
|
hasNextPage: Boolean!
|
|
hasPreviousPage: Boolean!
|
|
startCursor: CursorKey
|
|
endCursor: CursorKey
|
|
}
|
|
|
|
input SignInInput {
|
|
# When assuming an org with a password auth method
|
|
organizationId: ID
|
|
email: EmailAddr!
|
|
password: String!
|
|
}
|
|
|
|
input SignUpInput {
|
|
email: EmailAddr!
|
|
password: String!
|
|
fullName: String!
|
|
}
|
|
|
|
input ActivateAccountInput {
|
|
token: String!
|
|
}
|
|
|
|
input ForgotPasswordInput {
|
|
email: EmailAddr!
|
|
}
|
|
|
|
input ResetPasswordInput {
|
|
token: String!
|
|
password: String!
|
|
}
|
|
|
|
input VerifyEmailInput {
|
|
token: String!
|
|
}
|
|
|
|
input ChangePasswordInput {
|
|
currentPassword: String!
|
|
newPassword: String!
|
|
}
|
|
|
|
input ChangeEmailInput {
|
|
newEmail: EmailAddr!
|
|
password: String!
|
|
}
|
|
|
|
input AssumeOrganizationSessionInput {
|
|
organizationId: ID!
|
|
continue: String!
|
|
}
|
|
|
|
input RevokeSessionInput {
|
|
sessionId: ID!
|
|
}
|
|
|
|
input CreatePersonalAPIKeyInput {
|
|
name: String!
|
|
expiresAt: Datetime!
|
|
}
|
|
|
|
input RevokePersonalAPIKeyInput {
|
|
personalAPIKeyId: ID!
|
|
}
|
|
|
|
input CreateOrganizationInput {
|
|
name: String!
|
|
logoFile: Upload
|
|
horizontalLogoFile: Upload
|
|
}
|
|
|
|
input UpdateOrganizationInput {
|
|
organizationId: ID!
|
|
name: String
|
|
logoFile: Upload
|
|
horizontalLogoFile: Upload
|
|
description: String @goField(omittable: true)
|
|
websiteUrl: String @goField(omittable: true)
|
|
email: String @goField(omittable: true)
|
|
headquarterAddress: String @goField(omittable: true)
|
|
}
|
|
|
|
input DeleteOrganizationInput {
|
|
organizationId: ID!
|
|
}
|
|
|
|
input DeleteOrganizationHorizontalLogoInput {
|
|
organizationId: ID!
|
|
}
|
|
|
|
input CreateUserInput {
|
|
organizationId: ID!
|
|
fullName: String!
|
|
emailAddress: EmailAddr!
|
|
role: MembershipRole!
|
|
additionalEmailAddresses: [EmailAddr!]
|
|
kind: String
|
|
position: String
|
|
contractStartDate: Datetime @goField(omittable: true)
|
|
contractEndDate: Datetime @goField(omittable: true)
|
|
}
|
|
|
|
input InviteUserInput {
|
|
organizationId: ID!
|
|
profileId: ID!
|
|
}
|
|
|
|
input ActivateUserInput {
|
|
organizationId: ID!
|
|
profileId: ID!
|
|
}
|
|
|
|
input DeactivateUserInput {
|
|
organizationId: ID!
|
|
profileId: ID!
|
|
}
|
|
|
|
input UpdateUserInput {
|
|
id: ID!
|
|
fullName: String!
|
|
additionalEmailAddresses: [EmailAddr!]
|
|
kind: String
|
|
position: String
|
|
contractStartDate: Datetime @goField(omittable: true)
|
|
contractEndDate: Datetime @goField(omittable: true)
|
|
}
|
|
|
|
input UpdateMembershipInput {
|
|
organizationId: ID!
|
|
membershipId: ID!
|
|
role: MembershipRole!
|
|
}
|
|
|
|
input RemoveUserInput {
|
|
organizationId: ID!
|
|
profileId: ID!
|
|
}
|
|
|
|
input CreateSAMLConfigurationInput {
|
|
organizationId: ID!
|
|
emailDomain: String!
|
|
idpEntityId: String!
|
|
idpSsoUrl: String!
|
|
idpCertificate: String!
|
|
autoSignupEnabled: Boolean!
|
|
attributeMappings: SAMLAttributeMappingsInput
|
|
}
|
|
|
|
input SAMLAttributeMappingsInput {
|
|
email: String
|
|
firstName: String
|
|
lastName: String
|
|
role: String
|
|
}
|
|
|
|
input UpdateSAMLConfigurationInput {
|
|
organizationId: ID!
|
|
samlConfigurationId: ID!
|
|
idpEntityId: String
|
|
idpSsoUrl: String
|
|
idpCertificate: String
|
|
autoSignupEnabled: Boolean
|
|
enforcementPolicy: SAMLEnforcementPolicy!
|
|
attributeMappings: SAMLAttributeMappingsInput
|
|
}
|
|
|
|
input DeleteSAMLConfigurationInput {
|
|
organizationId: ID!
|
|
samlConfigurationId: ID!
|
|
}
|
|
|
|
type SignInPayload {
|
|
identity: Identity
|
|
session: Session
|
|
}
|
|
|
|
type SignUpPayload {
|
|
identity: Identity
|
|
}
|
|
|
|
type SignOutPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type ActivateAccountPayload {
|
|
createPasswordToken: String
|
|
ssoLoginUrl: String
|
|
profile: Profile
|
|
}
|
|
|
|
type ForgotPasswordPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type ResetPasswordPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type VerifyEmailPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type ChangePasswordPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type ChangeEmailPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
union AssumeOrganizationSessionResult =
|
|
| OrganizationSessionCreated
|
|
| PasswordRequired
|
|
| SAMLAuthenticationRequired
|
|
|
|
type OrganizationSessionCreated {
|
|
session: Session!
|
|
membership: Membership!
|
|
}
|
|
|
|
type PasswordRequired {
|
|
reason: ReauthenticationReason!
|
|
}
|
|
|
|
type SAMLAuthenticationRequired {
|
|
reason: ReauthenticationReason!
|
|
}
|
|
|
|
type AssumeOrganizationSessionPayload {
|
|
result: AssumeOrganizationSessionResult!
|
|
}
|
|
|
|
type RevokeSessionPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type RevokeAllSessionsPayload {
|
|
revokedCount: Int!
|
|
}
|
|
|
|
type CreatePersonalAPIKeyPayload {
|
|
personalAPIKeyEdge: PersonalAPIKeyEdge!
|
|
token: String!
|
|
}
|
|
|
|
type RevokePersonalAPIKeyPayload {
|
|
personalAPIKeyId: ID!
|
|
}
|
|
|
|
type CreateOrganizationPayload {
|
|
organization: Organization
|
|
profile: Profile!
|
|
}
|
|
|
|
type UpdateOrganizationPayload {
|
|
organization: Organization
|
|
}
|
|
|
|
type DeleteOrganizationPayload {
|
|
deletedOrganizationId: ID!
|
|
}
|
|
|
|
type DeleteOrganizationHorizontalLogoPayload {
|
|
organization: Organization!
|
|
}
|
|
|
|
type CreateUserPayload {
|
|
profileEdge: ProfileEdge!
|
|
}
|
|
|
|
type InviteUserPayload {
|
|
invitationEdge: InvitationEdge!
|
|
}
|
|
|
|
type DeactivateUserPayload {
|
|
success: Boolean!
|
|
}
|
|
|
|
type UpdateUserPayload {
|
|
profile: Profile!
|
|
}
|
|
|
|
type UpdateMembershipPayload {
|
|
membership: Membership!
|
|
}
|
|
|
|
type RemoveUserPayload {
|
|
deletedProfileId: ID!
|
|
}
|
|
|
|
type CreateSAMLConfigurationPayload {
|
|
samlConfigurationEdge: SAMLConfigurationEdge!
|
|
}
|
|
|
|
type UpdateSAMLConfigurationPayload {
|
|
samlConfiguration: SAMLConfiguration
|
|
}
|
|
|
|
type DeleteSAMLConfigurationPayload {
|
|
deletedSamlConfigurationId: ID!
|
|
}
|
|
|
|
input CreateSCIMConfigurationInput {
|
|
organizationId: ID!
|
|
connectorId: ID
|
|
}
|
|
|
|
input DeleteSCIMConfigurationInput {
|
|
organizationId: ID!
|
|
scimConfigurationId: ID!
|
|
}
|
|
|
|
input RegenerateSCIMTokenInput {
|
|
organizationId: ID!
|
|
scimConfigurationId: ID!
|
|
}
|
|
|
|
input UpdateSCIMBridgeInput {
|
|
organizationId: ID!
|
|
scimBridgeId: ID!
|
|
excludedUserNames: [String!]!
|
|
}
|
|
|
|
type CreateSCIMConfigurationPayload {
|
|
scimConfiguration: SCIMConfiguration!
|
|
scimBridge: SCIMBridge
|
|
token: String!
|
|
}
|
|
|
|
type DeleteSCIMConfigurationPayload {
|
|
deletedScimConfigurationId: ID!
|
|
}
|
|
|
|
type RegenerateSCIMTokenPayload {
|
|
scimConfiguration: SCIMConfiguration!
|
|
token: String!
|
|
}
|
|
|
|
type UpdateSCIMBridgePayload {
|
|
scimBridge: SCIMBridge!
|
|
}
|