Skip to content

add mod-list snapshot telemetry (LAZ-701) - #23924

Merged
IDCs merged 3 commits into
masterfrom
task/laz-701
Aug 12, 2026
Merged

add mod-list snapshot telemetry (LAZ-701)#23924
IDCs merged 3 commits into
masterfrom
task/laz-701

Conversation

@IDCs

@IDCs IDCs commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Emit a per-game mod-list snapshot to the internal v3 telemetry ingest endpoint (POST /v3/telemetry/mod-lists) on game launch and on deploy, gated on analytics consent and being logged in.

The snapshot is a flat payload: instance_id, game_id, captured_at, vortex_version, and one entry per installed mod (source, mod_id, file_id, version, enabled). mod_id/file_id are Nexus UIDs, null for non-Nexus mods. The server reads the account id from the auth token, so no user_id is sent.

Request types are generated from a vendored internal OpenAPI fragment (nexus-api-v3/schema/internal/telemetry.yaml) via a second codegen output, so the payload is checked against the endpoint schema at build time. A typed internal v3 client (createNexusV3InternalClient / submitModLists) carries the request and shares auth and transport with the public client.

closes LAZ-701

IDCs added 3 commits August 11, 2026 08:08
Collect a per-game mod-list snapshot on the client and POST it to the Nexus
v3 ingest endpoint, authenticated the same way as the generated v3 client
(OAuth bearer, else api key). The payload carries user_id, the app instance
id, numeric game_id, vortex_version, and one entry per installed mod
(source, mod_id, file_id, version, enabled) across all sources - mod_id and
file_id are null for non-Nexus mods. Gated on analytics consent and login.

Emitted on game launch (StarterInfo) and after a deploy (mod_management).

The v3 ingest path is provisional; the backend endpoint is still pending.
Once that's done, we need to update the V3 client.

part of LAZ-701
Emit a per-game mod-list snapshot to the internal v3 telemetry ingest
endpoint (POST /v3/telemetry/mod-lists) on game launch and on deploy,
gated on analytics consent and being logged in.

The snapshot is a flat payload: instance_id, game_id, captured_at,
vortex_version, and one entry per installed mod (source, mod_id, file_id,
version, enabled). mod_id/file_id are Nexus UIDs, null for non-Nexus mods.
The server reads the account id from the auth token, so no user_id is sent.

Request types are generated from a vendored internal OpenAPI fragment
(nexus-api-v3/schema/internal/telemetry.yaml) via a second codegen output,
so the payload is checked against the endpoint schema at build time. A typed
internal v3 client (createNexusV3InternalClient / submitModLists) carries the
request and shares auth and transport with the public client.

closes LAZ-701
@IDCs IDCs self-assigned this Aug 11, 2026
@IDCs
IDCs requested a review from a team as a code owner August 11, 2026 10:01

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't exposed on the normal openapi.yaml file?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, backend decided to keep it internal and share the spec fragment. More info here if interested.

@insomnious insomnious left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked end to end, my mod lists are showing up in Clickhouse

@IDCs
IDCs merged commit 6a10c05 into master Aug 12, 2026
8 checks passed
@IDCs
IDCs deleted the task/laz-701 branch August 12, 2026 09:16
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.

3 participants