feat(graph-api): Add schema review notes for upcoming Graph API changes
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
feat(sbomservice): Add placeholder for SHA256SUMS in LNM v1 fixtures docs(devportal): Create README for SDK archives in public directory build(devportal): Implement offline bundle build script test(devportal): Add link checker script for validating links in documentation test(devportal): Create performance check script for dist folder size test(devportal): Implement accessibility check script using Playwright and Axe docs(devportal): Add SDK quickstart guide with examples for Node.js, Python, and cURL feat(excititor): Implement MongoDB storage for airgap import records test(findings): Add unit tests for export filters hash determinism feat(findings): Define attestation contracts for ledger web service feat(graph): Add MongoDB options and service collection extensions for graph indexing test(graph): Implement integration tests for MongoDB provider and service collection extensions feat(zastava): Define configuration options for Zastava surface secrets build(tests): Create script to run Concelier linkset tests with TRX output
This commit is contained in:
@@ -33,6 +33,12 @@ paths:
|
||||
application/x-ndjson:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TileEnvelope'
|
||||
examples:
|
||||
sample:
|
||||
summary: Node + cursor tiles
|
||||
value: |
|
||||
{"type":"node","seq":0,"data":{"id":"gn:tenant:component:abc","kind":"component","tenant":"acme","attributes":{"purl":"pkg:npm/lodash@4.17.21"}},"cost":{"limit":1000,"remaining":999,"consumed":1}}
|
||||
{"type":"cursor","seq":1,"data":{"token":"cursor-123","resumeUrl":"https://gateway.local/api/graph/query?cursor=cursor-123"}}
|
||||
'400': { $ref: '#/components/responses/ValidationError' }
|
||||
'401': { $ref: '#/components/responses/Unauthorized' }
|
||||
'429': { $ref: '#/components/responses/BudgetExceeded' }
|
||||
@@ -58,6 +64,13 @@ paths:
|
||||
application/x-ndjson:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TileEnvelope'
|
||||
examples:
|
||||
mixedTiles:
|
||||
summary: Node + edge + stats tiles
|
||||
value: |
|
||||
{"type":"node","seq":0,"data":{"id":"gn:tenant:artifact:sha256:...","tenant":"acme","kind":"artifact","attributes":{"sbom_digest":"sha256:abc"}}}
|
||||
{"type":"edge","seq":1,"data":{"id":"ge:tenant:CONTAINS:...","sourceId":"gn:tenant:artifact:...","targetId":"gn:tenant:component:...","kind":"CONTAINS"}}
|
||||
{"type":"stats","seq":2,"data":{"nodesEmitted":1,"edgesEmitted":1,"depthReached":2,"cacheHitRatio":0.8}}
|
||||
'400': { $ref: '#/components/responses/ValidationError' }
|
||||
'401': { $ref: '#/components/responses/Unauthorized' }
|
||||
'429': { $ref: '#/components/responses/BudgetExceeded' }
|
||||
@@ -83,6 +96,13 @@ paths:
|
||||
application/x-ndjson:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TileEnvelope'
|
||||
examples:
|
||||
pathTiles:
|
||||
summary: Path tiles grouped by hop
|
||||
value: |
|
||||
{"type":"node","seq":0,"data":{"id":"gn:tenant:component:src","kind":"component","tenant":"acme"}}
|
||||
{"type":"edge","seq":1,"data":{"id":"ge:tenant:DEPENDS_ON:1","sourceId":"gn:tenant:component:src","targetId":"gn:tenant:component:dst","kind":"DEPENDS_ON"}}
|
||||
{"type":"stats","seq":2,"data":{"nodesEmitted":2,"edgesEmitted":1,"depthReached":1}}
|
||||
'400': { $ref: '#/components/responses/ValidationError' }
|
||||
'401': { $ref: '#/components/responses/Unauthorized' }
|
||||
'429': { $ref: '#/components/responses/BudgetExceeded' }
|
||||
@@ -108,9 +128,47 @@ paths:
|
||||
application/x-ndjson:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TileEnvelope'
|
||||
examples:
|
||||
diffTiles:
|
||||
summary: Added/removed tiles
|
||||
value: |
|
||||
{"type":"node","seq":0,"data":{"id":"gn:tenant:component:new","kind":"component","tenant":"acme","attributes":{"purl":"pkg:npm/new@1.0.0"}}}
|
||||
{"type":"diagnostic","seq":1,"data":{"level":"info","message":"snapshot diff complete"}}
|
||||
'400': { $ref: '#/components/responses/ValidationError' }
|
||||
'401': { $ref: '#/components/responses/Unauthorized' }
|
||||
|
||||
/graph/export/{jobId}/manifest:
|
||||
get:
|
||||
summary: Download deterministic checksum manifest for a completed export job
|
||||
security:
|
||||
- bearerAuth: []
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/TenantHeader'
|
||||
- $ref: '#/components/parameters/RequestIdHeader'
|
||||
- name: jobId
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
'200':
|
||||
description: Deterministic manifest
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
files:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
path: { type: string }
|
||||
sha256: { type: string }
|
||||
size: { type: integer }
|
||||
exportId: { type: string }
|
||||
'404': { description: Manifest not ready or job missing }
|
||||
|
||||
/graph/export:
|
||||
post:
|
||||
summary: Request export job for snapshot or query result
|
||||
@@ -192,12 +250,15 @@ components:
|
||||
limit:
|
||||
type: integer
|
||||
minimum: 1
|
||||
example: 1000
|
||||
remaining:
|
||||
type: integer
|
||||
minimum: 0
|
||||
example: 995
|
||||
consumed:
|
||||
type: integer
|
||||
minimum: 0
|
||||
example: 5
|
||||
required: [limit, remaining, consumed]
|
||||
|
||||
TileEnvelope:
|
||||
@@ -209,13 +270,68 @@ components:
|
||||
seq:
|
||||
type: integer
|
||||
minimum: 0
|
||||
example: 0
|
||||
cost:
|
||||
$ref: '#/components/schemas/CostBudget'
|
||||
data:
|
||||
type: object
|
||||
description: Payload varies by tile type (node/edge record, stats snapshot, cursor token, or diagnostic info).
|
||||
description: Payload varies by tile type.
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/NodeTile'
|
||||
- $ref: '#/components/schemas/EdgeTile'
|
||||
- $ref: '#/components/schemas/StatsTile'
|
||||
- $ref: '#/components/schemas/CursorTile'
|
||||
- $ref: '#/components/schemas/DiagnosticTile'
|
||||
required: [type, seq]
|
||||
|
||||
NodeTile:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string }
|
||||
kind: { type: string }
|
||||
tenant: { type: string }
|
||||
attributes: { type: object }
|
||||
overlays:
|
||||
type: object
|
||||
description: Optional overlay payloads (policy/vex/advisory) keyed by overlay kind.
|
||||
required: [id, kind, tenant]
|
||||
|
||||
EdgeTile:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string }
|
||||
kind: { type: string }
|
||||
sourceId: { type: string }
|
||||
targetId: { type: string }
|
||||
tenant: { type: string }
|
||||
attributes: { type: object }
|
||||
overlays:
|
||||
type: object
|
||||
required: [id, kind, sourceId, targetId, tenant]
|
||||
|
||||
StatsTile:
|
||||
type: object
|
||||
properties:
|
||||
nodesEmitted: { type: integer, minimum: 0 }
|
||||
edgesEmitted: { type: integer, minimum: 0 }
|
||||
depthReached: { type: integer, minimum: 0 }
|
||||
cacheHitRatio: { type: number, minimum: 0, maximum: 1 }
|
||||
required: [nodesEmitted, edgesEmitted]
|
||||
|
||||
CursorTile:
|
||||
type: object
|
||||
properties:
|
||||
token: { type: string }
|
||||
resumeUrl: { type: string, format: uri }
|
||||
required: [token]
|
||||
|
||||
DiagnosticTile:
|
||||
type: object
|
||||
properties:
|
||||
level: { type: string, enum: [info, warn, error] }
|
||||
message: { type: string }
|
||||
details: { type: object }
|
||||
required: [level, message]
|
||||
|
||||
SearchRequest:
|
||||
type: object
|
||||
properties:
|
||||
|
||||
Reference in New Issue
Block a user