# Knowledge graph index

_Generated by `kg.mjs index` — do not edit. Start with [README](README.md)._

61 nodes.

## entity (9)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [job](nodes/job.md) | One XPRT composition request (models/Job) — in-memory object linking the caller's ids (pdf name, abbiJobId/AD jobId) to a Typefi job, its last status, responder, locks and the cached PDF upload result. | 23 | 4 | core, jobs |
| [item-input-form](nodes/item-input-form.md) | The multipart submit payload (models/ItemInputForm + ItemFormEnum keys) — the content zip plus metadata that selects a workflow (project/subject/grade or account/bank), the PDF destination and the JWT. | 14 | 2 | payload, input |
| [typefi-workflow](nodes/typefi-workflow.md) | A Typefi workflow definition (.typefi_workflow JSON) downloaded from Typefi /Workflows/…, stamped by XPRT with tag actions and placeholders, and uploaded alongside the package for each job; models/Workflow is its listing entry. | 14 | 1 | workflow, typefi |
| [stats-counter](nodes/stats-counter.md) | Stats rows — count of compositions started per (day, project, item\|form) since process start; the data behind projectStats and dayStats. | 12 | 1 | stats |
| [typefi-response](nodes/typefi-response.md) | TypefiResponse — XPRT's view of a Typefi job JSON (id, jobStatus, path, outputs → pdf/indd/docx names, errorMessage); refreshed on every poll and used to build download URLs and caller responses. | 11 | 1 | typefi |
| [workflow-mapping](nodes/workflow-mapping.md) | Workflow mapping rows (models/WorkflowMapping) flattened from two JSON files hosted on Typefi — ABBI project→subject→grade→workflows and AD account→bank→workflows — that decide which .typefi_workflow composes a package. | 9 | 1 | workflow, config-data |
| [xprt-package](nodes/xprt-package.md) | The zip XPRT actually sends to Typefi — the caller's ABBI/AD/College Board package rewritten into Typefi's expected layout (single/ for one ABBI item, items/ assets/ forms/ shared/ for AD), minus manifests and macOS junk. | 7 | 1 | files, input |
| [abbi-asset](nodes/abbi-asset.md) | ABBIAsset — the metadata snapshot a Job keeps after parsing the form (ids, project/subject/grade, account/bank, print types, bucket, workflow name); used for logging, job JSON, workflow tags and the S3 target. Used for every source despite the name. | 5 | 1 | core, metadata |
| [print-pdf](nodes/print-pdf.md) | The composed print PDF — produced by Typefi in the job folder, then (API callers) streamed by XPRT into the ABBI bucket or AD's presigned S3 key, or (UI) downloaded on demand along with INDD/DOCX/EPS barcode. | 3 | 1 | output, print |

## module (13)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [auth](nodes/auth.md) | All authentication in XPRT — inbound HS256 JWTs (per-source shared secrets) on the v3/AD item routes, a Referer==Host check on clientSubmit, and outbound HTTP Basic to Typefi. Every other route is open. | 17 | 1 | security, auth |
| [job-registry](nodes/job-registry.md) | Job + Jobs — the per-request job lifecycle (parse → package → workflow → Typefi POST → throttled polling) and the in-memory registry indexed by pdf name, abbiJobId and Typefi job id. | 17 | 11 | core, jobs |
| [workflow-selection](nodes/workflow-selection.md) | Chooses which Typefi workflow composes a package — loads the ABBI (project/subject/grade) or AD (account/bank) mapping JSON from Typefi, matches print type → subject extension → default, then injects Project/User/Workflow/XPRT_ID tag actions into the workflow file. | 15 | 5 | workflow, typefi |
| [s3-upload](nodes/s3-upload.md) | util/S3 — writes the finished PDF either to an ABBI S3 bucket (AWS SDK v1 TransferManager, default credential chain, us-east-1) or to AD's presigned PUT URL. | 13 | 2 | s3, output |
| [api-jobs](nodes/api-jobs.md) | ApiJob (/api/job) and ApiTypefi (/api/typefi) — list XPRT's in-memory jobs, show registry/disk/heap counts, truncate the registry, list Typefi's last 3500 jobs and cancel a Typefi job. | 12 | 6 | jobs, admin, api |
| [api-item](nodes/api-item.md) | ApiItem (/api/item) — submit a content zip for print composition and poll for the PDF, for ABBI (v1/v2/v3), AD (v1/AD) and the XPRT UI, plus Typefi output downloads. | 11 | 11 | print, api |
| [api-pagerduty](nodes/api-pagerduty.md) | ApiPagerDuty (/api/pagerDuty) — synthetic health check that keeps eight canary Typefi workflow jobs cycling and answers 200 or 417 for an external PagerDuty monitor. | 11 | 3 | monitoring, api |
| [package-processing](nodes/package-processing.md) | util/files + input parsing — validates the uploaded zip, parses multipart fields into ItemInputForm, saves uploads to temp dirs and rewrites ABBI/AD/College Board zips into the XPRT package layout Typefi expects. | 10 | 5 | files, input |
| [responders](nodes/responders.md) | util/response + Typefi log scanning — turns Typefi job JSON into the per-caller response body (ABBIResponder path JSON, ClientResponder links) and maps Typefi log text to 16 friendly error messages. | 10 | 4 | response, errors |
| [typefi-client](nodes/typefi-client.md) | Every outbound HTTP call to the Typefi server — multipart job submission, job polling, file/log/listing downloads and the PDF fetch — all with Basic auth from TypefiUser/TypefiPass. | 10 | 6 | typefi, integration |
| [api-stats](nodes/api-stats.md) | ApiStats (/api/stats/get) and the Stats singleton — in-memory per-day, per-project counts of item vs form compositions started since the last restart. | 9 | 2 | stats, api |
| [api-info](nodes/api-info.md) | ApiAbout (/api/about) and ApiInformation (/api/info) — liveness, Typefi URL, ALB logout, Typefi workflow folder/file listings and the XSLT/container version shown in the UI header. | 4 | 4 | info, api |
| [xprt-application](nodes/xprt-application.md) | The XPRT WAR itself — RESTEasy bootstrap that mounts seven JAX-RS resources under /xprt/api, the Environment singleton, and the static jQuery pages. | 3 | 13 | core, bootstrap |

## interface (6)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [xprt-api](nodes/xprt-api.md) | The XPRT REST API under /xprt/api (RESTEasy) — 28 routes for item submit/poll (ABBI v1/v2/v3, AD v1, UI), Typefi output downloads, job and Typefi job admin, stats, info and the PagerDuty health check. | 24 | 4 | api |
| [index-ui](nodes/index-ui.md) | index.html + xprt.js — the XPRT upload page where staff pick a Typefi workflow folder/file, upload a zip, watch the Typefi job and download the PDF, InDesign, DOCX and barcode outputs. | 22 | 1 | ui |
| [jobs-ui](nodes/jobs-ui.md) | jobs.html + jobs.js — DataTable of every job this XPRT instance remembers (ABBI, AD, UI) with live Typefi status, Typefi and Splunk deep links and a cancel action. | 17 | 1 | ui, jobs |
| [project-stats-ui](nodes/project-stats-ui.md) | projectStats.html + projectStats.js — table of composition counts grouped by project and type (item/form) since the last restart. | 11 | 1 | ui, stats |
| [typefi-jobs-ui](nodes/typefi-jobs-ui.md) | typefiJobs.html + typefiJobs.js — DataTable of the Typefi server's own last 3500 jobs (all clients, not just XPRT) with cancel and Typefi deep links. | 9 | 1 | ui, jobs, typefi |
| [day-stats-ui](nodes/day-stats-ui.md) | dayStats.html + dayStats.js — table of composition counts grouped by day (and project/type) since the last restart. | 8 | 1 | ui, stats |

## integration (6)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [abbi](nodes/abbi.md) | ABBI (Pearson's item-banking/packaging system, abbi-asset BasePrintPreview) — the original XPRT client; submits item/form packages for print preview via /item/submit (v1), /item/v2 and /item/v3 and polls until XPRT drops the PDF in the ABBI bucket. | 14 | 2 | external, client, print |
| [typefi](nodes/typefi.md) | Typefi server (InDesign Server–based automated composition) — runs the XPRT workflows that compose packages into PDF/INDD/DOCX, and hosts the workflow files and XPRT's mapping JSON. | 12 | 2 | external, typefi, print |
| [ad](nodes/ad.md) | AD (Authoring & Delivery, adam_ad XPRTServiceImpl) — submits QTI item/stimulus/form packages to /item/v1/AD/submit/{jobId} with an HS256 JWT and a presigned S3 PUT URL, polls /item/v1/AD/polling/{jobId}; XPRT PUTs the PDF into AD_S3_INTERNAL. | 11 | 2 | external, client, print, cross-app |
| [pagerduty](nodes/pagerduty.md) | External PagerDuty uptime monitor that polls GET /xprt/api/pagerDuty; XPRT never calls PagerDuty — it answers 200 (healthy), 417 (canary failed) or 429. | 4 | 1 | external, monitoring |
| [new-relic](nodes/new-relic.md) | New Relic Java APM agent baked into the image (latest agent downloaded at build) and attached via -javaagent; configured by NR_LICENSE_KEY and NR_ENVIRONMENT_NAME. | 3 | 1 | external, monitoring |
| [s3-buckets](nodes/s3-buckets.md) | AWS S3 as the PDF destination — ABBI buckets named per request (bucketName field; SDK v1 PutObject with the container's IAM role) and AD's internal bucket reached only through an AD-issued presigned PUT URL. | 1 | 0 | external, aws, output |

## datastore (2)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [job-store](nodes/job-store.md) | The only "database" — four static in-memory maps/queues in Jobs (by Typefi job id, pdf name, abbiJobId, and insertion order) plus the Stats HashMaps; lost on restart, not shared across replicas. | 7 | 2 | storage, memory |
| [local-temp-files](nodes/local-temp-files.md) | Container-local scratch under java.io.tmpdir — uploaded zips (uploadDir*/), rewritten packages (xprtPkg*.zip) and downloaded workflow files (*__*.typefi_workflow); deleted per job, with a stale cleanup aimed at ~/upload. | 5 | 2 | storage, files |

## config (3)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [xprt-env](nodes/xprt-env.md) | Runtime environment variables — TypefiUrl/TypefiUser/TypefiPass (read straight from System.getenv), the per-client JWT secrets xprt_ABBI_shared_key / xprt_AD_shared_key, New Relic keys, plus build.number and the unused config-xprt.properties. | 17 | 0 | config, env |
| [tomcat-config](nodes/tomcat-config.md) | Tomcat 10.1 server.xml and web.xml settings — single HTTP connector on 8080 with 10-minute timeout and 650 MB post limit, /api/* RESTEasy mapping, JSON error pages, secure/http-only session cookie. | 3 | 0 | config, tomcat |
| [container-deploy](nodes/container-deploy.md) | Build and deploy — mvn clean package → Docker image on tomcat:10.1-jdk21-temurin with New Relic, Jolokia 2.6.2 and envsubst startup; Jenkins (and a GitHub Actions workflow) push to ECR and trigger the xprt-manifest deployment pipelines (dev/prod/RAMP). | 2 | 1 | deploy, ci |

## flow (5)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [poll-print-status](nodes/poll-print-status.md) | Poll a composition — find the Job, poll Typefi (≤ every 2 s), and once done scan logs for errors, fetch the PDF and deliver it once (ABBI bucket or AD presigned URL); UI polls just get status + download links. | 9 | 7 | print, core |
| [submit-item-for-print](nodes/submit-item-for-print.md) | Submit a content zip for print composition — validate, register a Job, parse fields (JWT), rewrite the package, pick and stamp a Typefi workflow, POST both to Typefi and return the Typefi job id (ABBI/AD) or status JSON (UI). | 8 | 9 | print, core |
| [cancel-typefi-job](nodes/cancel-typefi-job.md) | Cancel a composition — from the UI (POST /api/typefi/jobCancel → Typefi cancel) or implicitly when a newer v1/UI submit with the same pdf name supersedes an unfinished job. | 6 | 4 | jobs, admin |
| [view-stats-pages](nodes/view-stats-pages.md) | The stats pages — projectStats/dayStats fetch /api/stats/get (in-memory counts since restart) and aggregate client-side by project or day; jobs/typefiJobs pages show registry and Typefi job lists. | 5 | 5 | stats, ui |
| [pagerduty-health-check](nodes/pagerduty-health-check.md) | External monitor polls /xprt/api/pagerDuty; XPRT advances eight canary Typefi workflow jobs and reports 200 (healthy), 417 (a canary failed or was stuck >15 min) or 429 (rate-limited). | 4 | 4 | monitoring |

## concept (10)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [pdf-name](nodes/pdf-name.md) | The job's pdf name / "fileName" — assetRefId + subjectExtension + ".pdf"; v1 and UI poll by it, ABBI uses it as the S3 key, and duplicate detection keys on it. | 3 | 2 | glossary |
| [abbi-job-id](nodes/abbi-job-id.md) | abbiJobId — the caller-supplied GUID in v2/v3/AD routes that keys the job for polling; for AD it is the AD job-history id (named jobId in the JWT). | 1 | 1 | glossary |
| [subject-extension](nodes/subject-extension.md) | subjectExtension — an ABBI suffix such as _ET, _TE, _Writing, _Listening, _Scenario, _DirectionLine, _Poem that is part of the PDF name but stripped (known values only) before workflow matching. | 1 | 1 | glossary |
| [typefi-job-id](nodes/typefi-job-id.md) | typefiJobId — the Typefi server's numeric job id returned by the workflow POST; used for status polls, cancel and Typefi deep links, and returned to v2/v3/AD callers. | 1 | 1 | glossary |
| [workflow-type](nodes/workflow-type.md) | workflowType — the mapping key string item\|form [+ print_itemtype\|print_formtype] [+ subjectExtension] that selects a workflow within a project/subject/grade (ABBI) or account/bank (AD). | 1 | 1 | glossary |
| [form-package](nodes/form-package.md) | Form vs item package — a zip with several XML files (ABBI) or a forms/ folder (AD) is a form; it must be composed with a workflow containing "Form Config", and items with one that does not. | 0 | 2 | glossary |
| [source](nodes/source.md) | Source (enum ABBI \| AD \| CB "College Board") — which client a job is for; selects package rewrite, mapping file, JWT secret and where the PDF goes. | 0 | 3 | glossary |
| [typefi-job-status](nodes/typefi-job-status.md) | Typefi jobStatus values (Pending, Started, Completed, Failed, Cancelled, Deleted) and how XPRT reads them — Completed/Failed/Cancelled mean done; only Failed triggers log scanning. | 0 | 1 | glossary |
| [xprt-id-tag](nodes/xprt-id-tag.md) | XPRT_ID — a label action XPRT injects into every Typefi workflow carrying the job's startTime, so a Typefi job can be traced back to XPRT logs (Splunk) and vice versa. | 0 | 2 | glossary |
| [xprt-name](nodes/xprt-name.md) | XPRT stands for XML Print Rendering Tool — Pearson's print/PDF composition front end to Typefi; not an AI or item-generation service. | 0 | 1 | glossary |

## capability (7)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [abbi-print-preview](nodes/abbi-print-preview.md) | ABBI users get a print-ready PDF preview of an item, passage or form, composed on Typefi in the program's house style and dropped into ABBI's S3 bucket. | 0 | 6 | print, abbi |
| [ad-print-pdf](nodes/ad-print-pdf.md) | AD (and through it Abigail) can produce a paper/print PDF of an item, stimulus or form; XPRT composes it and writes it straight into AD's private bucket. | 0 | 6 | print, ad, cross-app |
| [health-monitoring](nodes/health-monitoring.md) | PagerDuty alerts when the composition stack (Typefi, InDesign, MathTools) stops finishing test jobs. | 0 | 2 | monitoring |
| [job-monitoring](nodes/job-monitoring.md) | Operators can see every job XPRT and the Typefi server are running, jump to Typefi or Splunk for details, and cancel stuck jobs. | 0 | 4 | jobs, admin |
| [manual-composition](nodes/manual-composition.md) | Staff can upload a package on the XPRT web page, pick any Typefi workflow, and download the PDF, InDesign file, Word file and barcode. | 0 | 5 | print, ui |
| [usage-stats](nodes/usage-stats.md) | Simple counts of how many items and forms were composed per day and per project since the server last started. | 0 | 2 | stats |
| [workflow-routing](nodes/workflow-routing.md) | The right layout template is picked automatically from the content's program, subject and grade (ABBI) or account and bank (AD), editable on the Typefi server without a deploy. | 0 | 2 | workflow |
