Summary
Inference route API keys are stored in full in the same SQLite or Postgres object store as every other entity. The InferenceRoute protobuf, including spec.api_key, is encoded to bytes and written as the row payload. There is no dedicated secret store, no encryption of sensitive fields at rest, and no redaction when routes are listed or returned. A compromise of the database file, a backup, or any dump of the objects table exposes all inference API keys.
Source Code
- Route create/update in
crates/navigator-server/src/inference.rs persist the full InferenceRoute (including spec.api_key) via store.put_message.
- The store abstraction in
crates/navigator-server/src/persistence/mod.rs implements put_message (lines 126-137) by encoding the message with message.encode_to_vec() and calling put(object_type, id, name, payload). The Postgres and SQLite backends write this payload as a blob with no per-field encryption or secret handling.
- When listing routes,
inference.rs (lines 258-261) decodes each record.payload as InferenceRoute and appends it to the response with no redaction of spec.api_key.
Originally by @drew on 2026-02-19T08:59:02.208-08:00
Summary
Inference route API keys are stored in full in the same SQLite or Postgres object store as every other entity. The
InferenceRouteprotobuf, includingspec.api_key, is encoded to bytes and written as the row payload. There is no dedicated secret store, no encryption of sensitive fields at rest, and no redaction when routes are listed or returned. A compromise of the database file, a backup, or any dump of the objects table exposes all inference API keys.Source Code
crates/navigator-server/src/inference.rspersist the fullInferenceRoute(includingspec.api_key) viastore.put_message.crates/navigator-server/src/persistence/mod.rsimplementsput_message(lines 126-137) by encoding the message withmessage.encode_to_vec()and callingput(object_type, id, name, payload). The Postgres and SQLite backends write this payload as a blob with no per-field encryption or secret handling.inference.rs(lines 258-261) decodes eachrecord.payloadasInferenceRouteand appends it to the response with no redaction ofspec.api_key.Originally by @drew on 2026-02-19T08:59:02.208-08:00