The server exposes an async-graphql Federation v2 subgraph with resource CRUD, folder organization, and assessment bundle management.
| Query | Arguments | Returns | Purpose |
|---|
resource | id: ID! | Resource | Fetch single resource with snapshot |
resources | ids: [ID!]! | [Resource!]! | Fetch multiple resources |
resourceConnection | pagination args | ResourceConnection! | Paginated resource list |
resourceSnapshot | id: ID! | Bytes | Raw snapshot bytes only |
forksOf | id: ID! | [Resource!]! | List forks of a resource |
sharePermissions | id: ID! | ResourceSharePermissions | Get sharing permissions |
| Query | Arguments | Returns | Purpose |
|---|
folder | id: ID! | Folder | Fetch single folder |
rootFolders | — | [Folder!]! | List top-level folders |
subfolders | folderId: ID! | [Folder!]! | List child folders |
| Query | Arguments | Returns | Purpose |
|---|
assessmentBundle | networkIndex, curriculumIndex | AssessmentBundle | Fetch bundle data |
assessmentBundles | — | [AssessmentBundleSummary!]! | List all bundles (metadata only) |
assessmentBundleVersion | networkIndex, curriculumIndex | Int | Check bundle version |
The server implements the _entities resolver for Resource, enabling federation with other subgraphs.
| Mutation | Arguments | Purpose |
|---|
createResource | input: CreateResourceInput! | Create new resource |
pushUpdate | id, snapshot | Push snapshot bytes |
forkResource | id | Fork a resource |
deleteResource | id | Delete single resource |
deleteResources | ids | Batch delete |
duplicateResources | ids | Batch duplicate |
toggleVisibility | id | Toggle public/private |
toggleReplicability | id | Toggle fork permission |
shareResource | id, userId, permission | Share with user |
| Mutation | Arguments | Purpose |
|---|
createFolder | input: CreateFolderInput! | Create folder |
renameFolder | id, name | Rename folder |
deleteFolder | id, keepChildren? | Delete folder (optionally reparent children) |
moveFolder | id, targetFolderId | Move folder (with cycle detection) |
moveFolderToParent | id | Move folder up one level |
moveFolderToRoot | id | Move folder to root |
moveResourceToFolder | resourceId, folderId | Move resource into folder |
moveResourcesToFolder | resourceIds, folderId | Batch move |
moveResourceToParent | resourceId | Move resource up one level |
moveResourceToRoot | resourceId | Move resource to root |
| Mutation | Arguments | Purpose |
|---|
refreshAssessmentBundle | networkIndex, curriculumIndex | Refresh via gRPC from diagnostics service |
seedAssessmentBundle | networkIndex, curriculumIndex, data | Manual JSON seed |
deleteAssessmentBundle | networkIndex, curriculumIndex | Delete bundle |
type Resource @key(fields: "id") {
path: [Folder!]! # recursive ancestors
Resource listing uses cursor-based keyset pagination:
type ResourceConnection {
input ResourceFilterInput {
| Sort | Description |
|---|
CREATED_AT_ASC / CREATED_AT_DESC | By creation time |
UPDATED_AT_ASC / UPDATED_AT_DESC | By last update |
NAME_ASC / NAME_DESC | Alphabetical |
LAST_VIEWED_ASC / LAST_VIEWED_DESC | By last viewed |
MODALITY_ASC / MODALITY_DESC | By modality type |
Cursors encode a CursorPayload with the sort field value and ID for stable keyset pagination. The server fetches N+1 rows to determine hasNextPage.
- Auth — permission guards on resolvers
- Resources — resource repository layer
- Folders — folder repository layer
- Overview — server architecture