{
  "version": "1.7.0",
  "generated": "2026-06-30T07:34:53.806Z",
  "totalEvents": 103,
  "baseSchema": {
    "fields": [
      {
        "name": "actor_id",
        "type": "string",
        "required": false,
        "description": ""
      },
      {
        "name": "actor_type",
        "type": "string",
        "required": false,
        "description": "",
        "pattern": "^[a-z][a-z0-9_]*$"
      },
      {
        "name": "created_at",
        "type": "string",
        "required": false,
        "description": "",
        "format": "date-time"
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "description": ""
      },
      {
        "name": "event_id",
        "type": "string",
        "required": true,
        "description": "",
        "format": "uuid"
      },
      {
        "name": "id",
        "type": "string",
        "required": false,
        "description": "",
        "format": "uuid"
      },
      {
        "name": "metadata",
        "type": "object",
        "required": false,
        "description": ""
      },
      {
        "name": "occurred_at",
        "type": "string",
        "required": false,
        "description": "",
        "format": "date-time"
      },
      {
        "name": "published_at",
        "type": "string",
        "required": false,
        "description": "",
        "format": "date-time"
      },
      {
        "name": "recipients",
        "type": "array",
        "required": false,
        "description": ""
      },
      {
        "name": "source",
        "type": "string",
        "required": true,
        "description": "",
        "pattern": "^[a-z][a-z0-9_-]*$"
      },
      {
        "name": "status",
        "type": "string",
        "required": false,
        "description": "",
        "enumValues": [
          "pending",
          "processed",
          "failed"
        ]
      },
      {
        "name": "subject_id",
        "type": "string",
        "required": false,
        "description": ""
      },
      {
        "name": "subject_type",
        "type": "string",
        "required": false,
        "description": "",
        "pattern": "^[a-z][a-z0-9_]*$"
      },
      {
        "name": "tenant_id",
        "type": "string",
        "required": false,
        "description": ""
      },
      {
        "name": "tenant_type",
        "type": "string",
        "required": false,
        "description": "",
        "pattern": "^[a-z][a-z0-9_]*$"
      },
      {
        "name": "type",
        "type": "string",
        "required": true,
        "description": "",
        "pattern": "^[a-z][a-z0-9_]*(?:\\.[a-z][a-z0-9_]*)+$"
      }
    ]
  },
  "domains": {
    "auth": {
      "description": "Unified identity, credential, and session lifecycle events. Single family auth.user.* discriminated by user_type (creator | consumer). Also covers api_key and session_key credentials.",
      "events": {
        "auth.user.registered": {
          "description": "Emitted when a new user (creator or consumer) registers. Triggers FREE subscription when user_type is creator. user_id is the stable Creator identity reference; wallet_address is optional because wallet materialization can happen later.",
          "version": "1.2.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-subscription",
            "fabric-analytics",
            "fabric-notification"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "email",
              "registration_method"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "The stable Creator identity reference owned by fabric-auth. Downstream services should store this user_id as the cross-service identity reference and must not require wallet state at registration time.",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype — creator (direct FabricBloc customer) or consumer (end-user of a Client's product). Enum is extensible for future identity types.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "email",
                "type": "string",
                "required": true,
                "description": "User's email address",
                "format": "email"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": false,
                "description": "Optional Ethereum wallet address. Omitted when Creator registration completes before wallet materialization; later wallet/account lifecycle events carry wallet state.",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "registration_method",
                "type": "string",
                "required": true,
                "description": "How the user registered",
                "enumValues": [
                  "email",
                  "google",
                  "github",
                  "wallet",
                  "magic_link"
                ]
              },
              {
                "name": "referral_code",
                "type": "string",
                "required": false,
                "description": "Optional referral code used during registration"
              },
              {
                "name": "registered_at",
                "type": "string",
                "required": false,
                "description": "ISO 8601 timestamp of registration",
                "format": "date-time"
              },
              {
                "name": "ip_address",
                "type": "string",
                "required": false,
                "description": "IP address of registration request (optional)"
              },
              {
                "name": "user_agent",
                "type": "string",
                "required": false,
                "description": "User agent of registration request (optional)"
              }
            ]
          }
        },
        "auth.user.deleted": {
          "description": "Emitted when a user (creator or consumer) is soft-deleted. When creator, triggers subscription cancellation and wallet cleanup; when consumer, triggers wallet soft-delete only.",
          "version": "1.1.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-subscription",
            "fabric-wallet",
            "fabric-analytics"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "Unique user identifier",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype — creator or consumer. Enum is extensible for future identity types.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "email",
                "type": "string",
                "required": false,
                "description": "User's email address (for audit)",
                "format": "email"
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Reason for account deletion (optional)"
              },
              {
                "name": "deleted_by",
                "type": "string",
                "required": false,
                "description": "ID of user/admin who initiated deletion (optional)"
              },
              {
                "name": "deleted_at",
                "type": "string",
                "required": false,
                "description": "ISO 8601 timestamp of deletion",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.user.auth_method_added": {
          "description": "Emitted when a user adds an authentication method (social login, passkey, wallet, MFA).",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "method_type",
              "added_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "Unique user identifier",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype — creator or consumer. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "method_type",
                "type": "string",
                "required": true,
                "description": "Authentication method added",
                "enumValues": [
                  "email",
                  "google",
                  "github",
                  "wallet",
                  "discord",
                  "telegram",
                  "magic_link",
                  "passkey",
                  "mfa_totp",
                  "mfa_sms"
                ]
              },
              {
                "name": "method_identifier",
                "type": "string",
                "required": false,
                "description": "Opaque identifier for the method (e.g., OAuth subject, wallet address, passkey credential id)"
              },
              {
                "name": "added_via",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "social_login",
                  "wallet_connection",
                  "admin_added"
                ]
              },
              {
                "name": "is_primary",
                "type": "boolean",
                "required": false,
                "description": "Whether this method is now the user's primary login method"
              },
              {
                "name": "verified",
                "type": "boolean",
                "required": false,
                "description": ""
              },
              {
                "name": "verification_required",
                "type": "boolean",
                "required": false,
                "description": ""
              },
              {
                "name": "added_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "metadata",
                "type": "object",
                "required": false,
                "description": "Method-specific metadata (e.g., oauth_provider, wallet_type, device_fingerprint)"
              }
            ]
          }
        },
        "auth.user.auth_method_removed": {
          "description": "Emitted when a user removes an authentication method. Downstream services may need to revoke sessions.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "method_type",
              "removed_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "method_type",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "email",
                  "google",
                  "github",
                  "wallet",
                  "discord",
                  "telegram",
                  "magic_link",
                  "passkey",
                  "mfa_totp",
                  "mfa_sms"
                ]
              },
              {
                "name": "method_identifier",
                "type": "string",
                "required": false,
                "description": "Opaque identifier of the removed method"
              },
              {
                "name": "removed_via",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "admin_removed",
                  "security_enforced"
                ]
              },
              {
                "name": "had_primary",
                "type": "boolean",
                "required": false,
                "description": "Whether the removed method was the user's primary login"
              },
              {
                "name": "remaining_methods",
                "type": "integer",
                "required": false,
                "description": "Number of auth methods remaining after removal"
              },
              {
                "name": "removed_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.user.consent_updated": {
          "description": "Emitted when a user updates a privacy or legal consent (GDPR, marketing, data retention).",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "consent_type",
              "consent_given",
              "updated_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "consent_type",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "marketing_emails",
                  "analytics_tracking",
                  "third_party_sharing",
                  "wallet_data_collection",
                  "transaction_data_usage",
                  "profile_data_sharing",
                  "notification_push",
                  "notification_email",
                  "notification_sms",
                  "data_retention",
                  "cross_device_tracking",
                  "personalization"
                ]
              },
              {
                "name": "consent_given",
                "type": "boolean",
                "required": true,
                "description": ""
              },
              {
                "name": "previous_consent",
                "type": "boolean",
                "required": false,
                "description": ""
              },
              {
                "name": "consent_scope",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "global",
                  "service_specific",
                  "feature_specific"
                ]
              },
              {
                "name": "service_scope",
                "type": "string",
                "required": false,
                "description": "Service identifier when scope is service_specific"
              },
              {
                "name": "consent_version",
                "type": "string",
                "required": false,
                "description": "Version of the consent text/policy the user agreed to"
              },
              {
                "name": "legal_basis",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "consent",
                  "contract",
                  "legitimate_interest",
                  "legal_obligation",
                  "vital_interest",
                  "public_task"
                ]
              },
              {
                "name": "consent_proof",
                "type": "string",
                "required": false,
                "description": "Opaque proof-of-consent reference (e.g., signed token, hash)"
              },
              {
                "name": "updated_via",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "legal_requirement",
                  "policy_update",
                  "admin_action"
                ]
              },
              {
                "name": "withdrawal_deadline",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "ip_address",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "user_agent",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "updated_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.user.password_changed": {
          "description": "SECURITY-RELEVANT. Emitted on password change. Downstream services must revoke sessions issued before changed_at.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "change_method",
              "changed_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "change_method",
                "type": "string",
                "required": true,
                "description": "How the password was changed — self-service in settings, email reset flow, admin reset, or forced by security policy",
                "enumValues": [
                  "self_service",
                  "password_reset",
                  "admin_reset",
                  "security_enforced"
                ]
              },
              {
                "name": "ip_address",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "user_agent",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "changed_at",
                "type": "string",
                "required": true,
                "description": "ISO 8601 timestamp — tokens issued before this must be revoked",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.user.email_verified": {
          "description": "Emitted when a user completes email verification. Unlocks email-gated features and notification channels.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-notification"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "email",
              "verified_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "email",
                "type": "string",
                "required": true,
                "description": "",
                "format": "email"
              },
              {
                "name": "verification_method",
                "type": "string",
                "required": false,
                "description": "How verification was performed",
                "enumValues": [
                  "magic_link",
                  "verification_code",
                  "oauth_provider"
                ]
              },
              {
                "name": "verified_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.user.mfa_enabled": {
          "description": "Emitted when a user enables multi-factor authentication (also known as 2FA).",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "factor_type",
              "enabled_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "factor_type",
                "type": "string",
                "required": true,
                "description": "Second-factor mechanism enabled",
                "enumValues": [
                  "totp",
                  "sms",
                  "webauthn",
                  "passkey",
                  "backup_codes"
                ]
              },
              {
                "name": "is_primary_factor",
                "type": "boolean",
                "required": false,
                "description": "True if this is the user's first MFA method; false if adding an additional factor"
              },
              {
                "name": "enabled_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.user.mfa_disabled": {
          "description": "SECURITY-RELEVANT. Emitted when a user disables an MFA method. Downstream services may lower trust tier.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-notification"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "user_type",
              "factor_type",
              "disabled_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "factor_type",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "totp",
                  "sms",
                  "webauthn",
                  "passkey",
                  "backup_codes"
                ]
              },
              {
                "name": "disabled_via",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "recovery_flow",
                  "admin_action",
                  "security_enforced"
                ]
              },
              {
                "name": "remaining_factors",
                "type": "integer",
                "required": false,
                "description": "Number of MFA methods still active after this change"
              },
              {
                "name": "disabled_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.api_key.created": {
          "description": "Emitted when an API key credential is minted for a project.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-subscription",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "api_key_id",
              "project_id",
              "creator_id",
              "created_at"
            ],
            "fields": [
              {
                "name": "api_key_id",
                "type": "string",
                "required": true,
                "description": "Unique API key identifier (NEVER the secret)",
                "format": "uuid"
              },
              {
                "name": "project_id",
                "type": "string",
                "required": true,
                "description": "Account-level project this key is scoped to",
                "format": "uuid"
              },
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "user_id of the creator that owns the project",
                "format": "uuid"
              },
              {
                "name": "name",
                "type": "string",
                "required": false,
                "description": "Human-readable label"
              },
              {
                "name": "scopes",
                "type": "array<string>",
                "required": false,
                "description": "Capability scopes granted to this key"
              },
              {
                "name": "environment",
                "type": "string",
                "required": false,
                "description": "Whether this key operates against test or live environment",
                "enumValues": [
                  "test",
                  "live"
                ]
              },
              {
                "name": "expires_at",
                "type": "string",
                "required": false,
                "description": "Optional expiration timestamp — omitted means no expiry",
                "format": "date-time"
              },
              {
                "name": "created_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.api_key.rotated": {
          "description": "Emitted when an API key is rotated. Downstream caches keyed on secret hashes must invalidate.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "api_key_id",
              "project_id",
              "creator_id",
              "rotated_at"
            ],
            "fields": [
              {
                "name": "api_key_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "project_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "rotated_via",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "scheduled_rotation",
                  "security_incident",
                  "admin_action"
                ]
              },
              {
                "name": "previous_prefix",
                "type": "string",
                "required": false,
                "description": "First N characters of the old key for audit trail (never the full secret)"
              },
              {
                "name": "rotated_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.api_key.revoked": {
          "description": "SECURITY-CRITICAL. Emitted when an API key is revoked. Downstream services must immediately invalidate cached entries.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "api_key_id",
              "project_id",
              "creator_id",
              "revoked_via",
              "revoked_at"
            ],
            "fields": [
              {
                "name": "api_key_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "project_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "revoked_via",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "project_deleted",
                  "creator_deleted",
                  "security_incident",
                  "admin_action",
                  "compliance_hold"
                ]
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional free-text reason for audit"
              },
              {
                "name": "revoked_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.api_key.expired": {
          "description": "Emitted when an API key passes its expires_at timestamp.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "api_key_id",
              "project_id",
              "creator_id",
              "expired_at"
            ],
            "fields": [
              {
                "name": "api_key_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "project_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "expired_at",
                "type": "string",
                "required": true,
                "description": "The expires_at value the key passed",
                "format": "date-time"
              },
              {
                "name": "detected_at",
                "type": "string",
                "required": false,
                "description": "When fabric-auth observed the expiry (may be later than expired_at if detected by a sweep job)",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.session_key.created": {
          "description": "Emitted when a session key is minted for delegated MPC signing. fabric-wallet provisions the signing policy.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-wallet"
          ],
          "criticality": "critical",
          "retentionDays": 365,
          "payload": {
            "required": [
              "session_key_id",
              "user_id",
              "user_type",
              "smart_account_address",
              "chain_id",
              "expires_at",
              "created_at"
            ],
            "fields": [
              {
                "name": "session_key_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User the session key signs on behalf of",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype of the session-key owner. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "delegate_address",
                "type": "string",
                "required": false,
                "description": "Address of the delegated signer (session key public address)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "policy",
                "type": "object",
                "required": false,
                "description": "Signing policy — allowed targets, selectors, value limits, daily budgets"
              },
              {
                "name": "expires_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "created_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "auth.session_key.revoked": {
          "description": "SECURITY-CRITICAL. Emitted when a session key is revoked. fabric-wallet must immediately invalidate cached signing policy.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-wallet"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "session_key_id",
              "user_id",
              "user_type",
              "revoked_via",
              "revoked_at"
            ],
            "fields": [
              {
                "name": "session_key_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_type",
                "type": "string",
                "required": true,
                "description": "Identity subtype. Enum is extensible.",
                "enumValues": [
                  "creator",
                  "consumer"
                ]
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "delegate_address",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": false,
                "description": ""
              },
              {
                "name": "revoked_via",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "expired",
                  "policy_exceeded",
                  "security_incident",
                  "admin_action"
                ]
              },
              {
                "name": "revoked_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        }
      }
    },
    "account": {
      "description": "Platform account lifecycle — projects (creator workspaces) and account settings. Separate from identity (auth domain).",
      "events": {
        "account.project.created": {
          "description": "Emitted when a creator provisions a new project workspace. fabric-subscription may track per-tier project counts.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-subscription",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "project_id",
              "creator_id",
              "name",
              "created_at"
            ],
            "fields": [
              {
                "name": "project_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "user_id of the creator that owns this project",
                "format": "uuid"
              },
              {
                "name": "name",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "slug",
                "type": "string",
                "required": false,
                "description": "URL-safe project identifier"
              },
              {
                "name": "environment",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "test",
                  "live"
                ]
              },
              {
                "name": "description",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "created_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "account.project.updated": {
          "description": "Emitted when a project's mutable metadata changes.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-analytics"
          ],
          "criticality": "medium",
          "retentionDays": 365,
          "payload": {
            "required": [
              "project_id",
              "creator_id",
              "changed_fields",
              "updated_at"
            ],
            "fields": [
              {
                "name": "project_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "changed_fields",
                "type": "array<string>",
                "required": true,
                "description": "List of field names that were modified (e.g., [\"name\", \"branding.primary_color\"])"
              },
              {
                "name": "updated_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "account.project.deleted": {
          "description": "Emitted when a project is soft-deleted. Downstream services must cascade: revoke API keys, soft-delete consumers, stop quota accounting.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-subscription",
            "fabric-analytics"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "project_id",
              "creator_id",
              "deleted_via",
              "deleted_at"
            ],
            "fields": [
              {
                "name": "project_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "deleted_via",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "creator_deleted",
                  "admin_action",
                  "compliance_hold"
                ]
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "deleted_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "account.settings.updated": {
          "description": "Emitted when creator account-level settings change (profile, preferences, branding, notifications). Replaces user.profile.updated.",
          "version": "1.0.0",
          "producer": "fabric-auth",
          "consumers": [
            "fabric-analytics",
            "fabric-notification"
          ],
          "criticality": "medium",
          "retentionDays": 365,
          "payload": {
            "required": [
              "creator_id",
              "settings_category",
              "changed_fields",
              "updated_at"
            ],
            "fields": [
              {
                "name": "creator_id",
                "type": "string",
                "required": true,
                "description": "user_id of the creator whose account settings changed",
                "format": "uuid"
              },
              {
                "name": "settings_category",
                "type": "string",
                "required": true,
                "description": "Which category of settings was updated",
                "enumValues": [
                  "profile",
                  "preferences",
                  "branding",
                  "notification_preferences",
                  "billing_contact",
                  "security"
                ]
              },
              {
                "name": "changed_fields",
                "type": "array<string>",
                "required": true,
                "description": ""
              },
              {
                "name": "updated_via",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "user_initiated",
                  "admin_action",
                  "oauth_sync"
                ]
              },
              {
                "name": "updated_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        }
      }
    },
    "subscription": {
      "description": "Subscription, billing, quota, and prepaid balance lifecycle events",
      "events": {
        "subscription.created": {
          "description": "Event triggered when a new subscription is created",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "wallet_address",
              "tier",
              "amount_paid",
              "expires_at",
              "tx_hash",
              "block_number",
              "chain_id",
              "timestamp"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "amount_paid",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "expires_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "timestamp",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription (nullable for personal accounts)",
                "format": "uuid"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key used for this action (nullable for direct user actions)",
                "format": "uuid"
              }
            ]
          }
        },
        "subscription.activated": {
          "description": "Event triggered when subscription becomes active",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "tier",
              "billing_period_start",
              "billing_period_end",
              "activated_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Internal subscription ID",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User who owns the subscription",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription (nullable for personal accounts)",
                "format": "uuid"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "Subscription tier",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "quotas",
                "type": "object",
                "required": false,
                "description": "Quota limits for this tier"
              },
              {
                "name": "billing_period_start",
                "type": "string",
                "required": true,
                "description": "Start of billing period",
                "format": "date-time"
              },
              {
                "name": "billing_period_end",
                "type": "string",
                "required": true,
                "description": "End of billing period (subscription expiry)",
                "format": "date-time"
              },
              {
                "name": "is_renewal",
                "type": "boolean",
                "required": false,
                "description": "True if this is a renewal, false if new subscription"
              },
              {
                "name": "previous_tier",
                "type": "string",
                "required": false,
                "description": "Previous tier if upgrade/downgrade",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "created_from_tx",
                "type": "string",
                "required": false,
                "description": "Transaction hash that triggered this activation (reference only)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "activated_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when subscription was activated",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.cancelled": {
          "description": "Event triggered when subscription is cancelled",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "tier",
              "reason",
              "cancelled_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Internal subscription ID",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User who cancelled",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription",
                "format": "uuid"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "Tier that was cancelled",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "reason",
                "type": "string",
                "required": true,
                "description": "Reason for cancellation",
                "enumValues": [
                  "user_requested",
                  "payment_failed",
                  "admin_action",
                  "account_deleted",
                  "fraud"
                ]
              },
              {
                "name": "cancellation_type",
                "type": "string",
                "required": false,
                "description": "Whether cancellation is immediate or at end of billing period",
                "enumValues": [
                  "immediate",
                  "end_of_period"
                ]
              },
              {
                "name": "effective_at",
                "type": "string",
                "required": false,
                "description": "When cancellation takes effect",
                "format": "date-time"
              },
              {
                "name": "refund_issued",
                "type": "boolean",
                "required": false,
                "description": "Whether a refund was issued"
              },
              {
                "name": "refund_amount",
                "type": "string",
                "required": false,
                "description": "Refund amount if issued (in smallest unit)",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "feedback",
                "type": "string",
                "required": false,
                "description": "User feedback on why they cancelled"
              },
              {
                "name": "cancelled_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when cancellation was initiated",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.renewed": {
          "description": "Event triggered when subscription is renewed",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "wallet_address",
              "tier",
              "months",
              "new_expires_at",
              "amount_paid",
              "tx_hash",
              "block_number",
              "chain_id",
              "renewed_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "months",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "old_expires_at",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "new_expires_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "amount_paid",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "renewed_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.upgraded": {
          "description": "Event triggered when subscription tier is upgraded",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "old_tier",
              "new_tier",
              "upgraded_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Internal subscription ID",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User who upgraded",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription",
                "format": "uuid"
              },
              {
                "name": "old_tier",
                "type": "string",
                "required": true,
                "description": "Previous tier",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "new_tier",
                "type": "string",
                "required": true,
                "description": "New tier after upgrade",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "new_quotas",
                "type": "object",
                "required": false,
                "description": "Updated quota limits for new tier"
              },
              {
                "name": "prorated_amount",
                "type": "string",
                "required": false,
                "description": "Prorated amount charged for upgrade (in smallest unit)",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "effective_at",
                "type": "string",
                "required": false,
                "description": "When new tier becomes effective",
                "format": "date-time"
              },
              {
                "name": "triggered_by_tx",
                "type": "string",
                "required": false,
                "description": "Transaction hash that triggered upgrade payment (if applicable)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "upgraded_at",
                "type": "string",
                "required": true,
                "description": "Timestamp of upgrade",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.downgraded": {
          "description": "Event triggered when subscription tier is downgraded",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "old_tier",
              "new_tier",
              "effective_at",
              "downgraded_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Internal subscription ID",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User who downgraded",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription",
                "format": "uuid"
              },
              {
                "name": "old_tier",
                "type": "string",
                "required": true,
                "description": "Previous tier",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "new_tier",
                "type": "string",
                "required": true,
                "description": "New tier after downgrade",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "new_quotas",
                "type": "object",
                "required": false,
                "description": "Updated quota limits for new tier"
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Reason for downgrade",
                "enumValues": [
                  "user_requested",
                  "payment_failed",
                  "admin_action"
                ]
              },
              {
                "name": "effective_at",
                "type": "string",
                "required": true,
                "description": "When new tier becomes effective (usually end of billing period)",
                "format": "date-time"
              },
              {
                "name": "downgraded_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when downgrade was initiated",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.tier_updated": {
          "description": "Event triggered when subscription tier changes (generic tier transition, superset of upgrade/downgrade)",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "old_tier",
              "new_tier",
              "reason",
              "updated_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "old_tier",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "new_tier",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "reason",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "upgrade",
                  "downgrade",
                  "expired",
                  "admin_override"
                ]
              },
              {
                "name": "updated_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.expired": {
          "description": "Event triggered when subscription expires",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "tier",
              "expired_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Internal subscription ID",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User whose subscription expired",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription",
                "format": "uuid"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "Tier that expired",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "fallback_tier",
                "type": "string",
                "required": false,
                "description": "Tier user falls back to after expiration",
                "enumValues": [
                  "FREE"
                ]
              },
              {
                "name": "billing_period_start",
                "type": "string",
                "required": false,
                "description": "Start of the expired billing period",
                "format": "date-time"
              },
              {
                "name": "billing_period_end",
                "type": "string",
                "required": false,
                "description": "End of the expired billing period",
                "format": "date-time"
              },
              {
                "name": "renewal_attempts",
                "type": "integer",
                "required": false,
                "description": "Number of failed renewal attempts before expiration"
              },
              {
                "name": "expired_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when subscription expired",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.past_due": {
          "description": "Event triggered when subscription payment is past due",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "tier",
              "amount_due",
              "past_due_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Internal subscription ID",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User whose subscription is past due",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription",
                "format": "uuid"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "Current subscription tier",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "amount_due",
                "type": "string",
                "required": true,
                "description": "Amount due for renewal (in smallest unit)",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "payment_failure_reason",
                "type": "string",
                "required": false,
                "description": "Reason for payment failure",
                "enumValues": [
                  "insufficient_funds",
                  "card_declined",
                  "expired_card",
                  "network_error",
                  "unknown"
                ]
              },
              {
                "name": "retry_count",
                "type": "integer",
                "required": false,
                "description": "Number of retry attempts so far"
              },
              {
                "name": "next_retry_at",
                "type": "string",
                "required": false,
                "description": "When next retry will be attempted",
                "format": "date-time"
              },
              {
                "name": "grace_period_end",
                "type": "string",
                "required": false,
                "description": "When subscription will expire if not paid",
                "format": "date-time"
              },
              {
                "name": "past_due_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when subscription became past due",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.payment.confirmed": {
          "description": "Event triggered when a subscription payment is confirmed",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [
            "fabric-auth"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_id",
              "tx_hash",
              "user_id",
              "wallet_address",
              "subscription_id",
              "tier",
              "amount_micro_usdc",
              "block_number",
              "confirmed_at"
            ],
            "fields": [
              {
                "name": "transaction_id",
                "type": "string",
                "required": true,
                "description": "Internal transaction ID (UUID)",
                "format": "uuid"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Blockchain transaction hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User who owns the subscription",
                "format": "uuid"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "User's wallet address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Associated subscription ID",
                "format": "uuid"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "Subscription tier",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "amount_micro_usdc",
                "type": "integer",
                "required": true,
                "description": "Amount in micro-USDC (1 USDC = 1,000,000)"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block where tx was included"
              },
              {
                "name": "billing_period_start",
                "type": "string",
                "required": false,
                "description": "Start of billing period",
                "format": "date-time"
              },
              {
                "name": "billing_period_end",
                "type": "string",
                "required": false,
                "description": "End of billing period",
                "format": "date-time"
              },
              {
                "name": "is_renewal",
                "type": "boolean",
                "required": false,
                "description": "True if this is a renewal payment"
              },
              {
                "name": "confirmed_at",
                "type": "string",
                "required": true,
                "description": "When confirmation was detected",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.quota.reset": {
          "description": "Event triggered when quota counters are reset for new billing period",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 365,
          "payload": {
            "required": [
              "subscription_id",
              "user_id",
              "tier",
              "billing_period_start",
              "reset_at"
            ],
            "fields": [
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Internal subscription ID",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User whose quotas were reset",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription",
                "format": "uuid"
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "Current subscription tier",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "quotas",
                "type": "object",
                "required": false,
                "description": "Reset quota limits for this billing period"
              },
              {
                "name": "previous_period_usage",
                "type": "object",
                "required": false,
                "description": "Usage from the previous billing period"
              },
              {
                "name": "billing_period_start",
                "type": "string",
                "required": true,
                "description": "Start of new billing period",
                "format": "date-time"
              },
              {
                "name": "billing_period_end",
                "type": "string",
                "required": false,
                "description": "End of new billing period",
                "format": "date-time"
              },
              {
                "name": "reset_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when quotas were reset",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.quota.checked": {
          "description": "Event triggered when a service checks a user's quota before performing a billable operation",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 90,
          "payload": {
            "required": [
              "user_id",
              "wallet_address",
              "feature",
              "tier",
              "quota_limit",
              "quota_used",
              "quota_remaining",
              "within_quota",
              "checked_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "feature",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "nft_deploy",
                  "token_deploy",
                  "api_call",
                  "gas_sponsorship"
                ]
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "quota_limit",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "quota_used",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "quota_remaining",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "within_quota",
                "type": "boolean",
                "required": true,
                "description": ""
              },
              {
                "name": "reset_date",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "checked_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.quota.exceeded": {
          "description": "Event triggered when user exceeds their quota limit",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_id",
              "quota_type",
              "tier",
              "quota_limit",
              "quota_used",
              "exceeded_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "quota_type",
                "type": "string",
                "required": true,
                "description": "Type of quota that was exceeded",
                "enumValues": [
                  "nft.collection.deploy",
                  "nft.mint",
                  "token.deploy",
                  "token.mint",
                  "api.call",
                  "gas.sponsorship"
                ]
              },
              {
                "name": "tier",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "quota_limit",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "quota_used",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "attempted_action",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "prepaid_balance",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "can_charge_prepaid",
                "type": "boolean",
                "required": false,
                "description": ""
              },
              {
                "name": "overage_price",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "exceeded_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.prepaid.insufficient": {
          "description": "Event triggered when user attempts a billable operation but has insufficient prepaid balance",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_id",
              "subscription_id",
              "operation_type",
              "required_amount",
              "current_balance"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID",
                "format": "uuid"
              },
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Subscription ID",
                "format": "uuid"
              },
              {
                "name": "operation_type",
                "type": "string",
                "required": true,
                "description": "Operation that was attempted",
                "enumValues": [
                  "NFT_COLLECTION_DEPLOY",
                  "NFT_MINT",
                  "TOKEN_DEPLOY",
                  "TOKEN_MINT",
                  "WALLET_CREATE",
                  "TRANSACTION"
                ]
              },
              {
                "name": "required_amount",
                "type": "string",
                "required": true,
                "description": "Amount required for operation (in USDC)"
              },
              {
                "name": "current_balance",
                "type": "string",
                "required": true,
                "description": "User's current prepaid balance (in USDC)"
              },
              {
                "name": "deficit",
                "type": "string",
                "required": false,
                "description": "Shortfall amount (required - current)"
              }
            ]
          }
        },
        "prepaid.deposited": {
          "description": "Event triggered when prepaid balance is deposited",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "wallet_address",
              "amount",
              "balance_after",
              "tx_hash",
              "block_number",
              "chain_id",
              "deposited_at"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "amount",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "balance_before",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "balance_after",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "deposit_method",
                "type": "string",
                "required": false,
                "description": "",
                "enumValues": [
                  "direct",
                  "moonpay",
                  "transfer"
                ]
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "deposited_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "prepaid.deposit.confirmed": {
          "description": "Event triggered when a prepaid deposit is confirmed on-chain and credited to balance",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_id",
              "tx_hash",
              "wallet_address",
              "amount_usdc",
              "confirmed_at"
            ],
            "fields": [
              {
                "name": "transaction_id",
                "type": "string",
                "required": true,
                "description": "Internal transaction ID (UUID)",
                "format": "uuid"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Blockchain transaction hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "User's wallet address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "amount_usdc",
                "type": "string",
                "required": true,
                "description": "Amount in USDC (formatted string, e.g. '20.000000')",
                "pattern": "^[0-9]+\\.[0-9]+$"
              },
              {
                "name": "confirmed_at",
                "type": "string",
                "required": true,
                "description": "When confirmation was detected",
                "format": "date-time"
              }
            ]
          }
        },
        "prepaid.charge.requested": {
          "description": "Event triggered when a service requests a prepaid balance charge for a billable operation",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "charge_id",
              "user_id",
              "wallet_address",
              "amount",
              "action",
              "requested_by_service",
              "balance_before",
              "sufficient_balance",
              "requested_at"
            ],
            "fields": [
              {
                "name": "charge_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "",
                "format": "uuid"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "amount",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "action",
                "type": "string",
                "required": true,
                "description": "Operation type requesting the charge",
                "enumValues": [
                  "nft.collection.deploy",
                  "nft.mint",
                  "token.deploy",
                  "token.mint",
                  "gas.sponsorship",
                  "subscription.payment"
                ]
              },
              {
                "name": "requested_by_service",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "fabric-subscription",
                  "fabric-nft",
                  "fabric-token",
                  "fabric-wallet"
                ]
              },
              {
                "name": "balance_before",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "sufficient_balance",
                "type": "boolean",
                "required": true,
                "description": ""
              },
              {
                "name": "requested_at",
                "type": "string",
                "required": true,
                "description": "",
                "format": "date-time"
              },
              {
                "name": "metadata",
                "type": "object",
                "required": false,
                "description": ""
              }
            ]
          }
        },
        "prepaid.spent": {
          "description": "Event triggered when prepaid balance is charged for overage",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "charge_id",
              "user_id",
              "amount",
              "action",
              "balance_after",
              "spent_at"
            ],
            "fields": [
              {
                "name": "charge_id",
                "type": "string",
                "required": true,
                "description": "Internal charge ID for this deduction",
                "format": "uuid"
              },
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User whose balance was deducted",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this account (nullable for personal accounts)",
                "format": "uuid"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key used for this action (nullable for direct user actions)",
                "format": "uuid"
              },
              {
                "name": "amount",
                "type": "string",
                "required": true,
                "description": "Amount deducted in smallest unit (e.g., USDC with 6 decimals)",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "action",
                "type": "string",
                "required": true,
                "description": "Operation type that triggered the spend",
                "enumValues": [
                  "nft.collection.deploy",
                  "nft.mint",
                  "token.deploy",
                  "token.mint",
                  "gas.sponsorship",
                  "subscription.payment",
                  "debt.repayment"
                ]
              },
              {
                "name": "subscription_tier",
                "type": "string",
                "required": false,
                "description": "Subscription tier if action is subscription.payment",
                "enumValues": [
                  "FREE",
                  "PRO",
                  "ENTERPRISE"
                ]
              },
              {
                "name": "balance_before",
                "type": "string",
                "required": false,
                "description": "Balance before deduction",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "balance_after",
                "type": "string",
                "required": true,
                "description": "Balance after deduction",
                "pattern": "^[0-9]+$"
              },
              {
                "name": "triggered_by_tx",
                "type": "string",
                "required": false,
                "description": "Transaction hash that triggered this charge (reference only, not a charge tx)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "spent_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when balance was deducted",
                "format": "date-time"
              }
            ]
          }
        },
        "subscription.admin.action": {
          "description": "Event triggered when an admin performs an action on a subscription (audit trail)",
          "version": "1.0.0",
          "producer": "fabric-subscription",
          "consumers": [],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "admin_user_id",
              "admin_email",
              "action_type",
              "target_user_id",
              "subscription_id",
              "executed_at"
            ],
            "fields": [
              {
                "name": "admin_user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID of the admin performing the action",
                "format": "uuid"
              },
              {
                "name": "admin_email",
                "type": "string",
                "required": true,
                "description": "Email of the admin for human-readable audit trail",
                "format": "email"
              },
              {
                "name": "action_type",
                "type": "string",
                "required": true,
                "description": "Type of administrative action performed",
                "enumValues": [
                  "create",
                  "update",
                  "suspend",
                  "unsuspend",
                  "cancel",
                  "tier_override",
                  "tier_override_clear",
                  "reset_quota",
                  "extend_trial",
                  "refund",
                  "adjust_balance"
                ]
              },
              {
                "name": "target_user_id",
                "type": "string",
                "required": true,
                "description": "User whose subscription was affected",
                "format": "uuid"
              },
              {
                "name": "subscription_id",
                "type": "string",
                "required": true,
                "description": "Subscription that was modified",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this subscription (if applicable)",
                "format": "uuid"
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Standardized reason for the action",
                "enumValues": [
                  "customer_request",
                  "billing_issue",
                  "technical_error",
                  "fraud_prevention",
                  "compliance",
                  "goodwill",
                  "testing",
                  "data_migration",
                  "other"
                ]
              },
              {
                "name": "notes",
                "type": "string",
                "required": false,
                "description": "Free-text explanation, especially important when reason is 'other'"
              },
              {
                "name": "previous_state",
                "type": "object",
                "required": false,
                "description": "Snapshot of relevant state before the action"
              },
              {
                "name": "new_state",
                "type": "object",
                "required": false,
                "description": "Snapshot of relevant state after the action"
              },
              {
                "name": "metadata",
                "type": "object",
                "required": false,
                "description": "Additional context specific to the action type"
              },
              {
                "name": "executed_at",
                "type": "string",
                "required": true,
                "description": "Timestamp when the admin action was executed",
                "format": "date-time"
              }
            ]
          }
        }
      }
    },
    "nft": {
      "description": "NFT collection and token lifecycle events",
      "events": {
        "nft.collection.deployed": {
          "description": "Event triggered when an NFT collection is deployed through SimpleNFTFactory",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-indexer-rs",
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "collection_address",
              "owner",
              "name",
              "symbol",
              "contract_type",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who deployed collection",
                "format": "uuid"
              },
              {
                "name": "collection_address",
                "type": "string",
                "required": true,
                "description": "Address of the deployed NFT collection contract",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "owner",
                "type": "string",
                "required": true,
                "description": "Owner of the collection",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "creator",
                "type": "string",
                "required": false,
                "description": "Creator/deployer wallet address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "name",
                "type": "string",
                "required": true,
                "description": "Collection name"
              },
              {
                "name": "symbol",
                "type": "string",
                "required": true,
                "description": "Collection symbol"
              },
              {
                "name": "contract_type",
                "type": "string",
                "required": true,
                "description": "Type of NFT contract deployed",
                "enumValues": [
                  "ERC721",
                  "ERC1155"
                ]
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of the deployment",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number where deployment was confirmed"
              },
              {
                "name": "gas_used",
                "type": "integer",
                "required": false,
                "description": "Gas units used by deployment"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to commit"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "nft.collection.deployment.pending": {
          "description": "Event triggered when NFT collection deployment is submitted to blockchain",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "medium",
          "retentionDays": 90,
          "payload": {
            "required": [
              "user_id",
              "tx_hash",
              "name",
              "symbol",
              "contract_type",
              "chain_id"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated deployment",
                "format": "uuid"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of pending deployment",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "name",
                "type": "string",
                "required": true,
                "description": "Collection name"
              },
              {
                "name": "symbol",
                "type": "string",
                "required": true,
                "description": "Collection symbol"
              },
              {
                "name": "contract_type",
                "type": "string",
                "required": true,
                "description": "Type of NFT contract being deployed",
                "enumValues": [
                  "ERC721",
                  "ERC1155"
                ]
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID from Kong pre-flight check"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "nft.collection.deployment.failed": {
          "description": "Event triggered when NFT collection deployment fails",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_id",
              "tx_hash",
              "chain_id",
              "failure_reason"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated deployment",
                "format": "uuid"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of failed deployment",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "failure_reason",
                "type": "string",
                "required": true,
                "description": "Reason for deployment failure (revert message or error)"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to release"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number where failure was confirmed"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "nft.collection.updated": {
          "description": "Event triggered when NFT collection configuration, metadata, or royalties are updated",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 365,
          "payload": {
            "required": [
              "collection_address",
              "contract_type",
              "update_type",
              "updater",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "collection_address",
                "type": "string",
                "required": true,
                "description": "Address of the NFT collection contract",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contract_type",
                "type": "string",
                "required": true,
                "description": "Type of NFT contract",
                "enumValues": [
                  "ERC721",
                  "ERC1155"
                ]
              },
              {
                "name": "update_type",
                "type": "string",
                "required": true,
                "description": "Type of update performed",
                "enumValues": [
                  "metadata",
                  "mint_price",
                  "public_mint",
                  "max_supply",
                  "base_uri",
                  "paused",
                  "royalty"
                ]
              },
              {
                "name": "updater",
                "type": "string",
                "required": true,
                "description": "Address that performed the update",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of the update",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "old_value",
                "type": "string",
                "required": false,
                "description": "Previous value (if applicable)"
              },
              {
                "name": "new_value",
                "type": "string",
                "required": false,
                "description": "New value (if applicable)"
              }
            ]
          }
        },
        "nft.minted": {
          "description": "Event triggered when an NFT token is successfully minted",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-indexer-rs",
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "collection_address",
              "token_id",
              "to",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who minted",
                "format": "uuid"
              },
              {
                "name": "collection_address",
                "type": "string",
                "required": true,
                "description": "NFT collection contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "token_id",
                "type": "string",
                "required": true,
                "description": "Token ID of the minted NFT"
              },
              {
                "name": "token_ids",
                "type": "array<string>",
                "required": false,
                "description": "Array of token IDs (for batch mints)"
              },
              {
                "name": "to",
                "type": "string",
                "required": true,
                "description": "Recipient address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "quantity",
                "type": "integer",
                "required": false,
                "description": "Quantity minted (for ERC1155 or batch, default 1 for ERC721)"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number"
              },
              {
                "name": "gas_used",
                "type": "integer",
                "required": false,
                "description": "Gas units used"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to commit"
              },
              {
                "name": "minted_at",
                "type": "string",
                "required": false,
                "description": "Timestamp when minted",
                "format": "date-time"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "nft.mint.pending": {
          "description": "Event triggered when NFT mint is submitted to blockchain",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "medium",
          "retentionDays": 90,
          "payload": {
            "required": [
              "user_id",
              "collection_address",
              "to",
              "quantity",
              "chain_id",
              "tx_hash"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated mint",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "collection_address",
                "type": "string",
                "required": true,
                "description": "NFT collection contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "to",
                "type": "string",
                "required": true,
                "description": "Recipient address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "quantity",
                "type": "integer",
                "required": true,
                "description": "Number of NFTs to mint"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of pending mint",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID from Kong pre-flight check"
              }
            ]
          }
        },
        "nft.mint.failed": {
          "description": "Event triggered when NFT mint fails",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_id",
              "collection_address",
              "chain_id",
              "tx_hash",
              "failure_reason"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated mint",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "collection_address",
                "type": "string",
                "required": true,
                "description": "NFT collection contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of failed mint",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "failure_reason",
                "type": "string",
                "required": true,
                "description": "Reason for mint failure (revert message or error)"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number where failure was confirmed"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to release"
              }
            ]
          }
        },
        "nft.nft.transferred": {
          "description": "Event triggered when an NFT token is transferred between addresses",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "token_id",
              "collection_address",
              "contract_type",
              "from",
              "to",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "token_id",
                "type": "string",
                "required": true,
                "description": "Unique token identifier that was transferred"
              },
              {
                "name": "collection_address",
                "type": "string",
                "required": true,
                "description": "Address of the NFT collection contract",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contract_type",
                "type": "string",
                "required": true,
                "description": "Type of NFT contract",
                "enumValues": [
                  "ERC721",
                  "ERC1155"
                ]
              },
              {
                "name": "from",
                "type": "string",
                "required": true,
                "description": "Address that sent the NFT",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "to",
                "type": "string",
                "required": true,
                "description": "Address that received the NFT",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of the transfer",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "nft.nft.burned": {
          "description": "Event triggered when an NFT is burned/destroyed",
          "version": "1.0.0",
          "producer": "fabric-nft",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "token_id",
              "collection_address",
              "contract_type",
              "burner",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "token_id",
                "type": "string",
                "required": true,
                "description": "Unique token identifier that was burned"
              },
              {
                "name": "collection_address",
                "type": "string",
                "required": true,
                "description": "Address of the NFT collection contract",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contract_type",
                "type": "string",
                "required": true,
                "description": "Type of NFT contract",
                "enumValues": [
                  "ERC721",
                  "ERC1155"
                ]
              },
              {
                "name": "burner",
                "type": "string",
                "required": true,
                "description": "Address that burned the NFT",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of the burn",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        }
      }
    },
    "token": {
      "description": "Fungible (ERC-20) token lifecycle events",
      "events": {
        "token.deployed": {
          "description": "Event triggered when an ERC-20 token is confirmed deployed on-chain. Billable operation.",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-indexer-rs",
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "token_address",
              "owner",
              "name",
              "symbol",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who deployed token",
                "format": "uuid"
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "Address of the deployed token contract",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "owner",
                "type": "string",
                "required": true,
                "description": "Owner of the token",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "creator",
                "type": "string",
                "required": false,
                "description": "Creator/deployer wallet address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "name",
                "type": "string",
                "required": true,
                "description": "Token name"
              },
              {
                "name": "symbol",
                "type": "string",
                "required": true,
                "description": "Token symbol"
              },
              {
                "name": "decimals",
                "type": "integer",
                "required": false,
                "description": "Token decimals (default 18)"
              },
              {
                "name": "initial_supply",
                "type": "string",
                "required": false,
                "description": "Initial supply minted at deployment (in wei)"
              },
              {
                "name": "contract_type",
                "type": "string",
                "required": false,
                "description": "Type of token contract deployed",
                "enumValues": [
                  "ERC20",
                  "custom"
                ]
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of the deployment",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number where deployment was confirmed"
              },
              {
                "name": "gas_used",
                "type": "integer",
                "required": false,
                "description": "Gas units used by deployment"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to commit"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "token.deployment.pending": {
          "description": "Event triggered when ERC-20 token deployment is submitted to blockchain",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "medium",
          "retentionDays": 90,
          "payload": {
            "required": [
              "user_id",
              "tx_hash",
              "name",
              "symbol",
              "chain_id"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated deployment",
                "format": "uuid"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of pending deployment",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "name",
                "type": "string",
                "required": true,
                "description": "Token name"
              },
              {
                "name": "symbol",
                "type": "string",
                "required": true,
                "description": "Token symbol"
              },
              {
                "name": "initial_supply",
                "type": "string",
                "required": false,
                "description": "Initial supply of tokens (in wei)"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID from Kong pre-flight check"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "token.deployment.failed": {
          "description": "Event triggered when ERC-20 token deployment fails",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_id",
              "tx_hash",
              "chain_id",
              "failure_reason"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated deployment",
                "format": "uuid"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of failed deployment",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "failure_reason",
                "type": "string",
                "required": true,
                "description": "Reason for deployment failure (revert message or error)"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to release"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number where failure was confirmed"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "token.minted": {
          "description": "Event triggered when tokens are minted post-deployment. Billable operation.",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-indexer-rs",
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "user_id",
              "token_address",
              "to",
              "amount",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who minted tokens",
                "format": "uuid"
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "Token contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "to",
                "type": "string",
                "required": true,
                "description": "Recipient address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "amount",
                "type": "string",
                "required": true,
                "description": "Amount minted (in wei)"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number"
              },
              {
                "name": "gas_used",
                "type": "integer",
                "required": false,
                "description": "Gas units used"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to commit"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              }
            ]
          }
        },
        "token.mint.pending": {
          "description": "Event triggered when token mint is submitted to blockchain",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "medium",
          "retentionDays": 90,
          "payload": {
            "required": [
              "user_id",
              "token_address",
              "to",
              "amount",
              "chain_id",
              "tx_hash"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated mint",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "Token contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "to",
                "type": "string",
                "required": true,
                "description": "Recipient address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "amount",
                "type": "string",
                "required": true,
                "description": "Amount to mint (in wei)"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of pending mint",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID from Kong pre-flight check"
              }
            ]
          }
        },
        "token.mint.failed": {
          "description": "Event triggered when token mint fails",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_id",
              "token_address",
              "chain_id",
              "tx_hash",
              "failure_reason"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc user ID who initiated mint",
                "format": "uuid"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization that owns this resource (nullable for personal accounts)",
                "format": "uuid"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key ID used for this request (for developer attribution)",
                "format": "uuid"
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "Token contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of failed mint",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "failure_reason",
                "type": "string",
                "required": true,
                "description": "Reason for mint failure (revert message or error)"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number where failure was confirmed"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID to release"
              }
            ]
          }
        },
        "token.updated": {
          "description": "Event triggered when token configuration is updated",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 365,
          "payload": {
            "required": [
              "token_address",
              "update_type",
              "updater",
              "chain_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "Address of the token contract",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "update_type",
                "type": "string",
                "required": true,
                "description": "Type of update performed",
                "enumValues": [
                  "paused",
                  "unpaused",
                  "minter_added",
                  "minter_removed",
                  "metadata"
                ]
              },
              {
                "name": "updater",
                "type": "string",
                "required": true,
                "description": "Address that performed the update",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of the update",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "old_value",
                "type": "string",
                "required": false,
                "description": "Previous value (if applicable)"
              },
              {
                "name": "new_value",
                "type": "string",
                "required": false,
                "description": "New value (if applicable)"
              }
            ]
          }
        },
        "token.token.burned": {
          "description": "Event triggered when tokens are burned",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "contract_address",
              "from",
              "amount",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "amount",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "contract_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "from",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "token.token.transferred": {
          "description": "Event triggered when tokens are transferred between addresses",
          "version": "1.0.0",
          "producer": "fabric-token",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "contract_address",
              "from",
              "to",
              "amount",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "amount",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "contract_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "from",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "to",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        }
      }
    },
    "wallet": {
      "description": "Wallet lifecycle and on-chain operation events",
      "events": {
        "wallet.mpc.created": {
          "description": "Event triggered when MPC wallet DKG is completed successfully",
          "version": "1.0.0",
          "producer": "fabric-wallet",
          "consumers": [
            "fabric-auth",
            "fabric-subscription",
            "fabric-analytics",
            "fabric-notification"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "owner_id",
              "wallet_id",
              "mpc_public_key",
              "wallet_address",
              "fabricbloc_shard_id",
              "wallet_type"
            ],
            "fields": [
              {
                "name": "owner_id",
                "type": "string",
                "required": true,
                "description": "Wallet owner UUID (fabric_user.id or consumer.id)"
              },
              {
                "name": "wallet_id",
                "type": "string",
                "required": true,
                "description": "REQUIRED: Cross-service wallet identifier generated by fabric-wallet during DKG. Used by fabric-auth as Wallet primary key.",
                "format": "uuid"
              },
              {
                "name": "mpc_public_key",
                "type": "string",
                "required": true,
                "description": "MPC public key from DKG (hex encoded)"
              },
              {
                "name": "wallet_address",
                "type": "string",
                "required": true,
                "description": "Counterfactual smart account address derived from MPC public key",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "fabricbloc_shard_id",
                "type": "string",
                "required": true,
                "description": "FabricBloc platform shard ID stored in HSM"
              },
              {
                "name": "wallet_type",
                "type": "string",
                "required": true,
                "description": "Type of wallet (always MPC for this event)",
                "enumValues": [
                  "MPC"
                ]
              },
              {
                "name": "auto_deploy",
                "type": "boolean",
                "required": false,
                "description": "Whether to automatically deploy smart account on-chain"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": false,
                "description": "Target blockchain network chain ID for deployment"
              },
              {
                "name": "device_public_key",
                "type": "string",
                "required": false,
                "description": "Device public key from DKG (base64 encoded)"
              },
              {
                "name": "device_platform",
                "type": "string",
                "required": false,
                "description": "Platform of the device that initiated DKG",
                "enumValues": [
                  "web",
                  "ios",
                  "android",
                  "desktop"
                ]
              },
              {
                "name": "device_model",
                "type": "string",
                "required": false,
                "description": "Device model (e.g., 'iPhone 15', 'Chrome 120')"
              },
              {
                "name": "device_os_version",
                "type": "string",
                "required": false,
                "description": "Device OS version (e.g., 'iOS 17.2', 'Windows 11')"
              },
              {
                "name": "device_name",
                "type": "string",
                "required": false,
                "description": "User-assigned device name"
              }
            ]
          }
        },
        "wallet.mpc.creation_failed": {
          "description": "Event triggered when MPC wallet DKG fails",
          "version": "1.0.0",
          "producer": "fabric-wallet",
          "consumers": [
            "fabric-auth",
            "fabric-subscription",
            "fabric-analytics",
            "fabric-notification"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "owner_id",
              "stage",
              "error"
            ],
            "fields": [
              {
                "name": "owner_id",
                "type": "string",
                "required": true,
                "description": "Wallet owner UUID attempting wallet creation"
              },
              {
                "name": "session_id",
                "type": "string",
                "required": false,
                "description": "DKG session ID if available"
              },
              {
                "name": "stage",
                "type": "string",
                "required": true,
                "description": "Stage where failure occurred",
                "enumValues": [
                  "dkg_initiate",
                  "dkg_complete"
                ]
              },
              {
                "name": "error",
                "type": "string",
                "required": true,
                "description": "Error message describing the failure"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": false,
                "description": "Target chain if specified"
              }
            ]
          }
        },
        "wallet.transaction.submitted": {
          "description": "Event triggered when a transaction or UserOperation is submitted to the network",
          "version": "1.0.0",
          "producer": "fabric-wallet",
          "consumers": [
            "fabric-subscription"
          ],
          "criticality": "medium",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_id",
              "transaction_hash",
              "chain_id",
              "from"
            ],
            "fields": [
              {
                "name": "user_id",
                "type": "string",
                "required": true,
                "description": "User ID who initiated the transaction"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash or UserOperation hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "from",
                "type": "string",
                "required": true,
                "description": "Smart account or wallet address (sender)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "to",
                "type": "string",
                "required": false,
                "description": "Target contract or recipient address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "operation_type",
                "type": "string",
                "required": false,
                "description": "Type of operation (e.g., user_operation, nft.mint, token.transfer)"
              },
              {
                "name": "value",
                "type": "string",
                "required": false,
                "description": "ETH value sent (in Wei)"
              },
              {
                "name": "organization_id",
                "type": "string",
                "required": false,
                "description": "Organization ID if applicable"
              },
              {
                "name": "reservation_id",
                "type": "string",
                "required": false,
                "description": "Quota reservation ID from Kong pre-flight"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key used for the request"
              },
              {
                "name": "nonce",
                "type": "integer",
                "required": false,
                "description": "Transaction nonce"
              },
              {
                "name": "gas",
                "type": "string",
                "required": false,
                "description": "Gas limit for the transaction"
              },
              {
                "name": "gas_price",
                "type": "string",
                "required": false,
                "description": "Gas price in Wei"
              }
            ]
          }
        },
        "wallet.operation.confirmed": {
          "description": "Enriched domain event published when a UserOperation is confirmed on-chain and its reference is resolved. Feature services (NFT, token, DAO) subscribe to this and filter by reference_type. Replaces the deprecated wallet.transaction.confirmed.",
          "version": "1.0.0",
          "producer": "fabric-wallet",
          "consumers": [
            "fabric-nft",
            "fabric-token",
            "fabric-dao",
            "fabric-subscription",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "op_hash",
              "tx_hash",
              "chain_id",
              "sender",
              "success"
            ],
            "fields": [
              {
                "name": "op_hash",
                "type": "string",
                "required": true,
                "description": "UserOperation hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "On-chain transaction hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "sender",
                "type": "string",
                "required": true,
                "description": "Smart account address that sent the operation",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": "Block number where the operation was confirmed"
              },
              {
                "name": "success",
                "type": "boolean",
                "required": true,
                "description": "Whether the operation executed successfully on-chain"
              },
              {
                "name": "reference_id",
                "type": "string",
                "required": false,
                "description": "Domain object UUID this operation relates to (e.g., collection ID, session key ID)",
                "format": "uuid"
              },
              {
                "name": "reference_type",
                "type": "string",
                "required": false,
                "description": "Type of domain object: nft_collection_deployment, nft_mint, session_key_registration, etc."
              },
              {
                "name": "logs",
                "type": "array<object>",
                "required": false,
                "description": "Execution logs from the transaction receipt, passed through from the bundler event."
              }
            ]
          }
        },
        "wallet.operation.failed": {
          "description": "Enriched domain event published when a referenced UserOperation fails. Replaces the deprecated wallet.transaction.failed. Feature services (NFT, token, DAO) consume this to release quota reservations.",
          "version": "1.0.0",
          "producer": "fabric-wallet",
          "consumers": [
            "fabric-nft",
            "fabric-token",
            "fabric-dao",
            "fabric-subscription",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "op_hash",
              "chain_id",
              "sender"
            ],
            "fields": [
              {
                "name": "op_hash",
                "type": "string",
                "required": true,
                "description": "UserOperation hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "sender",
                "type": "string",
                "required": true,
                "description": "Smart account address that sent the operation",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "reference_id",
                "type": "string",
                "required": false,
                "description": "Domain object UUID this operation relates to",
                "format": "uuid"
              },
              {
                "name": "reference_type",
                "type": "string",
                "required": false,
                "description": "Type of domain object: nft_collection_deployment, nft_mint, etc."
              },
              {
                "name": "error_code",
                "type": "string",
                "required": false,
                "description": "ERC-4337 error code (e.g., AA21, AA25)"
              },
              {
                "name": "error_message",
                "type": "string",
                "required": false,
                "description": "Human-readable error description"
              },
              {
                "name": "revert_reason",
                "type": "string",
                "required": false,
                "description": "On-chain revert reason if available"
              },
              {
                "name": "stage",
                "type": "string",
                "required": false,
                "description": "Stage where the operation failed",
                "enumValues": [
                  "validation",
                  "simulation",
                  "execution"
                ]
              }
            ]
          }
        },
        "wallet.deleted": {
          "description": "Wallet offboarded — keys revoked, server MPC shards destroyed, wallet soft-deleted",
          "version": "1.0.0",
          "producer": "fabric-wallet",
          "consumers": [
            "fabric-auth",
            "fabric-subscription",
            "fabric-analytics"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "owner_id"
            ],
            "fields": [
              {
                "name": "owner_id",
                "type": "string",
                "required": true,
                "description": "Owner UUID (user or consumer)",
                "format": "uuid"
              },
              {
                "name": "wallet_id",
                "type": "string",
                "required": false,
                "description": "Deleted wallet UUID",
                "format": "uuid"
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": false,
                "description": "On-chain smart account address (persists after deletion)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "device_keys_revoked",
                "type": "integer",
                "required": false,
                "description": "Number of device keys revoked during offboarding"
              },
              {
                "name": "session_keys_revoked",
                "type": "integer",
                "required": false,
                "description": "Number of session keys revoked during offboarding"
              },
              {
                "name": "shards_destroyed",
                "type": "integer",
                "required": false,
                "description": "Number of server MPC shards destroyed in HSM"
              }
            ]
          }
        },
        "wallet.session_key.executed": {
          "description": "Session key transaction confirmed on-chain — enables user notification and audit trail for server-side session key usage",
          "version": "1.0.0",
          "producer": "fabric-wallet",
          "consumers": [
            "fabric-analytics"
          ],
          "criticality": "medium",
          "retentionDays": 365,
          "payload": {
            "required": [
              "session_key_id",
              "signer_type",
              "owner_id",
              "tx_hash",
              "chain_id",
              "smart_account_address"
            ],
            "fields": [
              {
                "name": "session_key_id",
                "type": "string",
                "required": true,
                "description": "Session key record UUID",
                "format": "uuid"
              },
              {
                "name": "signer_type",
                "type": "string",
                "required": true,
                "description": "Whether the session key is device-held or server-held",
                "enumValues": [
                  "device",
                  "server"
                ]
              },
              {
                "name": "owner_id",
                "type": "string",
                "required": true,
                "description": "Wallet owner UUID",
                "format": "uuid"
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "On-chain transaction hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "value_wei",
                "type": "string",
                "required": false,
                "description": "Value transferred in this transaction (in Wei)"
              },
              {
                "name": "total_transactions",
                "type": "integer",
                "required": false,
                "description": "Cumulative transaction count for this session key"
              },
              {
                "name": "spent_today_wei",
                "type": "string",
                "required": false,
                "description": "Daily spending total after this transaction (in Wei)"
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": true,
                "description": "Smart account that executed the transaction",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "api_key_id",
                "type": "string",
                "required": false,
                "description": "API key used for the request (B2B2C audit trail)"
              }
            ]
          }
        }
      }
    },
    "dao": {
      "description": "DAO governance and contract deployment events",
      "events": {
        "dao.contract.deployed": {
          "description": "Event triggered when a DAO governance contract is confirmed deployed on-chain",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [
            "fabric-indexer-rs",
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "contract_address",
              "kind"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "contract_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "kind",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "governor",
                  "treasury",
                  "membership",
                  "custom"
                ]
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.proposal.created": {
          "description": "Event triggered when a DAO proposal is created",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "proposer"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "end_block",
                "type": "integer",
                "required": false,
                "description": ""
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "proposer",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "start_block",
                "type": "integer",
                "required": false,
                "description": ""
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.proposal.voted": {
          "description": "Event triggered when a vote is cast on a DAO proposal",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "voter",
              "support",
              "weight"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "support",
                "type": "string",
                "required": true,
                "description": "",
                "enumValues": [
                  "for",
                  "against",
                  "abstain"
                ]
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "voter",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "weight",
                "type": "string",
                "required": true,
                "description": ""
              }
            ]
          }
        },
        "dao.proposal.executed": {
          "description": "Event triggered when a DAO proposal is executed on-chain",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "executor"
            ],
            "fields": [
              {
                "name": "block_number",
                "type": "integer",
                "required": false,
                "description": ""
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "executor",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.proposal.canceled": {
          "description": "Event triggered when a DAO proposal is canceled",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [
            "fabric-indexer-rs"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "canceler"
            ],
            "fields": [
              {
                "name": "canceler",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": false,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.governor.created": {
          "description": "Event triggered when a DAO Governor stack (Governor + Token + Timelock + Treasury) is confirmed deployed on-chain. Carries the deployed addresses and the governor's initial settings.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [
            "fabric-subscription",
            "fabric-indexer-rs"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "token_address",
              "timelock_address",
              "treasury_address",
              "creator",
              "voting_delay",
              "voting_period",
              "quorum_percent",
              "timelock_delay",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "Deployed Governor contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "Deployed DAOToken (ERC20Votes) address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "timelock_address",
                "type": "string",
                "required": true,
                "description": "Deployed TimelockController address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "treasury_address",
                "type": "string",
                "required": true,
                "description": "Deployed DAOTreasury address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "creator",
                "type": "string",
                "required": true,
                "description": "Address that called createDAO()",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "governor_name",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "token_name",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "token_symbol",
                "type": "string",
                "required": false,
                "description": ""
              },
              {
                "name": "token_supply",
                "type": "string",
                "required": false,
                "description": "Initial token supply (uint256 as string)"
              },
              {
                "name": "voting_delay",
                "type": "integer",
                "required": true,
                "description": "Seconds between proposal creation and voting start (ERC-6372 timestamp mode)"
              },
              {
                "name": "voting_period",
                "type": "integer",
                "required": true,
                "description": "Voting window duration in seconds"
              },
              {
                "name": "proposal_threshold",
                "type": "string",
                "required": false,
                "description": "Min tokens required to create a proposal (uint256 as string)"
              },
              {
                "name": "quorum_percent",
                "type": "integer",
                "required": true,
                "description": "Quorum as percentage of total supply (1-100)"
              },
              {
                "name": "timelock_delay",
                "type": "integer",
                "required": true,
                "description": "Seconds between queue and execute"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.governor.settings_updated": {
          "description": "Event triggered when a governor's voting setting (voting_delay, voting_period, proposal_threshold, quorum_fraction) is changed via a successful governance proposal.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "setting",
              "new_value",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "Governor contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "setting",
                "type": "string",
                "required": true,
                "description": "Which governor setting was updated",
                "enumValues": [
                  "voting_delay",
                  "voting_period",
                  "proposal_threshold",
                  "quorum_fraction"
                ]
              },
              {
                "name": "previous_value",
                "type": "string",
                "required": false,
                "description": "Previous setting value (string for uniformity across uint types)"
              },
              {
                "name": "new_value",
                "type": "string",
                "required": true,
                "description": "New setting value (string for uniformity across uint types)"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.proposal.activated": {
          "description": "Emitted when a proposal's voting delay elapses and the proposal transitions from PENDING to ACTIVE.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "activated_at"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "activated_at",
                "type": "integer",
                "required": true,
                "description": "ERC-6372 timestamp when voting starts (unix seconds)"
              },
              {
                "name": "vote_end_at",
                "type": "integer",
                "required": false,
                "description": "ERC-6372 timestamp when voting closes (unix seconds)"
              }
            ]
          }
        },
        "dao.proposal.succeeded": {
          "description": "Emitted when a proposal's voting period ends with quorum reached and threshold met.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "for_votes",
              "against_votes",
              "abstain_votes",
              "quorum_required",
              "ended_at"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "for_votes",
                "type": "string",
                "required": true,
                "description": "Total 'for' voting weight at voting close (uint256 as string)"
              },
              {
                "name": "against_votes",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "abstain_votes",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "quorum_required",
                "type": "string",
                "required": true,
                "description": "Quorum threshold the proposal had to meet (uint256 as string)"
              },
              {
                "name": "ended_at",
                "type": "integer",
                "required": true,
                "description": "ERC-6372 timestamp when voting period closed (unix seconds)"
              }
            ]
          }
        },
        "dao.proposal.defeated": {
          "description": "Emitted when a proposal's voting period ends without meeting quorum or threshold.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "for_votes",
              "against_votes",
              "abstain_votes",
              "quorum_required",
              "quorum_reached",
              "ended_at"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "for_votes",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "against_votes",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "abstain_votes",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "quorum_required",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "quorum_reached",
                "type": "boolean",
                "required": true,
                "description": "True if quorum was reached but threshold not met (defeated by majority)"
              },
              {
                "name": "ended_at",
                "type": "integer",
                "required": true,
                "description": "ERC-6372 timestamp when voting period closed (unix seconds)"
              }
            ]
          }
        },
        "dao.proposal.queued": {
          "description": "Emitted when a succeeded proposal is queued in the Timelock, starting the timelock delay countdown.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "proposal_id",
              "queuer",
              "eta",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": ""
              },
              {
                "name": "timelock_address",
                "type": "string",
                "required": false,
                "description": "TimelockController managing the queue",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "queuer",
                "type": "string",
                "required": true,
                "description": "Address that called queue()",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "eta",
                "type": "integer",
                "required": true,
                "description": "Unix timestamp (seconds) when the proposal becomes executable"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.delegation.set": {
          "description": "Emitted when an ERC20Votes token holder delegates voting power to another address.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "token_address",
              "delegator",
              "delegatee",
              "block_timestamp",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "ERC20Votes token whose delegation changed",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "delegator",
                "type": "string",
                "required": true,
                "description": "Address whose voting power is being delegated",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "delegatee",
                "type": "string",
                "required": true,
                "description": "Address receiving the voting power (different from delegator — self-delegation is dao.delegation.revoked)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "previous_delegatee",
                "type": "string",
                "required": false,
                "description": "Prior delegatee, if any. Zero address if first delegation.",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "voting_power",
                "type": "string",
                "required": false,
                "description": "Voting power delegated at this point (uint256 as string)"
              },
              {
                "name": "block_timestamp",
                "type": "integer",
                "required": true,
                "description": "ERC-6372 timestamp of the delegation (unix seconds)"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.delegation.revoked": {
          "description": "Emitted when an ERC20Votes token holder revokes a delegation (self-delegates).",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "token_address",
              "delegator",
              "previous_delegatee",
              "block_timestamp",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "ERC20Votes token whose delegation was revoked",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "delegator",
                "type": "string",
                "required": true,
                "description": "Address that revoked its delegation (now self-delegating per ERC20Votes semantics)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "previous_delegatee",
                "type": "string",
                "required": true,
                "description": "Address that previously held the delegation",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "block_timestamp",
                "type": "integer",
                "required": true,
                "description": "ERC-6372 timestamp of the revocation (unix seconds)"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        },
        "dao.voting_power.snapshot_recorded": {
          "description": "Emitted exactly once per (governor, address, snapshot_timestamp) tuple on the first voting-power query for that tuple. Snapshots are immutable once recorded.",
          "version": "1.0.0",
          "producer": "fabric-dao",
          "consumers": [],
          "criticality": "low",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chain_id",
              "dao_address",
              "address",
              "snapshot_timestamp",
              "voting_power"
            ],
            "fields": [
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "dao_address",
                "type": "string",
                "required": true,
                "description": "Governor contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "token_address",
                "type": "string",
                "required": false,
                "description": "ERC20Votes token address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "address",
                "type": "string",
                "required": true,
                "description": "Address whose voting power was snapshot",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "snapshot_timestamp",
                "type": "integer",
                "required": true,
                "description": "ERC-6372 timestamp the snapshot represents (unix seconds)"
              },
              {
                "name": "voting_power",
                "type": "string",
                "required": true,
                "description": "Voting power at the snapshot (uint256 as string)"
              },
              {
                "name": "delegated_to",
                "type": "string",
                "required": false,
                "description": "Whom this address delegated voting power to at the snapshot. Empty if self-delegating or not delegated."
              }
            ]
          }
        }
      }
    },
    "governance": {
      "description": "Inbound chain-decoded governance events from fabric-indexer-rs (OpenZeppelin Governor v5 + custom DAOFactory event). Consumed by fabric-dao to reconcile pending governor rows by tx_hash, drive the proposal state machine, and update votes / delegations / governor settings.",
      "events": {
        "governance.dao_created": {
          "description": "Emitted when DAOFactory.createDAO successfully deploys a new DAO. Reconciliation key for the pending governor row via tx_hash -> operations.tx_hash -> operations.governor_id (per ADR-004).",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "governor_address",
              "token_address",
              "timelock_address",
              "treasury_address",
              "creator"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the DAOCreated event (reconciliation key)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain chain ID"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block number containing the event"
              },
              {
                "name": "governor_address",
                "type": "string",
                "required": true,
                "description": "DAOGovernor proxy address (indexed topic from event)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "DAOToken contract address (indexed topic from event)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "timelock_address",
                "type": "string",
                "required": true,
                "description": "TimelockController contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "treasury_address",
                "type": "string",
                "required": true,
                "description": "DAOTreasury proxy address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "creator",
                "type": "string",
                "required": true,
                "description": "EOA that called createDAO (indexed topic from event)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "name",
                "type": "string",
                "required": false,
                "description": "DAO display name from the on-chain event data"
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "Timestamp of the block containing the event",
                "format": "date-time"
              }
            ]
          }
        },
        "governance.proposal_created": {
          "description": "Emitted when propose() is called on a Governor. Maps to OZ Governor's ProposalCreated event.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "governor_address",
              "proposal_id",
              "proposer",
              "vote_start",
              "vote_end"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the ProposalCreated event",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain chain ID"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block number containing the event"
              },
              {
                "name": "governor_address",
                "type": "string",
                "required": true,
                "description": "DAOGovernor contract that emitted the event",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": "uint256 proposal ID as a base-10 string (up to 78 digits)"
              },
              {
                "name": "proposer",
                "type": "string",
                "required": true,
                "description": "Address that called propose()",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "vote_start",
                "type": "string",
                "required": true,
                "description": "Timestamp when voting becomes active (ERC-6372 timestamp mode)",
                "format": "date-time"
              },
              {
                "name": "vote_end",
                "type": "string",
                "required": true,
                "description": "Timestamp when voting closes",
                "format": "date-time"
              },
              {
                "name": "targets",
                "type": "array<string>",
                "required": false,
                "description": "Target contract addresses for each call in the proposal"
              },
              {
                "name": "values",
                "type": "array<string>",
                "required": false,
                "description": "Wei values for each call as base-10 strings"
              },
              {
                "name": "calldatas",
                "type": "array<string>",
                "required": false,
                "description": "Hex-encoded calldata for each call"
              },
              {
                "name": "description",
                "type": "string",
                "required": false,
                "description": "Proposal description string emitted in the event"
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "Timestamp of the block containing the event",
                "format": "date-time"
              }
            ]
          }
        },
        "governance.proposal_queued": {
          "description": "Emitted when a passed proposal is queued in the TimelockController. Sets eta on the proposals row.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "governor_address",
              "proposal_id",
              "eta"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the ProposalQueued event",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "governor_address",
                "type": "string",
                "required": true,
                "description": "DAOGovernor contract that emitted the event",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": "uint256 proposal ID as a base-10 string"
              },
              {
                "name": "eta",
                "type": "string",
                "required": true,
                "description": "Earliest execution time after the timelock delay elapses (ERC-6372 timestamp mode)",
                "format": "date-time"
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "governance.proposal_executed": {
          "description": "Emitted when a queued proposal is executed after its timelock elapses.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "critical",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "governor_address",
              "proposal_id"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the ProposalExecuted event (recorded as executed_tx_hash on the proposals row)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "governor_address",
                "type": "string",
                "required": true,
                "description": "DAOGovernor contract that emitted the event",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": "uint256 proposal ID as a base-10 string"
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "governance.proposal_canceled": {
          "description": "Emitted when a proposal is canceled before execution. canceled_by is taken from tx.from since the OZ event does not include the canceller address.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "governor_address",
              "proposal_id",
              "canceled_by"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the ProposalCanceled event",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "governor_address",
                "type": "string",
                "required": true,
                "description": "DAOGovernor contract that emitted the event",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": "uint256 proposal ID as a base-10 string"
              },
              {
                "name": "canceled_by",
                "type": "string",
                "required": true,
                "description": "Address that called cancel() (taken from tx.from; the OZ event itself does not include the canceller, but the indexer always has it from the transaction receipt)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "governance.vote_cast": {
          "description": "Emitted when a vote is cast on a proposal. Maps to OZ Governor's VoteCast event.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "governor_address",
              "proposal_id",
              "voter",
              "support",
              "weight"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the VoteCast event",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "governor_address",
                "type": "string",
                "required": true,
                "description": "DAOGovernor contract that emitted the event",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "proposal_id",
                "type": "string",
                "required": true,
                "description": "uint256 proposal ID as a base-10 string"
              },
              {
                "name": "voter",
                "type": "string",
                "required": true,
                "description": "Address that cast the vote (indexed topic)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "support",
                "type": "integer",
                "required": true,
                "description": "Vote choice: 0 = Against, 1 = For, 2 = Abstain"
              },
              {
                "name": "weight",
                "type": "string",
                "required": true,
                "description": "Voting power at snapshot, as a base-10 string (uint256)"
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional free-text reason supplied by the voter"
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "governance.delegate_changed": {
          "description": "Emitted on the DAOToken when a holder calls delegate(). Maps to OZ Votes' DelegateChanged event.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "token_address",
              "delegator",
              "from_delegate",
              "to_delegate"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the DelegateChanged event",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "token_address",
                "type": "string",
                "required": true,
                "description": "DAOToken contract that emitted the event",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "delegator",
                "type": "string",
                "required": true,
                "description": "Holder address that changed their delegation (indexed topic)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "from_delegate",
                "type": "string",
                "required": true,
                "description": "Previous delegatee address (zero address before first delegation; indexed topic)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "to_delegate",
                "type": "string",
                "required": true,
                "description": "New delegatee address (equals delegator for self-delegation; indexed topic)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        },
        "governance.governor_settings_changed": {
          "description": "Collapsed event covering VotingDelaySet / VotingPeriodSet / ProposalThresholdSet / QuorumNumeratorUpdated. The setting_type discriminator identifies which Governor parameter changed; fabric-dao maps every variant to a single dao.governor.settings_updated outbound event.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-dao"
          ],
          "criticality": "medium",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "transaction_hash",
              "chain_id",
              "block_number",
              "governor_address",
              "setting_type",
              "old_value",
              "new_value"
            ],
            "fields": [
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash carrying the settings-update event",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": ""
              },
              {
                "name": "governor_address",
                "type": "string",
                "required": true,
                "description": "DAOGovernor contract that emitted the event",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "setting_type",
                "type": "string",
                "required": true,
                "description": "Which Governor parameter was changed. Maps 1:1 to VotingDelaySet / VotingPeriodSet / ProposalThresholdSet / QuorumNumeratorUpdated.",
                "enumValues": [
                  "voting_delay",
                  "voting_period",
                  "proposal_threshold",
                  "quorum_numerator"
                ]
              },
              {
                "name": "old_value",
                "type": "string",
                "required": true,
                "description": "Previous value as a base-10 string (uint256). For voting_delay / voting_period these are seconds in ERC-6372 timestamp mode."
              },
              {
                "name": "new_value",
                "type": "string",
                "required": true,
                "description": "New value as a base-10 string (uint256). For voting_delay / voting_period these are seconds in ERC-6372 timestamp mode."
              },
              {
                "name": "block_timestamp",
                "type": "string",
                "required": false,
                "description": "",
                "format": "date-time"
              }
            ]
          }
        }
      }
    },
    "chain": {
      "description": "Indexer-owned on-chain confirmation events from fabric-indexer-rs (the analog of governance.*, scoped to NFT/token primitives). Single-writer producer fabric-indexer-rs decodes raw chain logs and emits registered chain.* confirmation types; consumed by fabric-nft over the Asynq bus. These are on-chain confirmations, distinct from product intent types (nft.*). Governed by ADR-0014 (architecture/decisions/0014-indexer-event-delivery-contract.md). Decoded data fields are open (additionalProperties:true) until fabric-nft confirms the tightened per-type payloads; the wire envelope + provenance fields are pinned.",
      "events": {
        "chain.nft.minted": {
          "description": "On-chain confirmation that an ERC-721 token was minted (Transfer from the zero address). Rollup-free per-type confirmation for fabric-nft.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc721). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        },
        "chain.nft.minted_1155": {
          "description": "On-chain confirmation that a single ERC-1155 token id was minted (TransferSingle from the zero address).",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc1155). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        },
        "chain.nft.batch_minted_1155": {
          "description": "On-chain confirmation that a batch of ERC-1155 token ids was minted (TransferBatch from the zero address).",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc1155). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        },
        "chain.nft.transferred": {
          "description": "On-chain confirmation that an ERC-721 token was transferred (decoded ERC-721 Transfer).",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc721). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        },
        "chain.nft.transferred_single": {
          "description": "On-chain confirmation that a single ERC-1155 token id was transferred (decoded ERC-1155 TransferSingle).",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc1155). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        },
        "chain.nft.transferred_batch": {
          "description": "On-chain confirmation that a batch of ERC-1155 token ids was transferred (decoded ERC-1155 TransferBatch).",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc1155). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        },
        "chain.token.transferred": {
          "description": "On-chain confirmation that an ERC-20 token amount was transferred (decoded ERC-20 Transfer).",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc20). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        },
        "chain.nft.config_changed": {
          "description": "Rollup on-chain confirmation that an NFT collection's on-chain config changed. Collapses max_supply_set / mint_price_set / base_uri_set / public_mint_toggled / royalty_updated / token_max_supply_set into one delivered type; can be split into per-config types later if fabric-nft asks.",
          "version": "1.0.0",
          "producer": "fabric-indexer-rs",
          "consumers": [
            "fabric-nft"
          ],
          "criticality": "high",
          "retentionDays": 2555,
          "payload": {
            "required": [
              "chainid",
              "contractaddress",
              "block_number",
              "tx_hash",
              "log_index"
            ],
            "fields": [
              {
                "name": "chainid",
                "type": "integer",
                "required": true,
                "description": "EVM chain ID the event was observed on."
              },
              {
                "name": "contractaddress",
                "type": "string",
                "required": true,
                "description": "Emitting contract address. Consumers route decoded events by (type, contractaddress).",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "contracttype",
                "type": "string",
                "required": false,
                "description": "Optional ERC/Fabric contract family discriminator (e.g. erc721, erc1155). Absent for type-shared events."
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block the event was emitted in."
              },
              {
                "name": "tx_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash that produced the log.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "log_index",
                "type": "integer",
                "required": true,
                "description": "Zero-based log index within the block."
              }
            ]
          }
        }
      }
    },
    "bundler": {
      "description": "ERC-4337 Bundler service events for UserOperation lifecycle",
      "events": {
        "bundler.bundle.submitted": {
          "description": "Event triggered when a bundle is submitted to the blockchain",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-wallet",
            "fabric-analytics",
            "fabric-subscription"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "bundle_id",
              "transaction_hash"
            ],
            "fields": [
              {
                "name": "bundle_id",
                "type": "string",
                "required": true,
                "description": "Bundle ID",
                "format": "uuid"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "Transaction hash of the bundle submission",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": false,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "operation_count",
                "type": "integer",
                "required": false,
                "description": "Number of UserOperations in the bundle"
              },
              {
                "name": "entry_point",
                "type": "string",
                "required": false,
                "description": "EntryPoint contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              }
            ]
          }
        },
        "bundler.bundle.confirmed": {
          "description": "Event triggered when a bundle transaction is confirmed on-chain",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-wallet",
            "fabric-analytics",
            "fabric-notification"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "bundle_id",
              "block_number"
            ],
            "fields": [
              {
                "name": "bundle_id",
                "type": "string",
                "required": true,
                "description": "Bundle ID",
                "format": "uuid"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block number where bundle was confirmed"
              },
              {
                "name": "block_hash",
                "type": "string",
                "required": false,
                "description": "Block hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "gas_used",
                "type": "string",
                "required": false,
                "description": "Total gas used by the bundle"
              },
              {
                "name": "effective_gas_price",
                "type": "string",
                "required": false,
                "description": "Effective gas price in Wei"
              }
            ]
          }
        },
        "bundler.bundle.failed": {
          "description": "Event triggered when a bundle transaction fails",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-wallet",
            "fabric-analytics",
            "fabric-notification"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "bundle_id",
              "reason"
            ],
            "fields": [
              {
                "name": "bundle_id",
                "type": "string",
                "required": true,
                "description": "Bundle ID",
                "format": "uuid"
              },
              {
                "name": "reason",
                "type": "string",
                "required": true,
                "description": "Failure reason or error message"
              },
              {
                "name": "error_code",
                "type": "string",
                "required": false,
                "description": "Error code if available"
              },
              {
                "name": "failed_operation_id",
                "type": "string",
                "required": false,
                "description": "ID of the UserOperation that caused the failure (if applicable)",
                "format": "uuid"
              },
              {
                "name": "revert_reason",
                "type": "string",
                "required": false,
                "description": "On-chain revert reason if available"
              }
            ]
          }
        },
        "bundler.useroperation.submitted": {
          "description": "Event triggered when a UserOperation is submitted to the bundler",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-analytics"
          ],
          "criticality": "medium",
          "retentionDays": 90,
          "payload": {
            "required": [
              "user_operation_hash",
              "sender",
              "chain_id"
            ],
            "fields": [
              {
                "name": "user_operation_hash",
                "type": "string",
                "required": true,
                "description": "The UserOperation hash (opHash)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "sender",
                "type": "string",
                "required": true,
                "description": "Smart account address that sent the operation",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "entry_point",
                "type": "string",
                "required": false,
                "description": "EntryPoint contract address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "nonce",
                "type": "string",
                "required": false,
                "description": "UserOperation nonce"
              },
              {
                "name": "operation_type",
                "type": "string",
                "required": false,
                "description": "Type of operation",
                "enumValues": [
                  "deploy",
                  "execute",
                  "batch"
                ]
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": false,
                "description": "Smart account address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "smart_account_id",
                "type": "string",
                "required": false,
                "description": "Smart account ID in platform database"
              }
            ]
          }
        },
        "bundler.useroperation.pending": {
          "description": "Event triggered when a UserOperation is queued and pending bundling",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-analytics"
          ],
          "criticality": "medium",
          "retentionDays": 90,
          "payload": {
            "required": [
              "user_operation_hash",
              "sender",
              "chain_id"
            ],
            "fields": [
              {
                "name": "user_operation_hash",
                "type": "string",
                "required": true,
                "description": "The UserOperation hash (opHash)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "sender",
                "type": "string",
                "required": true,
                "description": "Smart account address that sent the operation",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "operation_type",
                "type": "string",
                "required": false,
                "description": "Type of operation",
                "enumValues": [
                  "deploy",
                  "execute",
                  "batch"
                ]
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": false,
                "description": "Smart account address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "bundle_id",
                "type": "string",
                "required": false,
                "description": "Bundle ID if already assigned"
              }
            ]
          }
        },
        "bundler.useroperation.included": {
          "description": "Event triggered when an individual UserOperation is confirmed on-chain",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-wallet",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_operation_hash",
              "sender",
              "chain_id",
              "transaction_hash",
              "block_number",
              "success"
            ],
            "fields": [
              {
                "name": "user_operation_hash",
                "type": "string",
                "required": true,
                "description": "The UserOperation hash (opHash)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "sender",
                "type": "string",
                "required": true,
                "description": "Smart account address that sent the operation",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "On-chain transaction hash containing this UserOp",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block number where the UserOp was included"
              },
              {
                "name": "success",
                "type": "boolean",
                "required": true,
                "description": "Whether the UserOp executed successfully on-chain"
              },
              {
                "name": "operation_type",
                "type": "string",
                "required": false,
                "description": "Type of operation: deploy (account creation), execute (single op), batch",
                "enumValues": [
                  "deploy",
                  "execute",
                  "batch"
                ]
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": false,
                "description": "Smart account address (same as sender)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "actual_gas_cost",
                "type": "string",
                "required": false,
                "description": "Actual gas cost in wei"
              },
              {
                "name": "bundle_id",
                "type": "string",
                "required": false,
                "description": "Bundle ID that contained this UserOp"
              },
              {
                "name": "block_hash",
                "type": "string",
                "required": false,
                "description": "Hash of the block where the UserOp was included",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "gas_used",
                "type": "string",
                "required": false,
                "description": "Gas used by this UserOp"
              },
              {
                "name": "gas_price",
                "type": "string",
                "required": false,
                "description": "Effective gas price"
              },
              {
                "name": "paymaster",
                "type": "string",
                "required": false,
                "description": "Paymaster address if sponsored",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "logs",
                "type": "array<object>",
                "required": false,
                "description": "Execution logs from the transaction receipt. Raw blockchain logs emitted during UserOp execution (factory events, token transfers, etc.)."
              }
            ]
          }
        },
        "bundler.useroperation.failed": {
          "description": "Event triggered when a UserOperation fails or reverts on-chain",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-wallet",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_operation_hash",
              "sender",
              "chain_id",
              "error_code",
              "error_message"
            ],
            "fields": [
              {
                "name": "user_operation_hash",
                "type": "string",
                "required": true,
                "description": "The UserOperation hash (opHash)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "sender",
                "type": "string",
                "required": true,
                "description": "Smart account address that sent the operation",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "error_code",
                "type": "string",
                "required": true,
                "description": "Error code (e.g., AA21, AA31, REVERTED)"
              },
              {
                "name": "error_message",
                "type": "string",
                "required": true,
                "description": "Human-readable error message"
              },
              {
                "name": "operation_type",
                "type": "string",
                "required": false,
                "description": "Type of operation",
                "enumValues": [
                  "deploy",
                  "execute",
                  "batch"
                ]
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": false,
                "description": "Transaction hash if the op was included but reverted",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "stage",
                "type": "string",
                "required": false,
                "description": "Stage at which the failure occurred",
                "enumValues": [
                  "validation",
                  "simulation",
                  "execution",
                  "unknown"
                ]
              },
              {
                "name": "revert_reason",
                "type": "string",
                "required": false,
                "description": "Decoded revert reason if available"
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": false,
                "description": "Smart account address (same as sender)",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              }
            ]
          }
        },
        "bundler.deployment.success": {
          "description": "Event triggered when a smart account deployment succeeds on-chain",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-wallet",
            "fabric-auth",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_operation_hash",
              "smart_account_address",
              "owner_address",
              "chain_id",
              "transaction_hash",
              "block_number"
            ],
            "fields": [
              {
                "name": "user_operation_hash",
                "type": "string",
                "required": true,
                "description": "The UserOperation hash (opHash)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "smart_account_id",
                "type": "string",
                "required": false,
                "description": "Smart account ID if available"
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": true,
                "description": "Deployed smart account address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "owner_address",
                "type": "string",
                "required": true,
                "description": "Owner address of the smart account",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": true,
                "description": "On-chain transaction hash",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "block_number",
                "type": "integer",
                "required": true,
                "description": "Block number where deployment was confirmed"
              },
              {
                "name": "factory_address",
                "type": "string",
                "required": false,
                "description": "Factory contract address used for deployment",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "init_code_hash",
                "type": "string",
                "required": false,
                "description": "SHA256 hash of the initCode"
              },
              {
                "name": "gas_used",
                "type": "string",
                "required": false,
                "description": "Gas used for deployment"
              },
              {
                "name": "actual_gas_cost",
                "type": "string",
                "required": false,
                "description": "Actual gas cost in wei"
              }
            ]
          }
        },
        "bundler.deployment.failed": {
          "description": "Event triggered when a smart account deployment fails",
          "version": "1.0.0",
          "producer": "fabric-bundler",
          "consumers": [
            "fabric-wallet",
            "fabric-auth",
            "fabric-analytics"
          ],
          "criticality": "high",
          "retentionDays": 365,
          "payload": {
            "required": [
              "user_operation_hash",
              "smart_account_address",
              "owner_address",
              "chain_id",
              "error_code",
              "error_message"
            ],
            "fields": [
              {
                "name": "user_operation_hash",
                "type": "string",
                "required": true,
                "description": "The UserOperation hash (opHash)",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              },
              {
                "name": "smart_account_id",
                "type": "string",
                "required": false,
                "description": "Smart account ID if available"
              },
              {
                "name": "smart_account_address",
                "type": "string",
                "required": true,
                "description": "Smart account address that failed to deploy",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "owner_address",
                "type": "string",
                "required": true,
                "description": "Owner address",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              {
                "name": "chain_id",
                "type": "integer",
                "required": true,
                "description": "Blockchain network chain ID"
              },
              {
                "name": "error_code",
                "type": "string",
                "required": true,
                "description": "Error code (e.g., AA13, AA21)"
              },
              {
                "name": "error_message",
                "type": "string",
                "required": true,
                "description": "Human-readable error message"
              },
              {
                "name": "revert_reason",
                "type": "string",
                "required": false,
                "description": "Revert reason if available"
              },
              {
                "name": "transaction_hash",
                "type": "string",
                "required": false,
                "description": "Transaction hash if included but reverted",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            ]
          }
        }
      }
    },
    "test": {
      "description": "Test events for integration testing",
      "events": {
        "test.event": {
          "description": "Flexible test event for integration testing",
          "version": "1.0.0",
          "producer": "integration-test",
          "consumers": [],
          "criticality": "low",
          "retentionDays": 1,
          "payload": {
            "required": [],
            "fields": [
              {
                "name": "message",
                "type": "string",
                "required": false,
                "description": "Test message"
              },
              {
                "name": "created_at",
                "type": "string",
                "required": false,
                "description": "Event creation timestamp",
                "format": "date-time"
              }
            ]
          }
        }
      }
    }
  },
  "byProducer": {
    "fabric-auth": [
      "auth.user.registered",
      "auth.user.deleted",
      "auth.user.auth_method_added",
      "auth.user.auth_method_removed",
      "auth.user.consent_updated",
      "auth.user.password_changed",
      "auth.user.email_verified",
      "auth.user.mfa_enabled",
      "auth.user.mfa_disabled",
      "auth.api_key.created",
      "auth.api_key.rotated",
      "auth.api_key.revoked",
      "auth.api_key.expired",
      "auth.session_key.created",
      "auth.session_key.revoked",
      "account.project.created",
      "account.project.updated",
      "account.project.deleted",
      "account.settings.updated"
    ],
    "fabric-subscription": [
      "subscription.created",
      "subscription.activated",
      "subscription.cancelled",
      "subscription.renewed",
      "subscription.upgraded",
      "subscription.downgraded",
      "subscription.tier_updated",
      "subscription.expired",
      "subscription.past_due",
      "subscription.payment.confirmed",
      "subscription.quota.reset",
      "subscription.quota.checked",
      "subscription.quota.exceeded",
      "subscription.prepaid.insufficient",
      "prepaid.deposit.confirmed",
      "prepaid.charge.requested",
      "prepaid.spent",
      "subscription.admin.action"
    ],
    "fabric-indexer-rs": [
      "prepaid.deposited",
      "governance.dao_created",
      "governance.proposal_created",
      "governance.proposal_queued",
      "governance.proposal_executed",
      "governance.proposal_canceled",
      "governance.vote_cast",
      "governance.delegate_changed",
      "governance.governor_settings_changed",
      "chain.nft.minted",
      "chain.nft.minted_1155",
      "chain.nft.batch_minted_1155",
      "chain.nft.transferred",
      "chain.nft.transferred_single",
      "chain.nft.transferred_batch",
      "chain.token.transferred",
      "chain.nft.config_changed"
    ],
    "fabric-nft": [
      "nft.collection.deployed",
      "nft.collection.deployment.pending",
      "nft.collection.deployment.failed",
      "nft.collection.updated",
      "nft.minted",
      "nft.mint.pending",
      "nft.mint.failed",
      "nft.nft.transferred",
      "nft.nft.burned"
    ],
    "fabric-token": [
      "token.deployed",
      "token.deployment.pending",
      "token.deployment.failed",
      "token.minted",
      "token.mint.pending",
      "token.mint.failed",
      "token.updated",
      "token.token.burned",
      "token.token.transferred"
    ],
    "fabric-wallet": [
      "wallet.mpc.created",
      "wallet.mpc.creation_failed",
      "wallet.transaction.submitted",
      "wallet.operation.confirmed",
      "wallet.operation.failed",
      "wallet.deleted",
      "wallet.session_key.executed"
    ],
    "fabric-dao": [
      "dao.contract.deployed",
      "dao.proposal.created",
      "dao.proposal.voted",
      "dao.proposal.executed",
      "dao.proposal.canceled",
      "dao.governor.created",
      "dao.governor.settings_updated",
      "dao.proposal.activated",
      "dao.proposal.succeeded",
      "dao.proposal.defeated",
      "dao.proposal.queued",
      "dao.delegation.set",
      "dao.delegation.revoked",
      "dao.voting_power.snapshot_recorded"
    ],
    "fabric-bundler": [
      "bundler.bundle.submitted",
      "bundler.bundle.confirmed",
      "bundler.bundle.failed",
      "bundler.useroperation.submitted",
      "bundler.useroperation.pending",
      "bundler.useroperation.included",
      "bundler.useroperation.failed",
      "bundler.deployment.success",
      "bundler.deployment.failed"
    ],
    "integration-test": [
      "test.event"
    ]
  }
}