type Query { # Returns REQUIRE_SETUP if config is missing. systemStatus: SystemStatus! # Fetch a document by its slug path. document(slug: String!): Document # List documents under an optional path prefix. documents(prefix: String): [DocumentMeta!]! # Commit history for a document. history(slug: String!): [CommitEntry!]! # Unified diff between two commits for a document. diff(slug: String!, fromHash: String!, toHash: String!): String! # Raw content of a document at a specific commit. documentAtCommit(slug: String!, hash: String!): String! } type Mutation { # First-run setup. setup(input: SetupInput!): Boolean! # Test an LDAP configuration before saving. testLdapConnection(input: LDAPInput!): LDAPTestResult! # Authenticate and receive a bearer token. login(username: String!, password: String!): String! # Invalidate the current session. logout: Boolean! # Save (create or update) a document. saveDocument(input: SaveDocumentInput!): Document! # Delete a document. deleteDocument(slug: String!): Boolean! } # ── Types ────────────────────────────────────────────────────────────────────── enum SystemStatus { OK REQUIRE_SETUP } type Document { slug: String! content: String! meta: DocumentMeta! } type DocumentMeta { slug: String! title: String! updatedAt: String! } type LDAPTestResult { success: Boolean! message: String! } type CommitEntry { hash: String! author: String! email: String! date: String! subject: String! } # ── Inputs ───────────────────────────────────────────────────────────────────── input SetupInput { storagePath: String! adminUser: String! adminPass: String! ldap: LDAPInput jwtSecret: String! } input LDAPInput { host: String! port: Int! baseDN: String! bindDN: String! bindPassword: String! } input SaveDocumentInput { slug: String! content: String! commitMessage: String! }