feat(gateway): durable user profiles with email aliases and avatars (#111224)

* feat(gateway): durable user profiles with email aliases and avatars

* fix(gateway): compress merge tombstones, content-hash avatar ETags, users CLI json output

* fix(gateway): lean profile listing, scoped avatar routing, typed email validation

* fix(gateway): protocol-complete profile payloads and consistent store reads

* fix(gateway): mark profile schema ensured only after commit

* fix(gateway): avatar endpoint HEAD support and RFC If-None-Match

* fix(gateway): profiles CI conformance — bindings, lint, knip, sql boundary

* feat(gateway): self-service profile edits for authenticated users

* fix(gateway): users.self bootstrap, tombstone-aware ownership, escaped CLI output

* fix(gateway): raw-DDL allowlist entry and lean profile exports
This commit is contained in:
Peter Steinberger
2026-07-19 00:58:43 -07:00
committed by GitHub
parent 58452de711
commit a8b7290f34
22 changed files with 1825 additions and 0 deletions
+5
View File
@@ -154,6 +154,11 @@ const entrySpecs: readonly CommandGroupDescriptorSpec<SubCliRegistrar>[] = [
loadModule: () => import("../devices-cli.js"),
exportName: "registerDevicesCli",
},
{
commandNames: ["users"],
loadModule: () => import("../users-cli.js"),
exportName: "registerUsersCli",
},
{
commandNames: ["node"],
loadModule: () => import("../node-cli.js"),
+6
View File
@@ -71,6 +71,12 @@ const subCliCommandCatalog = defineCommandDescriptorCatalog([
hasSubcommands: true,
parentDefaultHelp: true,
},
{
name: "users",
description: "Manage durable user profiles and email aliases",
hasSubcommands: true,
parentDefaultHelp: true,
},
{
name: "node",
description: "Run and manage the headless node host service",