@songsid/agend 2.2.0-beta.2 → 2.2.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/agent-cli.js +6 -2
  2. package/dist/agent-cli.js.map +1 -1
  3. package/dist/auth-api.js +2 -0
  4. package/dist/auth-api.js.map +1 -1
  5. package/dist/backend/claude-code.d.ts +39 -2
  6. package/dist/backend/claude-code.js +115 -31
  7. package/dist/backend/claude-code.js.map +1 -1
  8. package/dist/backend/credential-profile.d.ts +33 -3
  9. package/dist/backend/credential-profile.js +107 -5
  10. package/dist/backend/credential-profile.js.map +1 -1
  11. package/dist/backend/types.d.ts +1 -1
  12. package/dist/cache-service.d.ts +2 -0
  13. package/dist/cache-service.js +2 -1
  14. package/dist/cache-service.js.map +1 -1
  15. package/dist/channel/adapters/discord.d.ts +14 -1
  16. package/dist/channel/adapters/discord.js +42 -0
  17. package/dist/channel/adapters/discord.js.map +1 -1
  18. package/dist/channel/adapters/telegram.d.ts +18 -3
  19. package/dist/channel/adapters/telegram.js +66 -10
  20. package/dist/channel/adapters/telegram.js.map +1 -1
  21. package/dist/channel/telegram-markdown.d.ts +6 -0
  22. package/dist/channel/telegram-markdown.js +104 -0
  23. package/dist/channel/telegram-markdown.js.map +1 -0
  24. package/dist/channel/tool-router.js +5 -4
  25. package/dist/channel/tool-router.js.map +1 -1
  26. package/dist/channel/types.d.ts +27 -4
  27. package/dist/config-validator.js +10 -5
  28. package/dist/config-validator.js.map +1 -1
  29. package/dist/daemon.d.ts +108 -0
  30. package/dist/daemon.js +432 -32
  31. package/dist/daemon.js.map +1 -1
  32. package/dist/delivery-outbox.d.ts +29 -7
  33. package/dist/delivery-outbox.js +134 -16
  34. package/dist/delivery-outbox.js.map +1 -1
  35. package/dist/delivery-reconciliation.d.ts +18 -1
  36. package/dist/delivery-reconciliation.js +67 -2
  37. package/dist/delivery-reconciliation.js.map +1 -1
  38. package/dist/fleet-context.d.ts +1 -0
  39. package/dist/fleet-manager.d.ts +81 -4
  40. package/dist/fleet-manager.js +452 -85
  41. package/dist/fleet-manager.js.map +1 -1
  42. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +43 -10
  43. package/dist/host-memory.d.ts +10 -0
  44. package/dist/host-memory.js +33 -1
  45. package/dist/host-memory.js.map +1 -1
  46. package/dist/instance-lifecycle.d.ts +25 -6
  47. package/dist/instance-lifecycle.js +73 -26
  48. package/dist/instance-lifecycle.js.map +1 -1
  49. package/dist/locale.js +48 -18
  50. package/dist/locale.js.map +1 -1
  51. package/dist/login-controller.d.ts +20 -3
  52. package/dist/login-controller.js +71 -19
  53. package/dist/login-controller.js.map +1 -1
  54. package/dist/login-flows.d.ts +5 -2
  55. package/dist/login-flows.js +5 -4
  56. package/dist/login-flows.js.map +1 -1
  57. package/dist/memory-pressure.d.ts +13 -1
  58. package/dist/memory-pressure.js +50 -10
  59. package/dist/memory-pressure.js.map +1 -1
  60. package/dist/outbound-handlers.d.ts +63 -0
  61. package/dist/outbound-handlers.js +121 -46
  62. package/dist/outbound-handlers.js.map +1 -1
  63. package/dist/outbound-schemas.d.ts +3 -2
  64. package/dist/outbound-schemas.js +3 -1
  65. package/dist/outbound-schemas.js.map +1 -1
  66. package/dist/public-web-gateway.js +8 -5
  67. package/dist/public-web-gateway.js.map +1 -1
  68. package/dist/settings-api.js +10 -4
  69. package/dist/settings-api.js.map +1 -1
  70. package/dist/settings-change.js +2 -2
  71. package/dist/spawn-gate.js +5 -1
  72. package/dist/spawn-gate.js.map +1 -1
  73. package/dist/spawn-hold-reply.d.ts +12 -0
  74. package/dist/spawn-hold-reply.js +39 -0
  75. package/dist/spawn-hold-reply.js.map +1 -0
  76. package/dist/tips.js +1 -1
  77. package/dist/tips.js.map +1 -1
  78. package/dist/topic-commands.js +9 -2
  79. package/dist/topic-commands.js.map +1 -1
  80. package/dist/transcript-delta-reader.d.ts +3 -3
  81. package/dist/transcript-delta-reader.js +8 -8
  82. package/dist/transcript-delta-reader.js.map +1 -1
  83. package/dist/turn-resume.d.ts +2 -0
  84. package/dist/turn-resume.js +1 -1
  85. package/dist/turn-resume.js.map +1 -1
  86. package/dist/types.d.ts +2 -0
  87. package/dist/ui/chat-mentions.js +63 -0
  88. package/dist/ui/chat-render.js +25 -0
  89. package/dist/ui/chat-store.js +1 -1
  90. package/dist/ui/chat-strings.js +12 -12
  91. package/dist/ui/chat-thread.js +48 -11
  92. package/dist/ui/panel-chat.js +20 -9
  93. package/dist/ui/panel-details.js +2 -0
  94. package/dist/ui/panel-fleet.js +51 -22
  95. package/dist/ui/panel-settings.js +18 -9
  96. package/dist/ui/preview-panel.js +48 -14
  97. package/dist/ui/preview.js +5 -1
  98. package/dist/ui/settings-strings.js +6 -2
  99. package/dist/ui/settings-token.js +1 -1
  100. package/dist/ui/shared/app-i18n.js +35 -13
  101. package/dist/ui/shared/app-prefs.js +249 -0
  102. package/dist/ui/shared/app-shell.js +17 -4
  103. package/dist/ui/shared/app-store.js +5 -1
  104. package/dist/ui/shared/app.css +41 -7
  105. package/dist/ui/shared/app.js +6 -1
  106. package/dist/ui/shared/header-tools.js +55 -5
  107. package/dist/ui/shared/instance-nav.js +131 -38
  108. package/dist/ui/shared/panel-view.js +6 -0
  109. package/dist/ui/shared/theme.js +39 -7
  110. package/dist/ui/shared/ui-icons.js +1 -0
  111. package/dist/ui/shared/usage-dialog.js +13 -4
  112. package/dist/ui/shared/view-strings.js +26 -2
  113. package/dist/unrecognised-prompt.d.ts +23 -0
  114. package/dist/unrecognised-prompt.js +74 -0
  115. package/dist/unrecognised-prompt.js.map +1 -0
  116. package/dist/view-api.js +5 -0
  117. package/dist/view-api.js.map +1 -1
  118. package/dist/web-api.d.ts +13 -1
  119. package/dist/web-api.js +218 -18
  120. package/dist/web-api.js.map +1 -1
  121. package/dist/web-auth.js +3 -2
  122. package/dist/web-auth.js.map +1 -1
  123. package/dist/web-mentions.d.ts +44 -0
  124. package/dist/web-mentions.js +75 -0
  125. package/dist/web-mentions.js.map +1 -0
  126. package/dist/web-prefs.d.ts +63 -0
  127. package/dist/web-prefs.js +263 -0
  128. package/dist/web-prefs.js.map +1 -0
  129. package/dist/web-session.js +1 -1
  130. package/dist/web-session.js.map +1 -1
  131. package/package.json +1 -1
package/dist/web-auth.js CHANGED
@@ -344,10 +344,11 @@ function authorize(req, url, token, sessions, opts) {
344
344
  * idle expiry. Only these matter when a session is required for them: `/view`'s reads and the usage panel are open by
345
345
  * default and then touch nothing at all.
346
346
  */
347
- const PASSIVE_GET_PATHS = new Set(["/ui/poll", "/ui/events", "/api/profiles", "/api/ai-usage"]);
347
+ // #1665: /ui/prefs is read by the page when another device changed a preference — the page's doing, not the person's.
348
+ const PASSIVE_GET_PATHS = new Set(["/ui/poll", "/ui/events", "/api/profiles", "/api/ai-usage", "/ui/prefs"]);
348
349
  const PASSIVE_GET_PANE = /^\/api\/pane\/[^/]+$/;
349
350
  /** #1630: the pictures a page draws (avatars, server emoji) and the emoji list are loaded by the page, not done by a person. */
350
- const PASSIVE_GET_IMAGES = /^\/ui\/(?:img\/(?:bot|avatar|emoji)\/[^/]+|emojis)$/;
351
+ const PASSIVE_GET_IMAGES = /^\/ui\/(?:img\/(?:bot|avatar|emoji)\/[^/]+|emojis|mentions)$/; // #1682: mention names too
351
352
  const PASSIVE_APPLY_STATUS = /^\/api\/settings\/(?:apply\/[A-Za-z0-9-]+|(?:provider-secrets|secrets)\/[^/]+\/apply\/[A-Za-z0-9_-]+|connections\/[^/]+\/(?:secret|binding)\/apply\/[A-Za-z0-9_-]+)$/;
352
353
  export function isPassiveWebRead(method, path) {
353
354
  if ((method ?? "GET") !== "GET")
@@ -1 +1 @@
1
- {"version":3,"file":"web-auth.js","sourceRoot":"","sources":["../src/web-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-auth.js","sourceRoot":"","sources":["../src/web-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * #1682: the names the web chat shows for Discord mentions (`<@id>`, `<@&id>`, `<#id>`) — design: the comment on #1682.
3
+ *
4
+ * Asked by id, a few at a time (GET /ui/mentions?u=…&r=…&c=…: the ids a page found in what it rendered), answered
5
+ * without any Discord request: the fleet's own bots (their instance's label — fleet.yaml and the View profiles in
6
+ * profiles.db), the people seen on inbound messages (a bounded LRU), and what the Discord adapters already hold in
7
+ * their caches. A page never gets a directory: only the names of the ids it asked for.
8
+ */
9
+ export type MentionKind = "u" | "r" | "c";
10
+ export interface MentionQuery {
11
+ u: string[];
12
+ r: string[];
13
+ c: string[];
14
+ }
15
+ export type MentionNames = {
16
+ u: Record<string, string>;
17
+ r: Record<string, string>;
18
+ c: Record<string, string>;
19
+ };
20
+ /** At most this many ids in one request (all kinds together). */
21
+ export declare const MAX_MENTION_IDS = 100;
22
+ /** People remembered from inbound messages. */
23
+ export declare const MAX_SEEN_USERS = 1000;
24
+ /** `?u=1,2&r=3&c=4` → the ids, or why not: digits only (a Discord id), at most MAX_MENTION_IDS, no other parameter. */
25
+ export declare function parseMentionQuery(params: URLSearchParams): {
26
+ ok: true;
27
+ query: MentionQuery;
28
+ } | {
29
+ ok: false;
30
+ error: string;
31
+ };
32
+ /** The people seen on inbound messages: id → the name they wrote under, most recent last; the oldest go first. */
33
+ export declare class SeenUsers {
34
+ private readonly max;
35
+ private readonly names;
36
+ constructor(max?: number);
37
+ record(id: string, name: string): void;
38
+ get(id: string): string | undefined;
39
+ get size(): number;
40
+ }
41
+ /** One source of names: what it knows for the asked ids (leaving out what it does not). */
42
+ export type MentionSource = (query: MentionQuery) => Partial<MentionNames>;
43
+ /** The names for a query from the sources, in order: the first that knows an id names it. Own keys only. */
44
+ export declare function resolveMentions(query: MentionQuery, sources: MentionSource[]): MentionNames;
@@ -0,0 +1,75 @@
1
+ /** At most this many ids in one request (all kinds together). */
2
+ export const MAX_MENTION_IDS = 100;
3
+ /** People remembered from inbound messages. */
4
+ export const MAX_SEEN_USERS = 1000;
5
+ const SNOWFLAKE = /^\d{15,25}$/;
6
+ /** `?u=1,2&r=3&c=4` → the ids, or why not: digits only (a Discord id), at most MAX_MENTION_IDS, no other parameter. */
7
+ export function parseMentionQuery(params) {
8
+ const query = { u: [], r: [], c: [] };
9
+ let total = 0;
10
+ for (const key of params.keys())
11
+ if (key !== "u" && key !== "r" && key !== "c")
12
+ return { ok: false, error: `unknown parameter: ${key.slice(0, 16)}` };
13
+ for (const kind of ["u", "r", "c"]) {
14
+ for (const raw of params.getAll(kind)) {
15
+ for (const id of raw.split(",")) {
16
+ if (!id)
17
+ continue;
18
+ if (!SNOWFLAKE.test(id))
19
+ return { ok: false, error: "ids are Discord ids (digits)" };
20
+ if (!query[kind].includes(id)) {
21
+ query[kind].push(id);
22
+ total++;
23
+ }
24
+ }
25
+ }
26
+ }
27
+ if (total > MAX_MENTION_IDS)
28
+ return { ok: false, error: `at most ${MAX_MENTION_IDS} ids` };
29
+ return { ok: true, query };
30
+ }
31
+ /** The people seen on inbound messages: id → the name they wrote under, most recent last; the oldest go first. */
32
+ export class SeenUsers {
33
+ max;
34
+ names = new Map();
35
+ constructor(max = MAX_SEEN_USERS) {
36
+ this.max = max;
37
+ }
38
+ record(id, name) {
39
+ if (!SNOWFLAKE.test(id) || typeof name !== "string" || !name.trim())
40
+ return;
41
+ this.names.delete(id);
42
+ this.names.set(id, name.trim().slice(0, 100));
43
+ while (this.names.size > this.max)
44
+ this.names.delete(this.names.keys().next().value);
45
+ }
46
+ get(id) { return this.names.get(id); }
47
+ get size() { return this.names.size; }
48
+ }
49
+ /** The names for a query from the sources, in order: the first that knows an id names it. Own keys only. */
50
+ export function resolveMentions(query, sources) {
51
+ const out = { u: Object.create(null), r: Object.create(null), c: Object.create(null) };
52
+ for (const source of sources) {
53
+ let found;
54
+ try {
55
+ found = source(query);
56
+ }
57
+ catch {
58
+ continue;
59
+ }
60
+ for (const kind of ["u", "r", "c"]) {
61
+ const got = found[kind];
62
+ if (!got)
63
+ continue;
64
+ for (const id of query[kind]) {
65
+ if (Object.hasOwn(out[kind], id) || !Object.hasOwn(got, id))
66
+ continue;
67
+ const name = got[id];
68
+ if (typeof name === "string" && name.trim())
69
+ out[kind][id] = name.trim().slice(0, 100);
70
+ }
71
+ }
72
+ }
73
+ return { u: { ...out.u }, r: { ...out.r }, c: { ...out.c } };
74
+ }
75
+ //# sourceMappingURL=web-mentions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-mentions.js","sourceRoot":"","sources":["../src/web-mentions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export declare const WEB_PREFS_FILE = "web-prefs.json";
2
+ export declare const OPERATOR = "operator";
3
+ /** #1664: at most this many favorites. */
4
+ export declare const MAX_FAVORITES = 50;
5
+ export declare const WEB_PREF_KEYS: readonly string[];
6
+ export declare function isWebPrefKey(key: string): boolean;
7
+ export interface WebPrefsView {
8
+ /** Every key that is set, and its value (a key not set has its default: the page's own). */
9
+ readonly values: Record<string, unknown>;
10
+ readonly rev: number;
11
+ /** The file could not be read: these are the defaults, and writes are refused until it is fixed. */
12
+ readonly unreadable?: true;
13
+ }
14
+ export type WebPrefsWrite = {
15
+ ok: true;
16
+ view: WebPrefsView;
17
+ changed: string[];
18
+ } | {
19
+ ok: false;
20
+ status: 400 | 503;
21
+ error: string;
22
+ };
23
+ /**
24
+ * A request's `set`: own keys only, each known, each valid — or the first reason it is not. All or nothing.
25
+ * `exists`: whether an instance of that name is in the fleet now (#1664: a favorite must be one).
26
+ */
27
+ export declare function parseWebPrefsPatch(set: unknown, exists?: (name: string) => boolean): {
28
+ ok: true;
29
+ patch: Map<string, unknown>;
30
+ } | {
31
+ ok: false;
32
+ error: string;
33
+ };
34
+ export declare class WebPrefsStore {
35
+ private readonly dir;
36
+ private readonly opts;
37
+ private state;
38
+ /**
39
+ * `exists` (#1664): whether an instance of that name is in the fleet now — a favorite that is not is never served,
40
+ * and is never accepted.
41
+ */
42
+ constructor(dir: string, opts?: {
43
+ now?: () => number;
44
+ write?: (path: string, data: string) => void;
45
+ exists?: (name: string) => boolean;
46
+ });
47
+ /** parseWebPrefsPatch against this fleet. */
48
+ parsePatch(set: unknown): ReturnType<typeof parseWebPrefsPatch>;
49
+ get path(): string;
50
+ private load;
51
+ read(identity?: string): WebPrefsView;
52
+ rev(): number;
53
+ /** #1664: an instance was removed — drop it from every favorites list (a write, and a new rev, only if one had it). */
54
+ forgetInstance(name: string): void;
55
+ private viewOf;
56
+ /**
57
+ * Set (or, with null, clear) the patch's keys. `onlyIfUnset`: a device's first upload of what it had locally — only
58
+ * the keys the host does not have yet are taken, so the first device to arrive wins and the host wins from then on.
59
+ */
60
+ write(identity: string, patch: Map<string, unknown>, opts?: {
61
+ onlyIfUnset?: boolean;
62
+ }): WebPrefsWrite;
63
+ }
@@ -0,0 +1,263 @@
1
+ /**
2
+ * #1665: the web preferences that follow the person from device to device (theme, language, the sidebar's arrangement,
3
+ * the HTML-preview opt-in), kept on the host — design: the comment on #1665.
4
+ *
5
+ * - The tour and the first-run card stay per device (the user's call on #1665): they are not keys here.
6
+ * - One bucket per web identity. There is one today: every web session is the operator's (SessionRecord has no
7
+ * owner), so the file is keyed by identity and holds "operator" only; a per-owner key can come later unmigrated.
8
+ * - A fixed registry of keys, each with its own validator. Anything else is refused — "__proto__" and "constructor"
9
+ * are just unknown keys: every lookup is a Map, never an object's prototype chain.
10
+ * - The file (<home>/web-prefs.json, 0600) is replaced atomically. One that cannot be read or parsed is never
11
+ * overwritten: reads give the defaults, writes are refused, until a person looks at it.
12
+ * - `rev` rises with every change; the status frame carries it, so another device re-reads at its next poll.
13
+ */
14
+ import { readFileSync } from "node:fs";
15
+ import { join } from "node:path";
16
+ import { atomicWriteFileSync } from "./atomic-write.js";
17
+ export const WEB_PREFS_FILE = "web-prefs.json";
18
+ export const OPERATOR = "operator";
19
+ const bad = (invalid) => ({ invalid });
20
+ const isInvalid = (v) => !!v && typeof v === "object" && Object.hasOwn(v, "invalid") && Object.keys(v).length === 1;
21
+ const plain = (v) => !!v && typeof v === "object" && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
22
+ const shortText = (v, max) => typeof v === "string" && v.length <= max;
23
+ const name = (v) => typeof v === "string" && v.length >= 1 && v.length <= 128 && !/[\u0000-\u001f\u007f]/.test(v);
24
+ /** Only the listed fields, each present: an extra field is a value this version does not understand. */
25
+ function exactly(v, fields) {
26
+ const keys = Object.keys(v);
27
+ return keys.length === fields.length && fields.every((f) => Object.hasOwn(v, f));
28
+ }
29
+ function uniqueStrings(v, max, each, what) {
30
+ if (!Array.isArray(v) || v.length > max)
31
+ return bad(`${what}: a list of at most ${max}`);
32
+ if (!v.every(each))
33
+ return bad(`${what}: each a name of 1–128 characters`);
34
+ if (new Set(v).size !== v.length)
35
+ return bad(`${what}: no repeats`);
36
+ return v;
37
+ }
38
+ /** #1664: at most this many favorites. */
39
+ export const MAX_FAVORITES = 50;
40
+ const FAVORITES = "nav.favorites";
41
+ /** The status chips of the sidebar filter (src/ui/shared/instance-nav.js STATUS_FACETS). */
42
+ const STATUS_FACETS = new Set(["working", "needs", "idle", "stopped", "crashed"]);
43
+ /** Each key's validator: the value to store, or why it is refused. `null` (clear) never reaches one. */
44
+ const REGISTRY = new Map([
45
+ ["theme", (v) => (v === "light" || v === "dark" || v === "system" ? v : bad("theme: light, dark or system"))],
46
+ ["lang", (v) => (v === "en" || v === "zh-TW" ? v : bad("lang: en or zh-TW"))],
47
+ // The sidebar's drag order: the rows instance-nav.js keeps (group rows have no group_name).
48
+ ["nav.order", (v) => {
49
+ if (!Array.isArray(v) || v.length > 1000)
50
+ return bad("nav.order: a list of at most 1000 rows");
51
+ for (const row of v) {
52
+ if (!plain(row) || !exactly(row, ["item_type", "item_name", "sort_index", "group_name"]))
53
+ return bad("nav.order: rows of item_type, item_name, sort_index, group_name");
54
+ const groupRow = row.item_type === "group";
55
+ if (!groupRow && row.item_type !== "instance")
56
+ return bad("nav.order: item_type group or instance");
57
+ if (!name(row.item_name))
58
+ return bad("nav.order: item_name of 1–128 characters");
59
+ if (!Number.isSafeInteger(row.sort_index) || row.sort_index < 0)
60
+ return bad("nav.order: sort_index a whole number from 0");
61
+ if (groupRow ? row.group_name !== null : !name(row.group_name))
62
+ return bad("nav.order: group_name null for a group, the group's name for an instance");
63
+ }
64
+ return v;
65
+ }],
66
+ ["nav.collapsed", (v) => uniqueStrings(v, 200, name, "nav.collapsed")],
67
+ ["nav.filter", (v) => {
68
+ if (!plain(v) || !exactly(v, ["q", "status", "cli"]))
69
+ return bad("nav.filter: { q, status, cli }");
70
+ if (!shortText(v.q, 200))
71
+ return bad("nav.filter: q at most 200 characters");
72
+ const status = uniqueStrings(v.status, STATUS_FACETS.size, (s) => typeof s === "string" && STATUS_FACETS.has(s), "nav.filter.status");
73
+ if (isInvalid(status))
74
+ return status;
75
+ const cli = uniqueStrings(v.cli, 32, (s) => typeof s === "string" && /^[a-z0-9][a-z0-9_-]{0,31}$/.test(s), "nav.filter.cli");
76
+ if (isInvalid(cli))
77
+ return cli;
78
+ return { q: v.q, status, cli };
79
+ }],
80
+ // #1664: the starred instances, in the order they were starred (or moved). Whether each one exists is checked where
81
+ // the fleet is known (parseWebPrefsPatch's `exists`); a deleted one is dropped on read and when it is removed.
82
+ [FAVORITES, (v) => uniqueStrings(v, MAX_FAVORITES, name, FAVORITES)],
83
+ // HTML previews allowed. Who may write it at all is the route's business (a signed-in session, never the public link).
84
+ ["preview.optIn", (v) => (typeof v === "boolean" ? v : bad("preview.optIn: true or false"))],
85
+ ]);
86
+ export const WEB_PREF_KEYS = [...REGISTRY.keys()];
87
+ export function isWebPrefKey(key) { return REGISTRY.has(key); }
88
+ /**
89
+ * A request's `set`: own keys only, each known, each valid — or the first reason it is not. All or nothing.
90
+ * `exists`: whether an instance of that name is in the fleet now (#1664: a favorite must be one).
91
+ */
92
+ export function parseWebPrefsPatch(set, exists) {
93
+ if (!plain(set))
94
+ return { ok: false, error: "set: an object of preference keys" };
95
+ const patch = new Map();
96
+ const keys = Object.keys(set);
97
+ if (!keys.length)
98
+ return { ok: false, error: "set: at least one preference" };
99
+ for (const key of keys) {
100
+ const validate = REGISTRY.get(key);
101
+ if (!validate)
102
+ return { ok: false, error: `unknown_pref: ${key.slice(0, 64)}` };
103
+ const raw = set[key];
104
+ if (raw === null) {
105
+ patch.set(key, null);
106
+ continue;
107
+ }
108
+ const value = validate(raw);
109
+ if (isInvalid(value))
110
+ return { ok: false, error: value.invalid };
111
+ if (key === FAVORITES) {
112
+ const unknown = value.find((n) => !exists || !exists(n));
113
+ if (unknown !== undefined)
114
+ return { ok: false, error: `unknown_instance: ${unknown.slice(0, 64)}` };
115
+ }
116
+ patch.set(key, value);
117
+ }
118
+ return { ok: true, patch };
119
+ }
120
+ export class WebPrefsStore {
121
+ dir;
122
+ opts;
123
+ state = null;
124
+ /**
125
+ * `exists` (#1664): whether an instance of that name is in the fleet now — a favorite that is not is never served,
126
+ * and is never accepted.
127
+ */
128
+ constructor(dir, opts = {}) {
129
+ this.dir = dir;
130
+ this.opts = opts;
131
+ }
132
+ /** parseWebPrefsPatch against this fleet. */
133
+ parsePatch(set) { return parseWebPrefsPatch(set, this.opts.exists); }
134
+ get path() { return join(this.dir, WEB_PREFS_FILE); }
135
+ load() {
136
+ // A store that could not read its file tries again next time (a permission put back, a disk that recovered); one
137
+ // that did keeps what it read.
138
+ if (this.state && this.state !== "unreadable")
139
+ return this.state;
140
+ const empty = { buckets: new Map(), rev: 0 };
141
+ // Only a file that is definitely not there (ENOENT) is a new, empty store. Anything else — a read refused (EACCES),
142
+ // an I/O error, no place for the file at all, content of another shape — is "unreadable": the defaults are served
143
+ // and nothing is written, so the file is never replaced and a page or status frame never fails because of it.
144
+ try {
145
+ let raw;
146
+ try {
147
+ raw = readFileSync(this.path, "utf8");
148
+ }
149
+ catch (err) {
150
+ if (err?.code === "ENOENT")
151
+ return (this.state = empty);
152
+ return (this.state = "unreadable");
153
+ }
154
+ const doc = JSON.parse(raw);
155
+ if (!plain(doc) || doc.version !== 1 || !plain(doc.identities) || !Number.isSafeInteger(doc.rev))
156
+ return (this.state = "unreadable");
157
+ const buckets = new Map();
158
+ for (const id of Object.keys(doc.identities)) {
159
+ const raw = doc.identities[id];
160
+ if (!plain(raw) || !plain(raw.values) || !plain(raw.updated))
161
+ return (this.state = "unreadable");
162
+ const bucket = { values: new Map(), updated: new Map() };
163
+ // A key this version no longer knows, or a value it would refuse now, is left out (never served).
164
+ for (const key of Object.keys(raw.values)) {
165
+ const validate = REGISTRY.get(key);
166
+ if (!validate)
167
+ continue;
168
+ const value = validate(raw.values[key]);
169
+ if (isInvalid(value))
170
+ continue;
171
+ bucket.values.set(key, value);
172
+ const at = raw.updated[key];
173
+ bucket.updated.set(key, typeof at === "number" && Number.isFinite(at) ? at : 0);
174
+ }
175
+ buckets.set(id, bucket);
176
+ }
177
+ return (this.state = { buckets, rev: doc.rev });
178
+ }
179
+ catch {
180
+ return (this.state = "unreadable");
181
+ }
182
+ }
183
+ read(identity = OPERATOR) {
184
+ const state = this.load();
185
+ if (state === "unreadable")
186
+ return { values: {}, rev: 0, unreadable: true };
187
+ return this.viewOf(state, identity);
188
+ }
189
+ rev() { const s = this.load(); return s === "unreadable" ? 0 : s.rev; }
190
+ /** #1664: an instance was removed — drop it from every favorites list (a write, and a new rev, only if one had it). */
191
+ forgetInstance(name) {
192
+ const state = this.load();
193
+ if (state === "unreadable")
194
+ return;
195
+ for (const [identity, bucket] of state.buckets) {
196
+ const list = bucket.values.get(FAVORITES);
197
+ if (list && list.includes(name))
198
+ this.write(identity, new Map([[FAVORITES, list.filter((n) => n !== name)]]));
199
+ }
200
+ }
201
+ viewOf(state, identity) {
202
+ const values = Object.create(null);
203
+ const bucket = state.buckets.get(identity);
204
+ if (bucket)
205
+ for (const [k, v] of bucket.values)
206
+ values[k] = v;
207
+ // #1664: a favorite whose instance was deleted is dropped (paused or stopped ones are still instances: kept).
208
+ if (Object.hasOwn(values, FAVORITES)) {
209
+ const exists = this.opts.exists;
210
+ values[FAVORITES] = values[FAVORITES].filter((n) => !!exists && exists(n));
211
+ }
212
+ return { values: { ...values }, rev: state.rev };
213
+ }
214
+ /**
215
+ * Set (or, with null, clear) the patch's keys. `onlyIfUnset`: a device's first upload of what it had locally — only
216
+ * the keys the host does not have yet are taken, so the first device to arrive wins and the host wins from then on.
217
+ */
218
+ write(identity, patch, opts = {}) {
219
+ const state = this.load();
220
+ if (state === "unreadable")
221
+ return { ok: false, status: 503, error: "prefs_unreadable" };
222
+ const prior = state.buckets.get(identity);
223
+ const next = { values: new Map(prior?.values), updated: new Map(prior?.updated) };
224
+ const at = (this.opts.now ?? Date.now)();
225
+ const changed = [];
226
+ for (const [key, value] of patch) {
227
+ if (opts.onlyIfUnset && next.values.has(key))
228
+ continue;
229
+ if (value === null) {
230
+ if (!next.values.has(key))
231
+ continue;
232
+ next.values.delete(key);
233
+ next.updated.delete(key);
234
+ }
235
+ else {
236
+ if (next.values.has(key) && JSON.stringify(next.values.get(key)) === JSON.stringify(value))
237
+ continue;
238
+ next.values.set(key, value);
239
+ next.updated.set(key, at);
240
+ }
241
+ changed.push(key);
242
+ }
243
+ if (!changed.length)
244
+ return { ok: true, view: this.viewOf(state, identity), changed };
245
+ const buckets = new Map(state.buckets);
246
+ buckets.set(identity, next);
247
+ const candidate = { buckets, rev: state.rev + 1 };
248
+ (this.opts.write ?? ((path, data) => atomicWriteFileSync(path, data, { mode: 0o600 })))(this.path, serialize(candidate));
249
+ // Only once it is on disk: a failed write leaves memory as the file is.
250
+ this.state = candidate;
251
+ return { ok: true, view: this.viewOf(candidate, identity), changed };
252
+ }
253
+ }
254
+ function serialize(state) {
255
+ const identities = {};
256
+ for (const [id, b] of state.buckets) {
257
+ identities[id] = { values: Object.fromEntries(b.values), updated: Object.fromEntries(b.updated) };
258
+ }
259
+ // Object.fromEntries with a "__proto__" entry defines an own property, but no such key ever gets in: ids are ours, keys
260
+ // are the registry's.
261
+ return JSON.stringify({ version: 1, rev: state.rev, identities }, null, 2) + "\n";
262
+ }
263
+ //# sourceMappingURL=web-prefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-prefs.js","sourceRoot":"","sources":["../src/web-prefs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAGnC,MAAM,GAAG,GAAG,CAAC,OAAe,EAAW,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACxD,MAAM,SAAS,GAAG,CAAC,CAAU,EAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAE3I,MAAM,KAAK,GAAG,CAAC,CAAU,EAAgC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC;AAC/J,MAAM,SAAS,GAAG,CAAC,CAAU,EAAE,GAAW,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;AACrG,MAAM,IAAI,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxI,wGAAwG;AACxG,SAAS,OAAO,CAAC,CAA0B,EAAE,MAAgB;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AACD,SAAS,aAAa,CAAC,CAAU,EAAE,GAAW,EAAE,IAA6B,EAAE,IAAY;IACzF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,GAAG,CAAC,GAAG,IAAI,uBAAuB,GAAG,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,IAAI,mCAAmC,CAAC,CAAC;IAC3E,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IACpE,OAAO,CAAa,CAAC;AACvB,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,SAAS,GAAG,eAAe,CAAC;AAElC,4FAA4F;AAC5F,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAElF,wGAAwG;AACxG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAkC;IACxD,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC7G,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC7E,4FAA4F;IAC5F,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI;gBAAE,OAAO,GAAG,CAAC,wCAAwC,CAAC,CAAC;YAC/F,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;oBAAE,OAAO,GAAG,CAAC,iEAAiE,CAAC,CAAC;gBACxK,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,KAAK,OAAO,CAAC;gBAC3C,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU;oBAAE,OAAO,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACpG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;oBAAE,OAAO,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBACjF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAK,GAAG,CAAC,UAAqB,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBACvI,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,OAAO,GAAG,CAAC,0EAA0E,CAAC,CAAC;YACzJ,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;IACF,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,gCAAgC,CAAC,CAAC;YACnG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC,sCAAsC,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YACtI,IAAI,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;YACrC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC7H,IAAI,SAAS,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC;YAC/B,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACjC,CAAC,CAAC;IACF,oHAAoH;IACpH,+GAA+G;IAC/G,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACpE,uHAAuH;IACvH,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;CAC7F,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,MAAM,UAAU,YAAY,CAAC,GAAW,IAAa,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAahF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,MAAkC;IACjF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IAClF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAChF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACjE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,OAAO,GAAI,KAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACtG,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAKD,MAAM,OAAO,aAAa;IAMK;IAA8B;IALnD,KAAK,GAAgC,IAAI,CAAC;IAClD;;;OAGG;IACH,YAA6B,GAAW,EAAmB,OAAiH,EAAE;QAAjJ,QAAG,GAAH,GAAG,CAAQ;QAAmB,SAAI,GAAJ,IAAI,CAA+G;IAAG,CAAC;IAElL,6CAA6C;IAC7C,UAAU,CAAC,GAAY,IAA2C,OAAO,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAErH,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI;QACV,iHAAiH;QACjH,+BAA+B;QAC/B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACjE,MAAM,KAAK,GAAU,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACpD,oHAAoH;QACpH,kHAAkH;QAClH,8GAA8G;QAC9G,IAAI,CAAC;YACH,IAAI,GAAW,CAAC;YAChB,IAAI,CAAC;gBAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAC1D,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC;YACrI,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC1C,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC;gBACjG,MAAM,MAAM,GAAW,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBACjE,kGAAkG;gBAClG,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,CAAC,QAAQ;wBAAE,SAAS;oBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBACxC,IAAI,SAAS,CAAC,KAAK,CAAC;wBAAE,SAAS;oBAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAa,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAmB,QAAQ;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,YAAY;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,KAAa,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/E,uHAAuH;IACvH,cAAc,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,YAAY;YAAE,OAAO;QACnC,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAyB,CAAC;YAClE,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,KAAY,EAAE,QAAgB;QAC3C,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM;YAAE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM;gBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,8GAA8G;QAC9G,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAChC,MAAM,CAAC,SAAS,CAAC,GAAI,MAAM,CAAC,SAAS,CAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAgB,EAAE,KAA2B,EAAE,OAAkC,EAAE;QACvF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,YAAY;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QACzF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAW,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1F,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACrG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;QACtF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAU,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACzD,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACzH,wEAAwE;QACxE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;CACF;AAED,SAAS,SAAS,CAAC,KAAY;IAC7B,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpG,CAAC;IACD,wHAAwH;IACxH,sBAAsB;IACtB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AACpF,CAAC"}
@@ -29,7 +29,7 @@ const HOUR = 60 * 60 * 1000;
29
29
  const MINUTE = 60 * 1000;
30
30
  /** Design D4. The gateway numbers are shorter because a session there is reachable from the internet. */
31
31
  export const DEFAULT_SESSION_POLICY = {
32
- local: { absoluteMs: 12 * HOUR, idleMs: 2 * HOUR },
32
+ local: { absoluteMs: 48 * HOUR, idleMs: 48 * HOUR }, // #1670: two days without signing in again (user, 2026-10-12)
33
33
  gateway: { absoluteMs: 4 * HOUR, idleMs: 30 * MINUTE },
34
34
  };
35
35
  /**