What to build
Read-only catalog endpoints. Needed before CreateServerData in the Servers slice can be properly typed (regions, sizes per provider).
Endpoints (from docs/forge.openapi.json):
GET /providers
GET /providers/{provider}
GET /providers/{provider}/regions
GET /providers/{provider}/regions/{region}
GET /providers/{provider}/regions/{region}/sizes
GET /providers/{provider}/regions/{region}/sizes/{size}
GET /providers/{provider}/sizes
GET /providers/{provider}/sizes/{size}
Source design: see project_sdk_design.md in the project's memory.
Acceptance criteria
Blocked by
What to build
Read-only catalog endpoints. Needed before
CreateServerDatain the Servers slice can be properly typed (regions, sizes per provider).Endpoints (from
docs/forge.openapi.json):GET /providersGET /providers/{provider}GET /providers/{provider}/regionsGET /providers/{provider}/regions/{region}GET /providers/{provider}/regions/{region}/sizesGET /providers/{provider}/regions/{region}/sizes/{size}GET /providers/{provider}/sizesGET /providers/{provider}/sizes/{size}Source design: see
project_sdk_design.mdin the project's memory.Acceptance criteria
Provider,ProviderRegion,ProviderSizeDTOs (readonly,JsonSerializable,::from(array))ProvidersResourceaccessed via$forge->providers()(this is not org-scoped)$forge->providers()->all()→list<Provider>(orPage<Provider>if the endpoint paginates — confirm from spec)$forge->provider($name)->get()→Provider$forge->provider($name)->regions()->all()→ list ofProviderRegion$forge->provider($name)->region($id)->sizes()->all()→ list ofProviderSize$forge->provider($name)->sizes()->all()→ list ofProviderSize(region-independent)composer testgreenBlocked by
Page<T>+ list-options pattern #3