Some checks failed
		
		
	
	Build Test Deploy / docs (push) Has been cancelled
				
			Build Test Deploy / deploy (push) Has been cancelled
				
			Build Test Deploy / build-test (push) Has been cancelled
				
			Build Test Deploy / authority-container (push) Has been cancelled
				
			Docs CI / lint-and-preview (push) Has been cancelled
				
			
		
			
				
	
	
		
			166 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
| {
 | |
|   "$schema": "https://json-schema.org/draft/2020-12/schema",
 | |
|   "$id": "https://stella-ops.org/schemas/revocation-bundle.json",
 | |
|   "title": "StellaOps Authority Revocation Bundle",
 | |
|   "description": "Canonical representation of revoked tokens, clients, and principals distributed to offline mirrors.",
 | |
|   "type": "object",
 | |
|   "additionalProperties": false,
 | |
|   "required": [
 | |
|     "schemaVersion",
 | |
|     "issuer",
 | |
|     "issuedAt",
 | |
|     "sequence",
 | |
|     "revocations"
 | |
|   ],
 | |
|   "properties": {
 | |
|     "schemaVersion": {
 | |
|       "type": "string",
 | |
|       "pattern": "^1\\.0\\.[0-9]+$",
 | |
|       "description": "SemVer of the bundle schema. Major version bumps indicate breaking changes."
 | |
|     },
 | |
|     "issuer": {
 | |
|       "type": "string",
 | |
|       "format": "uri",
 | |
|       "description": "Canonical issuer URL of the Authority instance producing the bundle."
 | |
|     },
 | |
|     "bundleId": {
 | |
|       "type": "string",
 | |
|       "pattern": "^[a-f0-9]{16,64}$",
 | |
|       "description": "Deterministic identifier for this bundle revision (e.g. SHA-256 hex)."
 | |
|     },
 | |
|     "issuedAt": {
 | |
|       "type": "string",
 | |
|       "format": "date-time",
 | |
|       "description": "UTC timestamp when the bundle was emitted."
 | |
|     },
 | |
|     "validFrom": {
 | |
|       "type": "string",
 | |
|       "format": "date-time",
 | |
|       "description": "UTC timestamp when consumers should begin enforcing entries."
 | |
|     },
 | |
|     "expiresAt": {
 | |
|       "type": "string",
 | |
|       "format": "date-time",
 | |
|       "description": "Optional expiry after which consumers must fetch a newer bundle."
 | |
|     },
 | |
|     "sequence": {
 | |
|       "type": "integer",
 | |
|       "minimum": 0,
 | |
|       "description": "Monotonic sequence number. Consumers MUST ignore bundles with lower sequence values."
 | |
|     },
 | |
|     "signingKeyId": {
 | |
|       "type": "string",
 | |
|       "description": "Key identifier (kid) used for the detached JWS signature."
 | |
|     },
 | |
|     "revocations": {
 | |
|       "type": "array",
 | |
|       "description": "Deterministically sorted revocation entries.",
 | |
|       "items": { "$ref": "#/$defs/revocationEntry" }
 | |
|     },
 | |
|     "metadata": {
 | |
|       "type": "object",
 | |
|       "description": "Additional producer metadata (operator, environment, export job id).",
 | |
|       "additionalProperties": {
 | |
|         "type": ["string", "number", "boolean", "null"]
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   "$defs": {
 | |
|     "revocationEntry": {
 | |
|       "type": "object",
 | |
|       "additionalProperties": false,
 | |
|       "required": ["id", "category", "revokedAt"],
 | |
|       "properties": {
 | |
|         "id": {
 | |
|           "type": "string",
 | |
|           "minLength": 4,
 | |
|           "description": "Primary identifier for the revoked entity (token id, subject id, client id, or key id)."
 | |
|         },
 | |
|         "category": {
 | |
|           "type": "string",
 | |
|           "enum": ["token", "subject", "client", "key"],
 | |
|           "description": "Scope of the revocation entry."
 | |
|         },
 | |
|         "tokenType": {
 | |
|           "type": "string",
 | |
|           "enum": [
 | |
|             "access_token",
 | |
|             "refresh_token",
 | |
|             "authorization_code",
 | |
|             "device_code"
 | |
|           ],
 | |
|           "description": "Token type impacted by the revocation (required when category == 'token')."
 | |
|         },
 | |
|         "subjectId": {
 | |
|           "type": "string",
 | |
|           "description": "Subject identifier impacted (user, service account)."
 | |
|         },
 | |
|         "clientId": {
 | |
|           "type": "string",
 | |
|           "description": "OAuth client identifier impacted."
 | |
|         },
 | |
|         "reason": {
 | |
|           "type": "string",
 | |
|           "pattern": "^[a-z0-9_.-]{1,64}$",
 | |
|           "description": "Reason code (e.g. compromised, rotation, policy)."
 | |
|         },
 | |
|         "reasonDescription": {
 | |
|           "type": "string",
 | |
|           "maxLength": 256,
 | |
|           "description": "Human-readable description for operator tooling."
 | |
|         },
 | |
|         "revokedAt": {
 | |
|           "type": "string",
 | |
|           "format": "date-time",
 | |
|           "description": "UTC timestamp when the entity was revoked."
 | |
|         },
 | |
|         "effectiveAt": {
 | |
|           "type": "string",
 | |
|           "format": "date-time",
 | |
|           "description": "UTC timestamp when revocation becomes effective (defaults to revokedAt)."
 | |
|         },
 | |
|         "expiresAt": {
 | |
|           "type": "string",
 | |
|           "format": "date-time",
 | |
|           "description": "Optional expiry after which the revocation no longer applies."
 | |
|         },
 | |
|         "scopes": {
 | |
|           "type": "array",
 | |
|           "items": { "type": "string" },
 | |
|           "uniqueItems": true,
 | |
|           "description": "Scoped permissions affected (for token revocations)."
 | |
|         },
 | |
|         "fingerprint": {
 | |
|           "type": "string",
 | |
|           "pattern": "^[A-Fa-f0-9]{64}$",
 | |
|           "description": "SHA-256 hash of the revoked credential (optional)."
 | |
|         },
 | |
|         "metadata": {
 | |
|           "type": "object",
 | |
|           "description": "Additional structured metadata to assist consumers (e.g. audit id).",
 | |
|           "patternProperties": {
 | |
|             "^[a-zA-Z0-9_.-]{1,64}$": {
 | |
|               "type": ["string", "number", "boolean", "null"]
 | |
|             }
 | |
|           },
 | |
|           "additionalProperties": false
 | |
|         }
 | |
|       },
 | |
|       "allOf": [
 | |
|         {
 | |
|           "if": { "properties": { "category": { "const": "token" } } },
 | |
|           "then": { "required": ["tokenType", "clientId"] }
 | |
|         },
 | |
|         {
 | |
|           "if": { "properties": { "category": { "const": "subject" } } },
 | |
|           "then": { "required": ["subjectId"] }
 | |
|         },
 | |
|         {
 | |
|           "if": { "properties": { "category": { "const": "client" } } },
 | |
|           "then": { "required": ["clientId"] }
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   }
 | |
| }
 |