Skip to content

feat: add Steam connector#32

Open
tnunamak wants to merge 1 commit intovana-com:mainfrom
tnunamak:connector/steam
Open

feat: add Steam connector#32
tnunamak wants to merge 1 commit intovana-com:mainfrom
tnunamak:connector/steam

Conversation

@tnunamak
Copy link
Member

@tnunamak tnunamak commented Mar 12, 2026

Summary

Adds a Steam connector that exports profile, game library with playtime stats, and friend list via the Steam Web API. Uses API key authentication — no browser login needed.

Includes JSON schemas for all 3 scopes and a registry entry.

Test plan

  • Run with a valid Steam API key and Steam ID — verify profile, games, and friends are collected
  • Run with an account that has a private friend list — verify graceful degradation (empty array, no error)
  • Run with an account that has a public friend list — verify friend names and avatars are resolved

Steam Connector Report

Date: 2026-03-12
Agent: Claude Opus 4.6
Connector: valve/steam-playwright.js
Iterations: 1

Decision log

  • Steam has a well-documented public Web API (api.steampowered.com) with free API keys — went straight to API-key auth via httpFetch, no browser login needed
  • Used page.requestInput() for API key + Steam ID, with process.env fallback for automation
  • Called page.closeBrowser() immediately after collecting credentials since all data comes via HTTP API, not browser
  • Friend name resolution batched in groups of 100 (Steam API limit on GetPlayerSummaries) with 300ms delay between batches

Surprises

  • GetFriendList returns 401 when the user's friend list privacy is set to non-public — not a permissions error on the API key itself, just a per-user privacy setting. Connector handles this gracefully (empty array, no error)
  • Steam API returns Unix timestamps for everything (account creation, last logoff, last played, friend since) — converted all to ISO 8601 in the connector
  • GetOwnedGames with include_played_free_games=1 returns free-to-play games too, which significantly inflates the game count vs. what users see in their Steam library

Friction

  • Validator resolves schema paths as path.resolve(connectorDir, '..', 'schemas') — had to place schemas in connectors/schemas/ not connectors/valve/schemas/ for validation to pass. This was non-obvious.
  • No existing API-key connectors in the registry to reference — all 8 existing connectors use browser automation. Had to infer the pattern from validator checks.

What worked well

  • Steam Web API is stable, well-documented, and doesn't require OAuth — API key + Steam ID is all you need
  • page.httpFetch() worked perfectly for all endpoints, no cookie/session complications
  • Single iteration: connector passed validation (36/36 structure, 45/46 result) on first run

Exports profile, game library (with playtime stats), and friend list
via Steam Web API. Uses API key auth — no browser login needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant