mirror of
https://github.com/koala73/worldmonitor.git
synced 2026-04-26 01:24:59 +02:00
* feat(sanctions): add OFAC sanctions pressure intelligence * fix(sanctions): strip _state from API response, fix code/name alignment, cap seed limit - trimResponse now destructures _state before spreading to prevent seed internals leaking to API clients during the atomicPublish→afterPublish window - buildLocationMap and extractPartyCountries now sort (code, name) as aligned pairs instead of calling uniqueSorted independently on each array; fixes code↔name mispairing for OFAC-specific codes like XC (Crimea) where alphabetic order of codes and names diverges - DEFAULT_RECENT_LIMIT reduced from 120 to 60 to match MAX_ITEMS_LIMIT so seeded entries beyond the handler cap are not written unnecessarily - Add tests/sanctions-pressure.test.mjs covering all three invariants * fix(sanctions): register sanctions:pressure:v1 in health.js BOOTSTRAP_KEYS and SEED_META Adds sanctionsPressure to health.js so the health endpoint monitors the seeded key for emptiness (CRIT) and freshness via seed-meta:sanctions:pressure (maxStaleMin: 720 matches 12h seed TTL). Without this, health was blind to stale or missing sanctions data.
1 line
4.5 KiB
JSON
1 line
4.5 KiB
JSON
{"components":{"schemas":{"CountrySanctionsPressure":{"description":"CountrySanctionsPressure summarizes designation volume and recent additions by country.","properties":{"aircraftCount":{"format":"int32","type":"integer"},"countryCode":{"type":"string"},"countryName":{"type":"string"},"entryCount":{"format":"int32","type":"integer"},"newEntryCount":{"format":"int32","type":"integer"},"vesselCount":{"format":"int32","type":"integer"}},"type":"object"},"Error":{"description":"Error is returned when a handler encounters an error. It contains a simple error message that the developer can customize.","properties":{"message":{"description":"Error message (e.g., 'user not found', 'database connection failed')","type":"string"}},"type":"object"},"FieldViolation":{"description":"FieldViolation describes a single validation error for a specific field.","properties":{"description":{"description":"Human-readable description of the validation violation (e.g., 'must be a valid email address', 'required field missing')","type":"string"},"field":{"description":"The field path that failed validation (e.g., 'user.email' for nested fields). For header validation, this will be the header name (e.g., 'X-API-Key')","type":"string"}},"required":["field","description"],"type":"object"},"ListSanctionsPressureRequest":{"description":"ListSanctionsPressureRequest retrieves recent OFAC sanctions pressure state.","properties":{"maxItems":{"format":"int32","type":"integer"}},"type":"object"},"ListSanctionsPressureResponse":{"description":"ListSanctionsPressureResponse contains normalized OFAC pressure summaries and recent entries.","properties":{"aircraftCount":{"format":"int32","type":"integer"},"consolidatedCount":{"format":"int32","type":"integer"},"countries":{"items":{"$ref":"#/components/schemas/CountrySanctionsPressure"},"type":"array"},"datasetDate":{"format":"int64","type":"string"},"entries":{"items":{"$ref":"#/components/schemas/SanctionsEntry"},"type":"array"},"fetchedAt":{"format":"int64","type":"string"},"newEntryCount":{"format":"int32","type":"integer"},"programs":{"items":{"$ref":"#/components/schemas/ProgramSanctionsPressure"},"type":"array"},"sdnCount":{"format":"int32","type":"integer"},"totalCount":{"format":"int32","type":"integer"},"vesselCount":{"format":"int32","type":"integer"}},"type":"object"},"ProgramSanctionsPressure":{"description":"ProgramSanctionsPressure summarizes designation volume and recent additions by OFAC program.","properties":{"entryCount":{"format":"int32","type":"integer"},"newEntryCount":{"format":"int32","type":"integer"},"program":{"type":"string"}},"type":"object"},"SanctionsEntry":{"description":"SanctionsEntry is a normalized OFAC sanctions designation.","properties":{"countryCodes":{"items":{"type":"string"},"type":"array"},"countryNames":{"items":{"type":"string"},"type":"array"},"effectiveAt":{"format":"int64","type":"string"},"entityType":{"description":"SanctionsEntityType classifies the designated party.","enum":["SANCTIONS_ENTITY_TYPE_UNSPECIFIED","SANCTIONS_ENTITY_TYPE_ENTITY","SANCTIONS_ENTITY_TYPE_INDIVIDUAL","SANCTIONS_ENTITY_TYPE_VESSEL","SANCTIONS_ENTITY_TYPE_AIRCRAFT"],"type":"string"},"id":{"type":"string"},"isNew":{"type":"boolean"},"name":{"type":"string"},"note":{"type":"string"},"programs":{"items":{"type":"string"},"type":"array"},"sourceLists":{"items":{"type":"string"},"type":"array"}},"type":"object"},"ValidationError":{"description":"ValidationError is returned when request validation fails. It contains a list of field violations describing what went wrong.","properties":{"violations":{"description":"List of validation violations","items":{"$ref":"#/components/schemas/FieldViolation"},"type":"array"}},"required":["violations"],"type":"object"}}},"info":{"title":"SanctionsService API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/sanctions/v1/list-sanctions-pressure":{"get":{"description":"ListSanctionsPressure retrieves normalized OFAC designation summaries and recent additions.","operationId":"ListSanctionsPressure","parameters":[{"in":"query","name":"max_items","required":false,"schema":{"format":"int32","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSanctionsPressureResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}},"description":"Validation error"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error response"}},"summary":"ListSanctionsPressure","tags":["SanctionsService"]}}}} |