
cd tracks && direnv allow && tracks-local
FT_API_URL=http://localhost:8002
metadata: { organization: "organization-name",group: "group-name", // ... additional context}
{ action: "CREATE" | "READ" | "UPDATE" | "DELETE",author: string, // Who performed the actiondate: Date,mechanism: "API" | "WEB" | "SCHEDULER" | "TASK" | "MIGRATION" | "JIRA" | "FORCES" | "MELTS" | "RETRIEVES" | "FIXES",metadata: Record<string, unknown>, // MUST include organization & group if applicable object: string, // What was affectedobjectId: string // Unique identifier within object type scope }
import { Tracks } from "@fluidattacks/tracks";
const client = new Tracks();
client.event.create({
action: "CREATE",
author: "user@example.com",
date: new Date(),
mechanism: "WEB",
metadata: {
organization: "org-name",
group: "group-name",
description: "New vulnerability created"
},
object: "Vulnerability",
objectId: "vuln-id"
});
from fluidattacks_tracks import Tracks
from fluidattacks_tracks.resources.event import Event
client = Tracks()
client.event.create(
Event(
action="CREATE", author="user@example.com",
date=datetime.now(UTC),
mechanism="WEB",
metadata={
organization: "org-name", group: "group-name",
description: "New vulnerability created"
},
object="Vulnerability", objectId="vuln-id"
)
)object field, providing flexibility for different use cases. However, Fluid Attacks applications follow two specific naming patterns to ensure consistency across the platform:objectId:object: "Vulnerability" objectId: "vuln-id" object: "Group"objectId: "unittesting" object: "Group.Findings"objectId: "unittesting" object: "Organization"objectId: "okada" object: "Organization.Analytics.AcceptedVulnerabilitiesBySeverity"objectId: "okada" object: "Group.Integrations.Connect.Jira"objectId: "testgroup"
object: "Login"objectId: "Microsoft"object: "Autoenroll.Welcome"objectId: "unknown"object: "UploadGroupFile"objectId: "repo_nickname/group_name"object: "HelpDeskMenu"objectId: "unknown"
organization field is included in metadata (when applicable)group field is included in metadata (when applicable)object follows the naming conventionauthor is properly identifiedmechanism matches the contextobjectId is unique and meaningfulconst metadata: Record<string, unknown> = {};if (groupName) metadata.group = groupName;
if (organizationName) metadata.organization = organizationName;
// Includes all required context
metadata: {
organization: "org-name",
group: "group-name",
state: {
source: "ANALYST",
status: "VULNERABLE",
severity: "HIGH" }
}
// Conditional inclusion
const metadata: Record<string, unknown> = {};
if (groupName) metadata.group = groupName;
if (organizationName) metadata.organization = organizationName;
// Inconsistent naming metadata: { org: "org-name", groupName: "group-name" } // Including undefined values metadata: { group: groupName, // Could be undefined organization: organizationName // Could be undefined}
