UNPKG

@imigueldiaz/mongodb-labeler

Version:

A MongoDB-based labeling system for content moderation with cryptographic signing

122 lines (87 loc) 3.43 kB
# AT Protocol Technical Cheatsheet ## Quick Reference ### Core Components - **DIDs (Decentralized Identifiers)**: Persistent account identifiers - **CIDs (Content Identifiers)**: Content-addressed identifiers for data - **Labels**: Metadata tags for accounts and content ## DIDs - Decentralized Identifiers ### Supported DID Methods - `did:web`: Based on HTTPS/DNS, hostname-level only - `did:plc`: Bluesky's custom DID method ### DID Syntax Rules - Starts with `did:` - Case-sensitive - Uses ASCII subset: `A-Z`, `a-z`, `0-9`, `._:%-` - Method segment: lowercase letters followed by `:` - 2KB maximum length - No query (`?`) or fragment (`#`) parts allowed ### DID Document Components - **Handle**: Found in `alsoKnownAs` array with `at://` scheme - **Signing Key**: In `verificationMethod` array, ID ends with `#atproto` - **PDS Location**: In `service` array, ID ends with `#atproto_pds` ## Labels ### Label Structure ```json { "ver": 1, // Version (required) "src": "did:example:123", // Source DID (required) "uri": "at://...", // Subject URI (required) "cid": "bafy...", // Optional specific version "val": "label-value", // Label value (required, max 128 bytes) "neg": false, // Negation flag (optional) "cts": "timestamp", // Creation timestamp (required) "exp": "timestamp" // Expiration (optional) } ``` ### Label Value Guidelines - Use lowercase kebab-case (e.g., `label-name`) - ASCII letters only (a-z) - No punctuation except internal hyphens - Maximum 128 bytes length - Prefix with `!` for system-level labels ### Label Distribution - Subscribe via WebSocket: `com.atproto.label.subscribeLabels` - Query endpoint: `com.atproto.label.queryLabels` - Headers: - Request: `atproto-accept-labelers` - Response: `atproto-content-labelers` ## CIDs (Content Identifiers) ### CIDv1 Structure ```text <cidv1> ::= <multibase-prefix><version><content-type><multihash> ``` ### Components - **Multibase**: Encoding prefix for string representation - **Version**: CID format version (0x01 for CIDv1) - **Content-type**: Multicodec identifying content format - **Multihash**: Content hash with hash function identifier ### Formats - Binary format for compact storage - Stringified format with multibase prefix for transport - Human-readable format for debugging ### CIDv0 vs CIDv1 - CIDv0: Legacy format, always base58btc + dag-pb + sha256 - CIDv1: Flexible format with explicit version and content type ## Best Practices 1. **DIDs** - Keep DIDs short (<64 chars if possible) - Validate handle bidirectionally - Always verify PDS service endpoints 2. **Labels** - Use descriptive but concise label values - Follow kebab-case convention - Implement proper signature validation 3. **CIDs** - Use CIDv1 for new implementations - Choose appropriate multibase for transport context - Validate format before decoding ## Common Pitfalls - Not validating DID syntax and components - Using unsupported label characters or formats - Incorrect handling of CID versions and encodings - Missing signature verification for labels - Not checking handle <-> DID bidirectional resolution ## Additional Resources - [AT Protocol Specs](https://atproto.com/specs) - [did:plc Method Spec](https://github.com/did-method-plc/did-method-plc) - [Multicodec Table](https://github.com/multiformats/multicodec/blob/master/table.csv)