-- Migration 003: Create tokens table -- Purpose: Store access token metadata (hashed tokens) -- Per ADR-004: Opaque tokens with database storage CREATE TABLE IF NOT EXISTS tokens ( id INTEGER PRIMARY KEY AUTOINCREMENT, token_hash TEXT NOT NULL UNIQUE, -- SHA-256 hash of token me TEXT NOT NULL, -- User's domain URL client_id TEXT NOT NULL, -- Client application URL scope TEXT NOT NULL DEFAULT '', -- Requested scopes (empty for v1.0.0) issued_at TIMESTAMP NOT NULL, -- When token was created expires_at TIMESTAMP NOT NULL, -- When token expires revoked BOOLEAN NOT NULL DEFAULT 0 -- Revocation flag (future use) ); -- Indexes for performance CREATE INDEX IF NOT EXISTS idx_tokens_hash ON tokens(token_hash); CREATE INDEX IF NOT EXISTS idx_tokens_expires ON tokens(expires_at); CREATE INDEX IF NOT EXISTS idx_tokens_me ON tokens(me); CREATE INDEX IF NOT EXISTS idx_tokens_client ON tokens(client_id); -- Record this migration INSERT INTO migrations (version, description) VALUES (3, 'Create tokens table for access token storage');