62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
|
|
/** Shared types + query keys for MITRE ATT&CK browsing. */
|
||
|
|
|
||
|
|
export interface MitreTactic {
|
||
|
|
id: string;
|
||
|
|
external_id: string;
|
||
|
|
short_name: string;
|
||
|
|
name: string;
|
||
|
|
description: string | null;
|
||
|
|
url: string | null;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface MitreTechnique {
|
||
|
|
id: string;
|
||
|
|
external_id: string;
|
||
|
|
name: string;
|
||
|
|
description: string | null;
|
||
|
|
url: string | null;
|
||
|
|
tactics: Array<{ external_id: string; name: string }>;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface MitreSubtechnique {
|
||
|
|
id: string;
|
||
|
|
external_id: string;
|
||
|
|
name: string;
|
||
|
|
description: string | null;
|
||
|
|
url: string | null;
|
||
|
|
technique_id: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface Paginated<T> {
|
||
|
|
items: T[];
|
||
|
|
total: number;
|
||
|
|
limit: number;
|
||
|
|
offset: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface MitreStatus {
|
||
|
|
last_sync: string | null;
|
||
|
|
version: string | null;
|
||
|
|
source_url: string | null;
|
||
|
|
default_url: string;
|
||
|
|
default_version: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export type MitreTagKind = 'tactic' | 'technique' | 'subtechnique';
|
||
|
|
|
||
|
|
export interface MitreTag {
|
||
|
|
kind: MitreTagKind;
|
||
|
|
id: string;
|
||
|
|
external_id: string;
|
||
|
|
name: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const mitreKeys = {
|
||
|
|
status: ['mitre', 'status'] as const,
|
||
|
|
tactics: (q?: string) => ['mitre', 'tactics', q ?? ''] as const,
|
||
|
|
techniques: (tactic?: string, q?: string) =>
|
||
|
|
['mitre', 'techniques', tactic ?? '', q ?? ''] as const,
|
||
|
|
subtechniques: (technique?: string, q?: string) =>
|
||
|
|
['mitre', 'subtechniques', technique ?? '', q ?? ''] as const,
|
||
|
|
};
|