Let SpaceGame and Unscouted register, maintain, and browse sessions without duplicating HTTP protocol code.
Scope
Implement typed publisher and browser clients over caller-supplied/configured HttpClient.
Provide registration, update, heartbeat, deregistration, query, paging, cancellation, disposal, and lease-loss handling.
Retry only safe/idempotent operations using server guidance and bounded jitter.
Expose stable result/error types rather than HTTP implementation details.
Keep the public SDK engine-independent and avoid hidden global state or background work that cannot be cancelled.
Provide test fakes/interfaces for consumer tests.
Acceptance criteria
A test host publishes, renews, updates, and deregisters through the SDK.
A test browser filters and pages sessions without direct HTTP handling.
Heartbeat stops cleanly on cancellation/disposal and surfaces lease loss.
Retries never duplicate unsafe registration or join effects.
SDK APIs contain no Godot types and no embedded game credential.
HTTP resources, response bodies, and cancellation registrations are disposed.
Contract/server/client compatibility tests run together.
Parent: #1
Depends on: #4, #7, #8
## Outcome
Let SpaceGame and Unscouted register, maintain, and browse sessions without duplicating HTTP protocol code.
## Scope
- Implement typed publisher and browser clients over caller-supplied/configured `HttpClient`.
- Provide registration, update, heartbeat, deregistration, query, paging, cancellation, disposal, and lease-loss handling.
- Retry only safe/idempotent operations using server guidance and bounded jitter.
- Expose stable result/error types rather than HTTP implementation details.
- Keep the public SDK engine-independent and avoid hidden global state or background work that cannot be cancelled.
- Provide test fakes/interfaces for consumer tests.
## Acceptance criteria
- A test host publishes, renews, updates, and deregisters through the SDK.
- A test browser filters and pages sessions without direct HTTP handling.
- Heartbeat stops cleanly on cancellation/disposal and surfaces lease loss.
- Retries never duplicate unsafe registration or join effects.
- SDK APIs contain no Godot types and no embedded game credential.
- HTTP resources, response bodies, and cancellation registrations are disposed.
- Contract/server/client compatibility tests run together.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent: #1
Depends on: #4, #7, #8
Outcome
Let SpaceGame and Unscouted register, maintain, and browse sessions without duplicating HTTP protocol code.
Scope
HttpClient.Acceptance criteria
Starting implementation on
codex/issue-9-client-sdk, stacked on the verified #2–#8 foundation. I’ll build engine-independent publisher/browser interfaces over caller-ownedHttpClient, typed results, cancellation/disposal-safe lease maintenance, bounded server-guided retry behavior for idempotent operations only, paging, lease-loss signaling, and reusable consumer fakes.Implemented and pushed on
codex/issue-9-client-sdkat06c3973.Highlights:
HttpClient.Audit fixes preserved registration payloads across retries, covered proxy transient statuses, enforced non-null success values, and made exceptional lease disposal cleanup-safe.
Verification:
The issue remains open until the stacked branch is landed.