Parent: #4
Delivers the Upload API authentication plumbing and the two reference-data endpoints needed before files can be uploaded. The Upload API uses a different auth mechanism (X-Api-Token header) and different base URLs (site-relative to https://{game}.curseforge.com/api/).
Acceptance criteria:
Endpoints:
| Function |
Method |
Path |
Get-CurseForgeUploadGameVersion |
GET |
/api/game/versions |
Get-CurseForgeUploadGameDependency |
GET |
/api/game/dependencies |
Auth: Uses X-Api-Token header (different from Core API's x-api-key).
Base URL pattern: https://{game}.curseforge.com/api/ where {game} is the game slug (e.g., minecraft, wow).
Decision: Separate private Invoke-CurseForgeUploadAPI rather than overloading Invoke-CurseForgeAPI, because the auth header name, base URL resolution, and response shapes are fundamentally different.
Blocked by: #5 (needs the Context foundation)
Sub-issues
See linked Tasks below.
Parent: #4
Delivers the Upload API authentication plumbing and the two reference-data endpoints needed before files can be uploaded. The Upload API uses a different auth mechanism (
X-Api-Tokenheader) and different base URLs (site-relative tohttps://{game}.curseforge.com/api/).Acceptance criteria:
Invoke-CurseForgeUploadAPI(private) handles Upload API auth and base URL resolution-Gameparameter determines the site-relative base URL (e.g.,minecraft→https://minecraft.curseforge.com/api/)Get-CurseForgeUploadGameVersionretrieves game versions with their IDs (needed for upload metadata)Get-CurseForgeUploadGameDependencyretrieves available dependencies (slugs and IDs)CurseForgeContextobject (.AuthorTokenproperty set duringConnect-CurseForge)Endpoints:
Get-CurseForgeUploadGameVersion/api/game/versionsGet-CurseForgeUploadGameDependency/api/game/dependenciesAuth: Uses
X-Api-Tokenheader (different from Core API'sx-api-key).Base URL pattern:
https://{game}.curseforge.com/api/where{game}is the game slug (e.g.,minecraft,wow).Decision: Separate private
Invoke-CurseForgeUploadAPIrather than overloadingInvoke-CurseForgeAPI, because the auth header name, base URL resolution, and response shapes are fundamentally different.Blocked by: #5 (needs the Context foundation)
Sub-issues
See linked Tasks below.