-- v1.1.6: per-app secret material. Currently holds the HMAC signing key -- used to mint + verify realtime subscriber tokens -- (pubsub::subscriber_token → SSE /realtime/topics handshake). -- -- The key is: -- * stable across restarts (issued tokens stay valid until expiry), -- * per-app (a token signed by app A is rejected by app B), -- * never script-accessible (scripts can't print/exfiltrate it — the -- SDK only mints tokens, it never returns the key). -- -- The row is created lazily on the first pubsub::subscriber_token call -- for an app (32 random bytes). This table is the natural home for -- v1.1.7's encrypted per-app secrets work. CREATE TABLE app_secrets ( app_id UUID PRIMARY KEY REFERENCES apps(id) ON DELETE CASCADE, realtime_signing_key BYTEA NOT NULL, -- 32 random bytes created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() );