JSON / payload viewer
Failed jobs, payload audits and replays: pretty JSON with collapse, wrap and copy, UTC times annotated in your zone, the raw unredacted payload for those allowed (Q9c), and the show-once secret (API key) with reveal and copy.
Covers: M11. Exports: JsonViewer.
Anatomy
The component as it sits in the product: English, compact, real data shapes.
{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": {
"order_id": 4522,
"job_type": "shirt_code",
"groups": ["4522-1-2-3"],
"attempts": 3,
"manual": false
},
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds"
}States
6 states, left to right, top to bottom. A mock poll never finishes, so each state is drawn on purpose.
{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": {
"order_id": 4522,
"job_type": "shirt_code",
"groups": ["4522-1-2-3"],
"attempts": 3,
"manual": false
},
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds"
}{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": { … 14 keys },
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds"
}{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": {
"order_id": 4522,
"job_type": "shirt_code",
"groups": ["4522-1-2-3"],
"attempts": 3,
"manual": false
},
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds"
}{ "name": "Shanghai print agent",
"token": ••••••••••••••••••••••••••••a7Q2 }Payload couldn’t be decoded
The decoder answered 422: not valid JSON. The raw text is below.
O:23:"App\Jobs\SendWechat"…
Density
The phone shell is always comfortable (POWERUPS #15): 44px tap targets, 16px inputs. Compact exists on desktop only; see the desktop page.
{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": {
"order_id": 4522,
"job_type": "shirt_code",
"groups": ["4522-1-2-3"],
"attempts": 3,
"manual": false
},
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds"
}English · 中文
Staff pick en or cn (T001 Q25). Labels arrive localised; CJK falls back to PingFang SC / Noto Sans SC.
{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": {
"order_id": 4522,
"job_type": "shirt_code",
"groups": ["4522-1-2-3"],
"attempts": 3,
"manual": false
},
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds"
}{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": {
"order_id": 4522,
"job_type": "shirt_code",
"groups": ["4522-1-2-3"],
"attempts": 3,
"manual": false
},
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds"
}Long string · permission denied
The long-string case (PL-063) and what a role without the permission sees (the server decides; T003).
{
"uuid": "0d6b2f0e-77a1-4c1e-9f3a-5b2e8c41d913",
"queue": "print",
"failed_at": "2026-10-18T05:02:14Z", // 13:02 UTC+8
"payload": {
"order_id": 4522,
"job_type": "shirt_code",
"groups": ["4522-1-2-3"],
"attempts": 3,
"manual": false
},
"exception": "Illuminate\Http\Client\ConnectionException: cURL error 28: Operation timed out after 30001 milliseconds with 0 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://print-agent.internal.example/api/v2/jobs/7781/dispatch?retry=3&group=4522-1-2-3"
}Not available to your role
Your role is missing view failed jobs. Nothing here is hidden by mistake: the server sends only what you can do.
Contract
The @rj/admin-kit API for this family. Mirrored in CONTRACT.md.
- Export
JsonViewer·@rj/admin-kit- Props
value·collapsedDepth·wrap·maskKeys·annotateTimes- States
- expanded · collapsed · wrapped · masked · loading · error
- shadcn / Radix
- Collapsible + Button (copy)
- Package underneath
- react-json-view-lite (CodeMirror only if search / edit is needed)
- Accessibility
- tree with aria-expanded per node; Copy announces
- API operations
- admin.failed-jobs.show · admin.orders.payload-audits.decoded · admin.replays.show · admin.api-request-logs.index · admin.api-keys.store (show once)
- Phone variant
- always wrapped