9f9f71a6a3
* ✨ Add purge event for age assurance data for compliance * 🧹 Cleanup * 📝 Add changeset * :rotating_lights: Fix lint issue
1223 lines
39 KiB
JSON
1223 lines
39 KiB
JSON
{
|
|
"lexicon": 1,
|
|
"id": "tools.ozone.moderation.defs",
|
|
"defs": {
|
|
"modEventView": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"event",
|
|
"subject",
|
|
"subjectBlobCids",
|
|
"createdBy",
|
|
"createdAt"
|
|
],
|
|
"properties": {
|
|
"id": { "type": "integer" },
|
|
"event": {
|
|
"type": "union",
|
|
"refs": [
|
|
"#modEventTakedown",
|
|
"#modEventReverseTakedown",
|
|
"#modEventComment",
|
|
"#modEventReport",
|
|
"#modEventLabel",
|
|
"#modEventAcknowledge",
|
|
"#modEventEscalate",
|
|
"#modEventMute",
|
|
"#modEventUnmute",
|
|
"#modEventMuteReporter",
|
|
"#modEventUnmuteReporter",
|
|
"#modEventEmail",
|
|
"#modEventResolveAppeal",
|
|
"#modEventDivert",
|
|
"#modEventTag",
|
|
"#accountEvent",
|
|
"#identityEvent",
|
|
"#recordEvent",
|
|
"#modEventPriorityScore",
|
|
"#ageAssuranceEvent",
|
|
"#ageAssuranceOverrideEvent",
|
|
"#ageAssurancePurgeEvent",
|
|
"#revokeAccountCredentialsEvent",
|
|
"#scheduleTakedownEvent",
|
|
"#cancelScheduledTakedownEvent"
|
|
]
|
|
},
|
|
"subject": {
|
|
"type": "union",
|
|
"refs": [
|
|
"com.atproto.admin.defs#repoRef",
|
|
"com.atproto.repo.strongRef",
|
|
"chat.bsky.convo.defs#messageRef"
|
|
]
|
|
},
|
|
"subjectBlobCids": { "type": "array", "items": { "type": "string" } },
|
|
"createdBy": { "type": "string", "format": "did" },
|
|
"createdAt": { "type": "string", "format": "datetime" },
|
|
"creatorHandle": { "type": "string" },
|
|
"subjectHandle": { "type": "string" },
|
|
"modTool": { "type": "ref", "ref": "#modTool" }
|
|
}
|
|
},
|
|
"modEventViewDetail": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"event",
|
|
"subject",
|
|
"subjectBlobs",
|
|
"createdBy",
|
|
"createdAt"
|
|
],
|
|
"properties": {
|
|
"id": { "type": "integer" },
|
|
"event": {
|
|
"type": "union",
|
|
"refs": [
|
|
"#modEventTakedown",
|
|
"#modEventReverseTakedown",
|
|
"#modEventComment",
|
|
"#modEventReport",
|
|
"#modEventLabel",
|
|
"#modEventAcknowledge",
|
|
"#modEventEscalate",
|
|
"#modEventMute",
|
|
"#modEventUnmute",
|
|
"#modEventMuteReporter",
|
|
"#modEventUnmuteReporter",
|
|
"#modEventEmail",
|
|
"#modEventResolveAppeal",
|
|
"#modEventDivert",
|
|
"#modEventTag",
|
|
"#accountEvent",
|
|
"#identityEvent",
|
|
"#recordEvent",
|
|
"#modEventPriorityScore",
|
|
"#ageAssuranceEvent",
|
|
"#ageAssuranceOverrideEvent",
|
|
"#ageAssurancePurgeEvent",
|
|
"#revokeAccountCredentialsEvent",
|
|
"#scheduleTakedownEvent",
|
|
"#cancelScheduledTakedownEvent"
|
|
]
|
|
},
|
|
"subject": {
|
|
"type": "union",
|
|
"refs": [
|
|
"#repoView",
|
|
"#repoViewNotFound",
|
|
"#recordView",
|
|
"#recordViewNotFound"
|
|
]
|
|
},
|
|
"subjectBlobs": {
|
|
"type": "array",
|
|
"items": { "type": "ref", "ref": "#blobView" }
|
|
},
|
|
"createdBy": { "type": "string", "format": "did" },
|
|
"createdAt": { "type": "string", "format": "datetime" },
|
|
"modTool": { "type": "ref", "ref": "#modTool" }
|
|
}
|
|
},
|
|
"subjectStatusView": {
|
|
"type": "object",
|
|
"required": ["id", "subject", "createdAt", "updatedAt", "reviewState"],
|
|
"properties": {
|
|
"id": { "type": "integer" },
|
|
"subject": {
|
|
"type": "union",
|
|
"refs": [
|
|
"com.atproto.admin.defs#repoRef",
|
|
"com.atproto.repo.strongRef",
|
|
"chat.bsky.convo.defs#messageRef"
|
|
]
|
|
},
|
|
"hosting": {
|
|
"type": "union",
|
|
"refs": ["#accountHosting", "#recordHosting"]
|
|
},
|
|
"subjectBlobCids": {
|
|
"type": "array",
|
|
"items": { "type": "string", "format": "cid" }
|
|
},
|
|
"subjectRepoHandle": { "type": "string" },
|
|
"updatedAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "Timestamp referencing when the last update was made to the moderation status of the subject"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "Timestamp referencing the first moderation status impacting event was emitted on the subject"
|
|
},
|
|
"reviewState": {
|
|
"type": "ref",
|
|
"ref": "#subjectReviewState"
|
|
},
|
|
"comment": {
|
|
"type": "string",
|
|
"description": "Sticky comment on the subject."
|
|
},
|
|
"priorityScore": {
|
|
"type": "integer",
|
|
"description": "Numeric value representing the level of priority. Higher score means higher priority.",
|
|
"minimum": 0,
|
|
"maximum": 100
|
|
},
|
|
"muteUntil": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"muteReportingUntil": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"lastReviewedBy": {
|
|
"type": "string",
|
|
"format": "did"
|
|
},
|
|
"lastReviewedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"lastReportedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"lastAppealedAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "Timestamp referencing when the author of the subject appealed a moderation action"
|
|
},
|
|
"takendown": {
|
|
"type": "boolean"
|
|
},
|
|
"appealed": {
|
|
"type": "boolean",
|
|
"description": "True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators."
|
|
},
|
|
"suspendUntil": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": { "type": "string" }
|
|
},
|
|
"accountStats": {
|
|
"description": "Statistics related to the account subject",
|
|
"type": "ref",
|
|
"ref": "#accountStats"
|
|
},
|
|
"recordsStats": {
|
|
"description": "Statistics related to the record subjects authored by the subject's account",
|
|
"type": "ref",
|
|
"ref": "#recordsStats"
|
|
},
|
|
"accountStrike": {
|
|
"description": "Strike information for the account (account-level only)",
|
|
"type": "ref",
|
|
"ref": "#accountStrike"
|
|
},
|
|
"ageAssuranceState": {
|
|
"type": "string",
|
|
"description": "Current age assurance state of the subject.",
|
|
"knownValues": ["pending", "assured", "unknown", "reset", "blocked"]
|
|
},
|
|
"ageAssuranceUpdatedBy": {
|
|
"type": "string",
|
|
"description": "Whether or not the last successful update to age assurance was made by the user or admin.",
|
|
"knownValues": ["admin", "user"]
|
|
}
|
|
}
|
|
},
|
|
"subjectView": {
|
|
"description": "Detailed view of a subject. For record subjects, the author's repo and profile will be returned.",
|
|
"type": "object",
|
|
"required": ["type", "subject"],
|
|
"properties": {
|
|
"type": {
|
|
"type": "ref",
|
|
"ref": "com.atproto.moderation.defs#subjectType"
|
|
},
|
|
"subject": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "ref",
|
|
"ref": "#subjectStatusView"
|
|
},
|
|
"repo": {
|
|
"type": "ref",
|
|
"ref": "#repoViewDetail"
|
|
},
|
|
"profile": {
|
|
"type": "union",
|
|
"refs": []
|
|
},
|
|
"record": {
|
|
"type": "ref",
|
|
"ref": "#recordViewDetail"
|
|
}
|
|
}
|
|
},
|
|
"accountStats": {
|
|
"description": "Statistics about a particular account subject",
|
|
"type": "object",
|
|
"properties": {
|
|
"reportCount": {
|
|
"description": "Total number of reports on the account",
|
|
"type": "integer"
|
|
},
|
|
"appealCount": {
|
|
"description": "Total number of appeals against a moderation action on the account",
|
|
"type": "integer"
|
|
},
|
|
"suspendCount": {
|
|
"description": "Number of times the account was suspended",
|
|
"type": "integer"
|
|
},
|
|
"escalateCount": {
|
|
"description": "Number of times the account was escalated",
|
|
"type": "integer"
|
|
},
|
|
"takedownCount": {
|
|
"description": "Number of times the account was taken down",
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"recordsStats": {
|
|
"description": "Statistics about a set of record subject items",
|
|
"type": "object",
|
|
"properties": {
|
|
"totalReports": {
|
|
"description": "Cumulative sum of the number of reports on the items in the set",
|
|
"type": "integer"
|
|
},
|
|
"reportedCount": {
|
|
"description": "Number of items that were reported at least once",
|
|
"type": "integer"
|
|
},
|
|
"escalatedCount": {
|
|
"description": "Number of items that were escalated at least once",
|
|
"type": "integer"
|
|
},
|
|
"appealedCount": {
|
|
"description": "Number of items that were appealed at least once",
|
|
"type": "integer"
|
|
},
|
|
"subjectCount": {
|
|
"description": "Total number of item in the set",
|
|
"type": "integer"
|
|
},
|
|
"pendingCount": {
|
|
"description": "Number of item currently in \"reviewOpen\" or \"reviewEscalated\" state",
|
|
"type": "integer"
|
|
},
|
|
"processedCount": {
|
|
"description": "Number of item currently in \"reviewNone\" or \"reviewClosed\" state",
|
|
"type": "integer"
|
|
},
|
|
"takendownCount": {
|
|
"description": "Number of item currently taken down",
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"accountStrike": {
|
|
"description": "Strike information for an account",
|
|
"type": "object",
|
|
"properties": {
|
|
"activeStrikeCount": {
|
|
"description": "Current number of active strikes (excluding expired strikes)",
|
|
"type": "integer"
|
|
},
|
|
"totalStrikeCount": {
|
|
"description": "Total number of strikes ever received (including expired strikes)",
|
|
"type": "integer"
|
|
},
|
|
"firstStrikeAt": {
|
|
"description": "Timestamp of the first strike received",
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"lastStrikeAt": {
|
|
"description": "Timestamp of the most recent strike received",
|
|
"type": "string",
|
|
"format": "datetime"
|
|
}
|
|
}
|
|
},
|
|
"subjectReviewState": {
|
|
"type": "string",
|
|
"knownValues": [
|
|
"tools.ozone.moderation.defs#reviewOpen",
|
|
"tools.ozone.moderation.defs#reviewEscalated",
|
|
"tools.ozone.moderation.defs#reviewClosed",
|
|
"tools.ozone.moderation.defs#reviewNone"
|
|
]
|
|
},
|
|
"reviewOpen": {
|
|
"type": "token",
|
|
"description": "Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator"
|
|
},
|
|
"reviewEscalated": {
|
|
"type": "token",
|
|
"description": "Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator"
|
|
},
|
|
"reviewClosed": {
|
|
"type": "token",
|
|
"description": "Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator"
|
|
},
|
|
"reviewNone": {
|
|
"type": "token",
|
|
"description": "Moderator review status of a subject: Unnecessary. Indicates that the subject does not need a review at the moment but there is probably some moderation related metadata available for it"
|
|
},
|
|
"modEventTakedown": {
|
|
"type": "object",
|
|
"description": "Take down a subject permanently or temporarily",
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string"
|
|
},
|
|
"durationInHours": {
|
|
"type": "integer",
|
|
"description": "Indicates how long the takedown should be in effect before automatically expiring."
|
|
},
|
|
"acknowledgeAccountSubjects": {
|
|
"type": "boolean",
|
|
"description": "If true, all other reports on content authored by this account will be resolved (acknowledged)."
|
|
},
|
|
"policies": {
|
|
"type": "array",
|
|
"maxLength": 5,
|
|
"items": { "type": "string" },
|
|
"description": "Names/Keywords of the policies that drove the decision."
|
|
},
|
|
"severityLevel": {
|
|
"type": "string",
|
|
"description": "Severity level of the violation (e.g., 'sev-0', 'sev-1', 'sev-2', etc.)."
|
|
},
|
|
"targetServices": {
|
|
"type": "array",
|
|
"items": { "type": "string", "knownValues": ["appview", "pds"] },
|
|
"description": "List of services where the takedown should be applied. If empty or not provided, takedown is applied on all configured services."
|
|
},
|
|
"strikeCount": {
|
|
"type": "integer",
|
|
"description": "Number of strikes to assign to the user for this violation."
|
|
},
|
|
"strikeExpiresAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "When the strike should expire. If not provided, the strike never expires."
|
|
}
|
|
}
|
|
},
|
|
"modEventReverseTakedown": {
|
|
"type": "object",
|
|
"description": "Revert take down action on a subject",
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string",
|
|
"description": "Describe reasoning behind the reversal."
|
|
},
|
|
"policies": {
|
|
"type": "array",
|
|
"maxLength": 5,
|
|
"items": { "type": "string" },
|
|
"description": "Names/Keywords of the policy infraction for which takedown is being reversed."
|
|
},
|
|
"severityLevel": {
|
|
"type": "string",
|
|
"description": "Severity level of the violation. Usually set from the last policy infraction's severity."
|
|
},
|
|
"strikeCount": {
|
|
"type": "integer",
|
|
"description": "Number of strikes to subtract from the user's strike count. Usually set from the last policy infraction's severity."
|
|
}
|
|
}
|
|
},
|
|
"modEventResolveAppeal": {
|
|
"type": "object",
|
|
"description": "Resolve appeal on a subject",
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string",
|
|
"description": "Describe resolution."
|
|
}
|
|
}
|
|
},
|
|
"modEventComment": {
|
|
"type": "object",
|
|
"description": "Add a comment to a subject. An empty comment will clear any previously set sticky comment.",
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string"
|
|
},
|
|
"sticky": {
|
|
"type": "boolean",
|
|
"description": "Make the comment persistent on the subject"
|
|
}
|
|
}
|
|
},
|
|
"modEventReport": {
|
|
"type": "object",
|
|
"description": "Report a subject",
|
|
"required": ["reportType"],
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string"
|
|
},
|
|
"isReporterMuted": {
|
|
"type": "boolean",
|
|
"description": "Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject."
|
|
},
|
|
"reportType": {
|
|
"type": "ref",
|
|
"ref": "com.atproto.moderation.defs#reasonType"
|
|
}
|
|
}
|
|
},
|
|
"modEventLabel": {
|
|
"type": "object",
|
|
"description": "Apply/Negate labels on a subject",
|
|
"required": ["createLabelVals", "negateLabelVals"],
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string"
|
|
},
|
|
"createLabelVals": {
|
|
"type": "array",
|
|
"items": { "type": "string" }
|
|
},
|
|
"negateLabelVals": {
|
|
"type": "array",
|
|
"items": { "type": "string" }
|
|
},
|
|
"durationInHours": {
|
|
"type": "integer",
|
|
"description": "Indicates how long the label will remain on the subject. Only applies on labels that are being added."
|
|
}
|
|
}
|
|
},
|
|
"modEventPriorityScore": {
|
|
"type": "object",
|
|
"description": "Set priority score of the subject. Higher score means higher priority.",
|
|
"required": ["score"],
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string"
|
|
},
|
|
"score": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 100
|
|
}
|
|
}
|
|
},
|
|
"ageAssuranceEvent": {
|
|
"type": "object",
|
|
"description": "Age assurance info coming directly from users. Only works on DID subjects.",
|
|
"required": ["createdAt", "status", "attemptId"],
|
|
"properties": {
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "The date and time of this write operation."
|
|
},
|
|
"attemptId": {
|
|
"type": "string",
|
|
"description": "The unique identifier for this instance of the age assurance flow, in UUID format."
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"description": "The status of the Age Assurance process.",
|
|
"knownValues": ["unknown", "pending", "assured"]
|
|
},
|
|
"access": {
|
|
"type": "ref",
|
|
"ref": "app.bsky.ageassurance.defs#access"
|
|
},
|
|
"countryCode": {
|
|
"type": "string",
|
|
"description": "The ISO 3166-1 alpha-2 country code provided when beginning the Age Assurance flow."
|
|
},
|
|
"regionCode": {
|
|
"type": "string",
|
|
"description": "The ISO 3166-2 region code provided when beginning the Age Assurance flow."
|
|
},
|
|
"initIp": {
|
|
"type": "string",
|
|
"description": "The IP address used when initiating the AA flow."
|
|
},
|
|
"initUa": {
|
|
"type": "string",
|
|
"description": "The user agent used when initiating the AA flow."
|
|
},
|
|
"completeIp": {
|
|
"type": "string",
|
|
"description": "The IP address used when completing the AA flow."
|
|
},
|
|
"completeUa": {
|
|
"type": "string",
|
|
"description": "The user agent used when completing the AA flow."
|
|
}
|
|
}
|
|
},
|
|
"ageAssuranceOverrideEvent": {
|
|
"type": "object",
|
|
"description": "Age assurance status override by moderators. Only works on DID subjects.",
|
|
"required": ["comment", "status"],
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"description": "The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.",
|
|
"knownValues": ["assured", "reset", "blocked"]
|
|
},
|
|
"access": {
|
|
"type": "ref",
|
|
"ref": "app.bsky.ageassurance.defs#access"
|
|
},
|
|
"comment": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Comment describing the reason for the override."
|
|
}
|
|
}
|
|
},
|
|
"ageAssurancePurgeEvent": {
|
|
"type": "object",
|
|
"description": "Purges all age assurance events for the subject. Only works on DID subjects. Moderator-only.",
|
|
"required": ["comment"],
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Comment describing the reason for the purge."
|
|
}
|
|
}
|
|
},
|
|
"revokeAccountCredentialsEvent": {
|
|
"type": "object",
|
|
"description": "Account credentials revocation by moderators. Only works on DID subjects.",
|
|
"required": ["comment"],
|
|
"properties": {
|
|
"comment": {
|
|
"minLength": 1,
|
|
"type": "string",
|
|
"description": "Comment describing the reason for the revocation."
|
|
}
|
|
}
|
|
},
|
|
"modEventAcknowledge": {
|
|
"type": "object",
|
|
"properties": {
|
|
"comment": { "type": "string" },
|
|
"acknowledgeAccountSubjects": {
|
|
"type": "boolean",
|
|
"description": "If true, all other reports on content authored by this account will be resolved (acknowledged)."
|
|
}
|
|
}
|
|
},
|
|
"modEventEscalate": {
|
|
"type": "object",
|
|
"properties": {
|
|
"comment": { "type": "string" }
|
|
}
|
|
},
|
|
"modEventMute": {
|
|
"type": "object",
|
|
"description": "Mute incoming reports on a subject",
|
|
"required": ["durationInHours"],
|
|
"properties": {
|
|
"comment": { "type": "string" },
|
|
"durationInHours": {
|
|
"type": "integer",
|
|
"description": "Indicates how long the subject should remain muted."
|
|
}
|
|
}
|
|
},
|
|
"modEventUnmute": {
|
|
"type": "object",
|
|
"description": "Unmute action on a subject",
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string",
|
|
"description": "Describe reasoning behind the reversal."
|
|
}
|
|
}
|
|
},
|
|
"modEventMuteReporter": {
|
|
"type": "object",
|
|
"description": "Mute incoming reports from an account",
|
|
"properties": {
|
|
"comment": { "type": "string" },
|
|
"durationInHours": {
|
|
"type": "integer",
|
|
"description": "Indicates how long the account should remain muted. Falsy value here means a permanent mute."
|
|
}
|
|
}
|
|
},
|
|
"modEventUnmuteReporter": {
|
|
"type": "object",
|
|
"description": "Unmute incoming reports from an account",
|
|
"properties": {
|
|
"comment": {
|
|
"type": "string",
|
|
"description": "Describe reasoning behind the reversal."
|
|
}
|
|
}
|
|
},
|
|
"modEventEmail": {
|
|
"type": "object",
|
|
"description": "Keep a log of outgoing email to a user",
|
|
"required": ["subjectLine"],
|
|
"properties": {
|
|
"subjectLine": {
|
|
"type": "string",
|
|
"description": "The subject line of the email sent to the user."
|
|
},
|
|
"content": {
|
|
"type": "string",
|
|
"description": "The content of the email sent to the user."
|
|
},
|
|
"comment": {
|
|
"type": "string",
|
|
"description": "Additional comment about the outgoing comm."
|
|
},
|
|
"policies": {
|
|
"type": "array",
|
|
"maxLength": 5,
|
|
"items": { "type": "string" },
|
|
"description": "Names/Keywords of the policies that necessitated the email."
|
|
},
|
|
"severityLevel": {
|
|
"type": "string",
|
|
"description": "Severity level of the violation. Normally 'sev-1' that adds strike on repeat offense"
|
|
},
|
|
"strikeCount": {
|
|
"type": "integer",
|
|
"description": "Number of strikes to assign to the user for this violation. Normally 0 as an indicator of a warning and only added as a strike on a repeat offense."
|
|
},
|
|
"strikeExpiresAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "When the strike should expire. If not provided, the strike never expires."
|
|
},
|
|
"isDelivered": {
|
|
"type": "boolean",
|
|
"description": "Indicates whether the email was successfully delivered to the user's inbox."
|
|
}
|
|
}
|
|
},
|
|
"modEventDivert": {
|
|
"type": "object",
|
|
"description": "Divert a record's blobs to a 3rd party service for further scanning/tagging",
|
|
"properties": {
|
|
"comment": { "type": "string" }
|
|
}
|
|
},
|
|
"modEventTag": {
|
|
"type": "object",
|
|
"description": "Add/Remove a tag on a subject",
|
|
"required": ["add", "remove"],
|
|
"properties": {
|
|
"add": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "Tags to be added to the subject. If already exists, won't be duplicated."
|
|
},
|
|
"remove": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated."
|
|
},
|
|
"comment": {
|
|
"type": "string",
|
|
"description": "Additional comment about added/removed tags."
|
|
}
|
|
}
|
|
},
|
|
"accountEvent": {
|
|
"type": "object",
|
|
"description": "Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.",
|
|
"required": ["timestamp", "active"],
|
|
"properties": {
|
|
"comment": { "type": "string" },
|
|
"active": {
|
|
"type": "boolean",
|
|
"description": "Indicates that the account has a repository which can be fetched from the host that emitted this event."
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"knownValues": [
|
|
"unknown",
|
|
"deactivated",
|
|
"deleted",
|
|
"takendown",
|
|
"suspended",
|
|
"tombstoned"
|
|
]
|
|
},
|
|
"timestamp": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
}
|
|
}
|
|
},
|
|
"identityEvent": {
|
|
"type": "object",
|
|
"description": "Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.",
|
|
"required": ["timestamp"],
|
|
"properties": {
|
|
"comment": { "type": "string" },
|
|
"handle": { "type": "string", "format": "handle" },
|
|
"pdsHost": { "type": "string", "format": "uri" },
|
|
"tombstone": { "type": "boolean" },
|
|
"timestamp": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
}
|
|
}
|
|
},
|
|
"recordEvent": {
|
|
"type": "object",
|
|
"description": "Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.",
|
|
"required": ["timestamp", "op"],
|
|
"properties": {
|
|
"comment": { "type": "string" },
|
|
"op": {
|
|
"type": "string",
|
|
"knownValues": ["create", "update", "delete"]
|
|
},
|
|
"cid": { "type": "string", "format": "cid" },
|
|
"timestamp": { "type": "string", "format": "datetime" }
|
|
}
|
|
},
|
|
"scheduleTakedownEvent": {
|
|
"type": "object",
|
|
"description": "Logs a scheduled takedown action for an account.",
|
|
"properties": {
|
|
"comment": { "type": "string" },
|
|
"executeAt": { "type": "string", "format": "datetime" },
|
|
"executeAfter": { "type": "string", "format": "datetime" },
|
|
"executeUntil": { "type": "string", "format": "datetime" }
|
|
}
|
|
},
|
|
"cancelScheduledTakedownEvent": {
|
|
"type": "object",
|
|
"description": "Logs cancellation of a scheduled takedown action for an account.",
|
|
"properties": {
|
|
"comment": { "type": "string" }
|
|
}
|
|
},
|
|
"repoView": {
|
|
"type": "object",
|
|
"required": [
|
|
"did",
|
|
"handle",
|
|
"relatedRecords",
|
|
"indexedAt",
|
|
"moderation"
|
|
],
|
|
"properties": {
|
|
"did": { "type": "string", "format": "did" },
|
|
"handle": { "type": "string", "format": "handle" },
|
|
"email": { "type": "string" },
|
|
"relatedRecords": { "type": "array", "items": { "type": "unknown" } },
|
|
"indexedAt": { "type": "string", "format": "datetime" },
|
|
"moderation": { "type": "ref", "ref": "#moderation" },
|
|
"invitedBy": {
|
|
"type": "ref",
|
|
"ref": "com.atproto.server.defs#inviteCode"
|
|
},
|
|
"invitesDisabled": { "type": "boolean" },
|
|
"inviteNote": { "type": "string" },
|
|
"deactivatedAt": { "type": "string", "format": "datetime" },
|
|
"threatSignatures": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "ref",
|
|
"ref": "com.atproto.admin.defs#threatSignature"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"repoViewDetail": {
|
|
"type": "object",
|
|
"required": [
|
|
"did",
|
|
"handle",
|
|
"relatedRecords",
|
|
"indexedAt",
|
|
"moderation"
|
|
],
|
|
"properties": {
|
|
"did": { "type": "string", "format": "did" },
|
|
"handle": { "type": "string", "format": "handle" },
|
|
"email": { "type": "string" },
|
|
"relatedRecords": { "type": "array", "items": { "type": "unknown" } },
|
|
"indexedAt": { "type": "string", "format": "datetime" },
|
|
"moderation": { "type": "ref", "ref": "#moderationDetail" },
|
|
"labels": {
|
|
"type": "array",
|
|
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
|
|
},
|
|
"invitedBy": {
|
|
"type": "ref",
|
|
"ref": "com.atproto.server.defs#inviteCode"
|
|
},
|
|
"invites": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "ref",
|
|
"ref": "com.atproto.server.defs#inviteCode"
|
|
}
|
|
},
|
|
"invitesDisabled": { "type": "boolean" },
|
|
"inviteNote": { "type": "string" },
|
|
"emailConfirmedAt": { "type": "string", "format": "datetime" },
|
|
"deactivatedAt": { "type": "string", "format": "datetime" },
|
|
"threatSignatures": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "ref",
|
|
"ref": "com.atproto.admin.defs#threatSignature"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"repoViewNotFound": {
|
|
"type": "object",
|
|
"required": ["did"],
|
|
"properties": {
|
|
"did": { "type": "string", "format": "did" }
|
|
}
|
|
},
|
|
"recordView": {
|
|
"type": "object",
|
|
"required": [
|
|
"uri",
|
|
"cid",
|
|
"value",
|
|
"blobCids",
|
|
"indexedAt",
|
|
"moderation",
|
|
"repo"
|
|
],
|
|
"properties": {
|
|
"uri": { "type": "string", "format": "at-uri" },
|
|
"cid": { "type": "string", "format": "cid" },
|
|
"value": { "type": "unknown" },
|
|
"blobCids": {
|
|
"type": "array",
|
|
"items": { "type": "string", "format": "cid" }
|
|
},
|
|
"indexedAt": { "type": "string", "format": "datetime" },
|
|
"moderation": { "type": "ref", "ref": "#moderation" },
|
|
"repo": { "type": "ref", "ref": "#repoView" }
|
|
}
|
|
},
|
|
"recordViewDetail": {
|
|
"type": "object",
|
|
"required": [
|
|
"uri",
|
|
"cid",
|
|
"value",
|
|
"blobs",
|
|
"indexedAt",
|
|
"moderation",
|
|
"repo"
|
|
],
|
|
"properties": {
|
|
"uri": { "type": "string", "format": "at-uri" },
|
|
"cid": { "type": "string", "format": "cid" },
|
|
"value": { "type": "unknown" },
|
|
"blobs": {
|
|
"type": "array",
|
|
"items": { "type": "ref", "ref": "#blobView" }
|
|
},
|
|
"labels": {
|
|
"type": "array",
|
|
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
|
|
},
|
|
"indexedAt": { "type": "string", "format": "datetime" },
|
|
"moderation": { "type": "ref", "ref": "#moderationDetail" },
|
|
"repo": { "type": "ref", "ref": "#repoView" }
|
|
}
|
|
},
|
|
"recordViewNotFound": {
|
|
"type": "object",
|
|
"required": ["uri"],
|
|
"properties": {
|
|
"uri": { "type": "string", "format": "at-uri" }
|
|
}
|
|
},
|
|
"moderation": {
|
|
"type": "object",
|
|
"properties": {
|
|
"subjectStatus": { "type": "ref", "ref": "#subjectStatusView" }
|
|
}
|
|
},
|
|
"moderationDetail": {
|
|
"type": "object",
|
|
"properties": {
|
|
"subjectStatus": {
|
|
"type": "ref",
|
|
"ref": "#subjectStatusView"
|
|
}
|
|
}
|
|
},
|
|
"blobView": {
|
|
"type": "object",
|
|
"required": ["cid", "mimeType", "size", "createdAt"],
|
|
"properties": {
|
|
"cid": { "type": "string", "format": "cid" },
|
|
"mimeType": { "type": "string" },
|
|
"size": { "type": "integer" },
|
|
"createdAt": { "type": "string", "format": "datetime" },
|
|
"details": {
|
|
"type": "union",
|
|
"refs": ["#imageDetails", "#videoDetails"]
|
|
},
|
|
"moderation": { "type": "ref", "ref": "#moderation" }
|
|
}
|
|
},
|
|
"imageDetails": {
|
|
"type": "object",
|
|
"required": ["width", "height"],
|
|
"properties": {
|
|
"width": { "type": "integer" },
|
|
"height": { "type": "integer" }
|
|
}
|
|
},
|
|
"videoDetails": {
|
|
"type": "object",
|
|
"required": ["width", "height", "length"],
|
|
"properties": {
|
|
"width": { "type": "integer" },
|
|
"height": { "type": "integer" },
|
|
"length": { "type": "integer" }
|
|
}
|
|
},
|
|
"accountHosting": {
|
|
"type": "object",
|
|
"required": ["status"],
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"knownValues": [
|
|
"takendown",
|
|
"suspended",
|
|
"deleted",
|
|
"deactivated",
|
|
"unknown"
|
|
]
|
|
},
|
|
"updatedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"deletedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"deactivatedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"reactivatedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
}
|
|
}
|
|
},
|
|
"recordHosting": {
|
|
"type": "object",
|
|
"required": ["status"],
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"knownValues": ["deleted", "unknown"]
|
|
},
|
|
"updatedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
},
|
|
"deletedAt": {
|
|
"type": "string",
|
|
"format": "datetime"
|
|
}
|
|
}
|
|
},
|
|
"reporterStats": {
|
|
"type": "object",
|
|
"required": [
|
|
"did",
|
|
"accountReportCount",
|
|
"recordReportCount",
|
|
"reportedAccountCount",
|
|
"reportedRecordCount",
|
|
"takendownAccountCount",
|
|
"takendownRecordCount",
|
|
"labeledAccountCount",
|
|
"labeledRecordCount"
|
|
],
|
|
"properties": {
|
|
"did": {
|
|
"type": "string",
|
|
"format": "did"
|
|
},
|
|
"accountReportCount": {
|
|
"type": "integer",
|
|
"description": "The total number of reports made by the user on accounts."
|
|
},
|
|
"recordReportCount": {
|
|
"type": "integer",
|
|
"description": "The total number of reports made by the user on records."
|
|
},
|
|
"reportedAccountCount": {
|
|
"type": "integer",
|
|
"description": "The total number of accounts reported by the user."
|
|
},
|
|
"reportedRecordCount": {
|
|
"type": "integer",
|
|
"description": "The total number of records reported by the user."
|
|
},
|
|
"takendownAccountCount": {
|
|
"type": "integer",
|
|
"description": "The total number of accounts taken down as a result of the user's reports."
|
|
},
|
|
"takendownRecordCount": {
|
|
"type": "integer",
|
|
"description": "The total number of records taken down as a result of the user's reports."
|
|
},
|
|
"labeledAccountCount": {
|
|
"type": "integer",
|
|
"description": "The total number of accounts labeled as a result of the user's reports."
|
|
},
|
|
"labeledRecordCount": {
|
|
"type": "integer",
|
|
"description": "The total number of records labeled as a result of the user's reports."
|
|
}
|
|
}
|
|
},
|
|
"modTool": {
|
|
"type": "object",
|
|
"description": "Moderation tool information for tracing the source of the action",
|
|
"required": ["name"],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Name/identifier of the source (e.g., 'automod', 'ozone/workspace')"
|
|
},
|
|
"meta": {
|
|
"type": "unknown",
|
|
"description": "Additional arbitrary metadata about the source"
|
|
}
|
|
}
|
|
},
|
|
"timelineEventPlcCreate": {
|
|
"type": "token",
|
|
"description": "Moderation event timeline event for a PLC create operation"
|
|
},
|
|
"timelineEventPlcOperation": {
|
|
"type": "token",
|
|
"description": "Moderation event timeline event for generic PLC operation"
|
|
},
|
|
"timelineEventPlcTombstone": {
|
|
"type": "token",
|
|
"description": "Moderation event timeline event for a PLC tombstone operation"
|
|
},
|
|
"scheduledActionView": {
|
|
"type": "object",
|
|
"description": "View of a scheduled moderation action",
|
|
"required": ["id", "action", "did", "createdBy", "createdAt", "status"],
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"description": "Auto-incrementing row ID"
|
|
},
|
|
"action": {
|
|
"type": "string",
|
|
"knownValues": ["takedown"],
|
|
"description": "Type of action to be executed"
|
|
},
|
|
"eventData": {
|
|
"type": "unknown",
|
|
"description": "Serialized event object that will be propagated to the event when performed"
|
|
},
|
|
"did": {
|
|
"type": "string",
|
|
"format": "did",
|
|
"description": "Subject DID for the action"
|
|
},
|
|
"executeAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "Exact time to execute the action"
|
|
},
|
|
"executeAfter": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "Earliest time to execute the action (for randomized scheduling)"
|
|
},
|
|
"executeUntil": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "Latest time to execute the action (for randomized scheduling)"
|
|
},
|
|
"randomizeExecution": {
|
|
"type": "boolean",
|
|
"description": "Whether execution time should be randomized within the specified range"
|
|
},
|
|
"createdBy": {
|
|
"type": "string",
|
|
"format": "did",
|
|
"description": "DID of the user who created this scheduled action"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "When the scheduled action was created"
|
|
},
|
|
"updatedAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "When the scheduled action was last updated"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"knownValues": ["pending", "executed", "cancelled", "failed"],
|
|
"description": "Current status of the scheduled action"
|
|
},
|
|
"lastExecutedAt": {
|
|
"type": "string",
|
|
"format": "datetime",
|
|
"description": "When the action was last attempted to be executed"
|
|
},
|
|
"lastFailureReason": {
|
|
"type": "string",
|
|
"description": "Reason for the last execution failure"
|
|
},
|
|
"executionEventId": {
|
|
"type": "integer",
|
|
"description": "ID of the moderation event created when action was successfully executed"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|