Add go-vcr dependency, dev config for new providers, connector service changes for access review, connect schema updates, and unit tests for enum Scan/Value. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
1040 lines
24 KiB
GraphQL
1040 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)
|
|
|
|
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!
|
|
}
|