A merchant authorizes a published app through `/v1/app-store/apps/:id/oauth/authorize`. The gateway verifies store ownership, requested scopes, redirect URI, and PKCE S256 challenge before upserting an active installation.
- Grant type is `authorization_code`.
- Authorization codes are short lived and expire after 15 minutes.
- The app must keep the original `code_verifier`; token exchange rejects missing or mismatched PKCE proof.
- The response includes `redirect_to`, `code`, `state`, granted scopes, app id, installation id, and store id.