@pellux/goodvibes-sdk 0.33.37 → 0.34.0

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 (83) hide show
  1. package/dist/client-auth/control-plane-auth-snapshot.d.ts +23 -0
  2. package/dist/client-auth/control-plane-auth-snapshot.d.ts.map +1 -1
  3. package/dist/client-auth/oauth-types.d.ts +18 -0
  4. package/dist/client-auth/oauth-types.d.ts.map +1 -1
  5. package/dist/client-auth/types.d.ts +26 -0
  6. package/dist/client-auth/types.d.ts.map +1 -1
  7. package/dist/client.d.ts +22 -0
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/contracts/artifacts/operator-contract.json +1463 -10
  10. package/dist/events/knowledge.d.ts +31 -0
  11. package/dist/events/knowledge.d.ts.map +1 -1
  12. package/dist/events/tasks.d.ts +58 -0
  13. package/dist/events/tasks.d.ts.map +1 -1
  14. package/dist/events/transport.d.ts +60 -0
  15. package/dist/events/transport.d.ts.map +1 -1
  16. package/dist/platform/agents/wrfc-config.d.ts +6 -0
  17. package/dist/platform/agents/wrfc-config.d.ts.map +1 -1
  18. package/dist/platform/agents/wrfc-config.js +6 -0
  19. package/dist/platform/agents/wrfc-controller.d.ts +74 -0
  20. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  21. package/dist/platform/agents/wrfc-controller.js +368 -9
  22. package/dist/platform/agents/wrfc-reporting.d.ts +60 -0
  23. package/dist/platform/agents/wrfc-reporting.d.ts.map +1 -1
  24. package/dist/platform/agents/wrfc-reporting.js +131 -7
  25. package/dist/platform/agents/wrfc-types.d.ts +12 -0
  26. package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
  27. package/dist/platform/config/manager.d.ts +11 -0
  28. package/dist/platform/config/manager.d.ts.map +1 -1
  29. package/dist/platform/config/manager.js +17 -1
  30. package/dist/platform/config/schema-domain-core.d.ts +2 -0
  31. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  32. package/dist/platform/config/schema-domain-core.js +17 -0
  33. package/dist/platform/config/schema-shared.d.ts +6 -0
  34. package/dist/platform/config/schema-shared.d.ts.map +1 -1
  35. package/dist/platform/config/schema-types.d.ts +9 -2
  36. package/dist/platform/config/schema-types.d.ts.map +1 -1
  37. package/dist/platform/control-plane/method-catalog-calendar.d.ts +9 -0
  38. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -0
  39. package/dist/platform/control-plane/method-catalog-calendar.js +117 -0
  40. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  41. package/dist/platform/control-plane/method-catalog-channels.js +174 -0
  42. package/dist/platform/control-plane/method-catalog-control-automation.d.ts.map +1 -1
  43. package/dist/platform/control-plane/method-catalog-control-automation.js +10 -4
  44. package/dist/platform/control-plane/method-catalog-email.d.ts +9 -0
  45. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -0
  46. package/dist/platform/control-plane/method-catalog-email.js +101 -0
  47. package/dist/platform/control-plane/method-catalog-knowledge.js +4 -4
  48. package/dist/platform/control-plane/method-catalog-runtime.d.ts.map +1 -1
  49. package/dist/platform/control-plane/method-catalog-runtime.js +13 -0
  50. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  51. package/dist/platform/control-plane/method-catalog.js +4 -0
  52. package/dist/platform/control-plane/routes/automation.js +2 -2
  53. package/dist/platform/control-plane/routes/operator.d.ts.map +1 -1
  54. package/dist/platform/control-plane/routes/operator.js +2 -0
  55. package/dist/platform/control-plane/routes/sessions.js +1 -1
  56. package/dist/platform/daemon/http/router.d.ts.map +1 -1
  57. package/dist/platform/daemon/http/router.js +12 -2
  58. package/dist/platform/daemon/http-listener.d.ts +17 -0
  59. package/dist/platform/daemon/http-listener.d.ts.map +1 -1
  60. package/dist/platform/daemon/http-listener.js +186 -7
  61. package/dist/platform/knowledge/knowledge-api.d.ts +1 -1
  62. package/dist/platform/knowledge/knowledge-api.d.ts.map +1 -1
  63. package/dist/platform/knowledge/knowledge-api.js +1 -1
  64. package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
  65. package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +4 -0
  66. package/dist/platform/runtime/store/helpers/reducers/sync.d.ts.map +1 -1
  67. package/dist/platform/runtime/store/helpers/reducers/sync.js +4 -0
  68. package/dist/platform/security/http-auth.d.ts.map +1 -1
  69. package/dist/platform/security/http-auth.js +11 -4
  70. package/dist/platform/security/user-auth.d.ts +98 -2
  71. package/dist/platform/security/user-auth.d.ts.map +1 -1
  72. package/dist/platform/security/user-auth.js +195 -18
  73. package/dist/platform/sessions/manager.d.ts +19 -2
  74. package/dist/platform/sessions/manager.d.ts.map +1 -1
  75. package/dist/platform/sessions/manager.js +43 -6
  76. package/dist/platform/state/memory-registry.d.ts +1 -1
  77. package/dist/platform/state/memory-registry.d.ts.map +1 -1
  78. package/dist/platform/state/memory-registry.js +2 -2
  79. package/dist/platform/state/memory-store.d.ts +1 -1
  80. package/dist/platform/state/memory-store.d.ts.map +1 -1
  81. package/dist/platform/state/memory-store.js +2 -2
  82. package/dist/platform/version.js +1 -1
  83. package/package.json +9 -9
@@ -540,11 +540,21 @@ export class DaemonHttpRouter {
540
540
  return body;
541
541
  const username = typeof body.username === 'string' ? body.username : '';
542
542
  const password = typeof body.password === 'string' ? body.password : '';
543
- const user = this.context.userAuth.authenticate(username, password);
544
- if (!user) {
543
+ const authResult = this.context.userAuth.authenticate(username, password);
544
+ if (!authResult.ok) {
545
+ if (authResult.lockedUntilMs) {
546
+ const retryAfterSeconds = Math.ceil((authResult.lockedUntilMs - Date.now()) / 1_000);
547
+ return Response.json({ error: 'Too many requests' }, { status: 429, headers: { 'Retry-After': String(Math.max(1, retryAfterSeconds)) } });
548
+ }
545
549
  return Response.json({ error: 'Invalid credentials' }, { status: 401 });
546
550
  }
551
+ const { user } = authResult;
547
552
  const session = this.context.userAuth.createSession(user.username);
553
+ // Auto-retire the bootstrap credential file ONLY after the first
554
+ // NON-bootstrap login (mirrors http-listener.ts handleLogin behaviour).
555
+ if (!authResult.usedBootstrapCredential && this.context.userAuth.inspect().bootstrapCredentialPresent) {
556
+ this.context.userAuth.clearBootstrapCredentialFile();
557
+ }
548
558
  return Response.json({
549
559
  authenticated: true,
550
560
  token: session.token,
@@ -1,6 +1,12 @@
1
1
  import { HookDispatcher } from '../hooks/dispatcher.js';
2
2
  import { UserAuthManager } from '../security/user-auth.js';
3
3
  import { ConfigManager } from '../config/manager.js';
4
+ /**
5
+ * Returns true when the given IP address belongs to a Cloudflare-owned range.
6
+ * Used to validate CF-Connecting-IP header trust: only trust it when the
7
+ * connecting peer is actually a Cloudflare edge node.
8
+ */
9
+ export declare function isCloudflareIp(ip: string): boolean;
4
10
  interface HttpListenerConfig {
5
11
  port?: number | undefined;
6
12
  host?: string | undefined;
@@ -28,6 +34,15 @@ interface HttpListenerConfig {
28
34
  * allowedOrigins must be configured or hostMode must be local/loopback.
29
35
  */
30
36
  enforceCors?: boolean | undefined;
37
+ /**
38
+ * When true, extract the real client IP from CF-Connecting-IP ONLY when the
39
+ * connecting peer address belongs to a Cloudflare-owned CIDR range.
40
+ * Requires trustProxy=true. Prevents header-injection bypass: a peer that is
41
+ * not a Cloudflare edge node cannot fake CF-Connecting-IP to manipulate rate
42
+ * limiting. When trustProxy=false, CF-Connecting-IP is ignored regardless.
43
+ * Default: false.
44
+ */
45
+ trustCloudflare?: boolean | undefined;
31
46
  /** Pre-configured UserAuthManager owned by the runtime service graph. */
32
47
  userAuth: UserAuthManager;
33
48
  }
@@ -60,6 +75,8 @@ export declare class HttpListener {
60
75
  private loginRateLimiter;
61
76
  /** Whether to trust x-forwarded-for / x-real-ip for client IP resolution. */
62
77
  private trustProxy;
78
+ /** When true, trust CF-Connecting-IP only from validated Cloudflare edge IPs. */
79
+ private trustCloudflare;
63
80
  private readonly configManager;
64
81
  private readonly serveFactory;
65
82
  private tlsState;
@@ -1 +1 @@
1
- {"version":3,"file":"http-listener.d.ts","sourceRoot":"","sources":["../../../src/platform/daemon/http-listener.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAMxD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAarD,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;IAC5C,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,yEAAyE;IACzE,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IA4BX,OAAO,CAAC,MAAM;IA3B1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAW;IACjC,kEAAkE;IAClE,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,WAAW,CAAc;IACjC,oDAAoD;IACpD,OAAO,CAAC,gBAAgB,CAAc;IACtC,6EAA6E;IAC7E,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAA0C;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB,CAA6B;IACtD,gFAAgF;IAChF,OAAO,CAAC,WAAW,CAAS;IAC5B,sEAAsE;IACtE,OAAO,CAAC,kBAAkB,CAA8B;IACxD,0FAA0F;IAC1F,OAAO,CAAC,aAAa,CAAS;gBAEV,MAAM,EAAE,kBAAkB;IAoC9C;;;;OAIG;IACH,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAU/D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;;OAGG;IACH,OAAO,CAAC,gCAAgC;IAwDxC;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAMD,OAAO,CAAC,SAAS;YAOH,aAAa;YAgBb,aAAa;YAgCb,mBAAmB;YA4DnB,WAAW;YA+CX,aAAa;CAgD5B"}
1
+ {"version":3,"file":"http-listener.d.ts","sourceRoot":"","sources":["../../../src/platform/daemon/http-listener.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAMxD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA2HrD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAWlD;AAMD,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;IAC5C,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,yEAAyE;IACzE,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IA8BX,OAAO,CAAC,MAAM;IA7B1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAW;IACjC,kEAAkE;IAClE,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,WAAW,CAAc;IACjC,oDAAoD;IACpD,OAAO,CAAC,gBAAgB,CAAc;IACtC,6EAA6E;IAC7E,OAAO,CAAC,UAAU,CAAU;IAC5B,iFAAiF;IACjF,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAA0C;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB,CAA6B;IACtD,gFAAgF;IAChF,OAAO,CAAC,WAAW,CAAS;IAC5B,sEAAsE;IACtE,OAAO,CAAC,kBAAkB,CAA8B;IACxD,0FAA0F;IAC1F,OAAO,CAAC,aAAa,CAAS;gBAEV,MAAM,EAAE,kBAAkB;IAqC9C;;;;OAIG;IACH,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAU/D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;;OAGG;IACH,OAAO,CAAC,gCAAgC;IAwDxC;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAMD,OAAO,CAAC,SAAS;YAOH,aAAa;YAgBb,aAAa;YA6Cb,mBAAmB;YA4DnB,WAAW;YAuEX,aAAa;CAgD5B"}
@@ -13,6 +13,145 @@ import { createHostModeRestartWatcher } from './host-mode-watcher.js';
13
13
  import { RateLimiter } from './http/rate-limiter.js';
14
14
  import { readTextBodyWithinLimit } from '../utils/request-body.js';
15
15
  // ---------------------------------------------------------------------------
16
+ // Cloudflare IP ranges (maintained constant; do NOT fetch at runtime by default).
17
+ // Source: https://www.cloudflare.com/ips/
18
+ // Last reviewed: 2026-06-11
19
+ // ---------------------------------------------------------------------------
20
+ /** Cloudflare published IPv4 CIDR ranges (full list). */
21
+ const CLOUDFLARE_IPV4_CIDRS = [
22
+ ['103.21.244.0', 22],
23
+ ['103.22.200.0', 22],
24
+ ['103.31.4.0', 22],
25
+ ['104.16.0.0', 13],
26
+ ['104.24.0.0', 14],
27
+ ['108.162.192.0', 18],
28
+ ['131.0.72.0', 22],
29
+ ['141.101.64.0', 18],
30
+ ['162.158.0.0', 15],
31
+ ['172.64.0.0', 13],
32
+ ['173.245.48.0', 20],
33
+ ['188.114.96.0', 20],
34
+ ['190.93.240.0', 20],
35
+ ['197.234.240.0', 22],
36
+ ['198.41.128.0', 17],
37
+ ];
38
+ /** Cloudflare published IPv6 CIDR prefixes (prefix string, prefix-length pairs). */
39
+ const CLOUDFLARE_IPV6_PREFIXES = [
40
+ ['2400:cb00::', 32],
41
+ ['2606:4700::', 32],
42
+ ['2803:f800::', 32],
43
+ ['2405:b500::', 32],
44
+ ['2405:8100::', 32],
45
+ ['2a06:98c0::', 29],
46
+ ['2c0f:f248::', 32],
47
+ ];
48
+ function ipv4ToUint32(ip) {
49
+ const parts = ip.split('.');
50
+ if (parts.length !== 4)
51
+ return undefined;
52
+ let n = 0;
53
+ for (const part of parts) {
54
+ const v = Number(part);
55
+ if (!Number.isInteger(v) || v < 0 || v > 255)
56
+ return undefined;
57
+ n = (n << 8) | v;
58
+ }
59
+ // Shift result to unsigned 32-bit
60
+ return n >>> 0;
61
+ }
62
+ function isIpInCidr4(ip, cidrNet, prefixLen) {
63
+ const ipInt = ipv4ToUint32(ip);
64
+ const netInt = ipv4ToUint32(cidrNet);
65
+ if (ipInt === undefined || netInt === undefined)
66
+ return false;
67
+ const mask = prefixLen === 0 ? 0 : (~0 << (32 - prefixLen)) >>> 0;
68
+ return (ipInt & mask) === (netInt & mask);
69
+ }
70
+ function isIpv6InPrefix(ip, prefix, prefixLen) {
71
+ try {
72
+ // Normalize by expanding both to full 128-bit arrays
73
+ const ipBytes = ipv6ToBytes(ip);
74
+ const prefixBytes = ipv6ToBytes(prefix);
75
+ if (!ipBytes || !prefixBytes)
76
+ return false;
77
+ const fullBytes = Math.floor(prefixLen / 8);
78
+ const remainBits = prefixLen % 8;
79
+ for (let i = 0; i < fullBytes; i++) {
80
+ if (ipBytes[i] !== prefixBytes[i])
81
+ return false;
82
+ }
83
+ if (remainBits > 0 && fullBytes < 16) {
84
+ const mask = (0xff << (8 - remainBits)) & 0xff;
85
+ if ((ipBytes[fullBytes] & mask) !== (prefixBytes[fullBytes] & mask))
86
+ return false;
87
+ }
88
+ return true;
89
+ }
90
+ catch {
91
+ return false;
92
+ }
93
+ }
94
+ function ipv6ToBytes(ip) {
95
+ try {
96
+ // Strip brackets if present (e.g. [::1])
97
+ const clean = ip.replace(/^\[|\]$/g, '');
98
+ // Reject zone IDs (e.g. fe80::1%eth0) — '%' is not valid in a routable address.
99
+ if (clean.includes('%'))
100
+ return undefined;
101
+ const halves = clean.split('::');
102
+ if (halves.length > 2)
103
+ return undefined;
104
+ const leftGroups = halves[0] ? halves[0].split(':') : [];
105
+ const rightGroups = halves[1] ? halves[1].split(':') : [];
106
+ const totalGroups = 8;
107
+ const zeroGroups = totalGroups - leftGroups.length - rightGroups.length;
108
+ if (zeroGroups < 0)
109
+ return undefined;
110
+ const groups = [
111
+ ...leftGroups,
112
+ ...Array(zeroGroups).fill('0'),
113
+ ...rightGroups,
114
+ ];
115
+ if (groups.length !== 8)
116
+ return undefined;
117
+ const bytes = new Uint8Array(16);
118
+ for (let i = 0; i < 8; i++) {
119
+ const g = groups[i];
120
+ // Each group must be 1-4 hex characters — no leading garbage, no zone index fragments.
121
+ if (!/^[0-9a-fA-F]{1,4}$/.test(g))
122
+ return undefined;
123
+ const v = parseInt(g, 16);
124
+ // parseInt with a valid hex pattern never exceeds 0xffff, but guard defensively.
125
+ if (v < 0 || v > 0xffff)
126
+ return undefined;
127
+ bytes[i * 2] = (v >> 8) & 0xff;
128
+ bytes[i * 2 + 1] = v & 0xff;
129
+ }
130
+ return bytes;
131
+ }
132
+ catch {
133
+ return undefined;
134
+ }
135
+ }
136
+ /**
137
+ * Returns true when the given IP address belongs to a Cloudflare-owned range.
138
+ * Used to validate CF-Connecting-IP header trust: only trust it when the
139
+ * connecting peer is actually a Cloudflare edge node.
140
+ */
141
+ export function isCloudflareIp(ip) {
142
+ if (!ip)
143
+ return false;
144
+ // Strip IPv6-mapped IPv4 prefix (::ffff:a.b.c.d)
145
+ const v4mapped = ip.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i);
146
+ const candidate = v4mapped ? v4mapped[1] : ip;
147
+ // Try IPv4 ranges first
148
+ if (/^\d+\.\d+\.\d+\.\d+$/.test(candidate)) {
149
+ return CLOUDFLARE_IPV4_CIDRS.some(([net, len]) => isIpInCidr4(candidate, net, len));
150
+ }
151
+ // Try IPv6 prefixes
152
+ return CLOUDFLARE_IPV6_PREFIXES.some(([prefix, len]) => isIpv6InPrefix(candidate, prefix, len));
153
+ }
154
+ // ---------------------------------------------------------------------------
16
155
  // HttpListener
17
156
  // ---------------------------------------------------------------------------
18
157
  /**
@@ -41,6 +180,8 @@ export class HttpListener {
41
180
  loginRateLimiter;
42
181
  /** Whether to trust x-forwarded-for / x-real-ip for client IP resolution. */
43
182
  trustProxy;
183
+ /** When true, trust CF-Connecting-IP only from validated Cloudflare edge IPs. */
184
+ trustCloudflare;
44
185
  configManager;
45
186
  serveFactory;
46
187
  tlsState = null;
@@ -78,6 +219,7 @@ export class HttpListener {
78
219
  // scrypt-cost-throttled online brute-force attacks.
79
220
  this.loginRateLimiter = new RateLimiter(config.loginRateLimit ?? 5);
80
221
  this.trustProxy = config.trustProxy ?? Boolean(this.configManager.get('httpListener.trustProxy'));
222
+ this.trustCloudflare = config.trustCloudflare ?? false;
81
223
  this.serveFactory = config.serveFactory ?? Bun.serve;
82
224
  }
83
225
  /**
@@ -254,7 +396,25 @@ export class HttpListener {
254
396
  const requestId = randomUUID();
255
397
  const startMs = Date.now();
256
398
  const url = new URL(req.url);
257
- const clientIp = extractForwardedClientIp(req, this.trustProxy || (this.tlsState?.trustProxy ?? false)) ?? 'unknown';
399
+ const effectiveTrustProxy = this.trustProxy || (this.tlsState?.trustProxy ?? false);
400
+ let clientIp;
401
+ if (this.trustCloudflare && effectiveTrustProxy) {
402
+ // Extract peer IP via standard x-forwarded-for first to validate against CF ranges.
403
+ const peerIp = extractForwardedClientIp(req, true) ?? 'unknown';
404
+ const cfConnectingIp = req.headers.get('cf-connecting-ip')?.trim();
405
+ if (cfConnectingIp && isCloudflareIp(peerIp)) {
406
+ // Peer is a real Cloudflare edge node — trust the CF header.
407
+ clientIp = cfConnectingIp;
408
+ }
409
+ else {
410
+ // Not validated as a CF edge or no CF header — fall through without CF trust.
411
+ // Use peerIp if available (x-forwarded-for from non-CF proxy), else 'unknown'.
412
+ clientIp = peerIp;
413
+ }
414
+ }
415
+ else {
416
+ clientIp = extractForwardedClientIp(req, effectiveTrustProxy) ?? 'unknown';
417
+ }
258
418
  let response = null;
259
419
  try {
260
420
  response = await this._handleRequestInner(req, url, clientIp, requestId);
@@ -304,13 +464,13 @@ export class HttpListener {
304
464
  // x-forwarded-for is only trustworthy when running behind a trusted reverse proxy.
305
465
  if (url.pathname === '/login' && req.method === 'POST') {
306
466
  if (!this.loginRateLimiter.check(clientIp)) {
307
- return Response.json({ error: 'Too many requests' }, { status: 429 });
467
+ return Response.json({ error: 'Too many requests' }, { status: 429, headers: { 'Retry-After': '60' } });
308
468
  }
309
469
  return this.handleLogin(req, clientIp, requestId);
310
470
  }
311
471
  // General rate limiting for all other routes.
312
472
  if (!this.rateLimiter.check(clientIp)) {
313
- return Response.json({ error: 'Too many requests' }, { status: 429 });
473
+ return Response.json({ error: 'Too many requests' }, { status: 429, headers: { 'Retry-After': '60' } });
314
474
  }
315
475
  // Auth check
316
476
  if (!this.checkAuth(req)) {
@@ -331,19 +491,25 @@ export class HttpListener {
331
491
  return body;
332
492
  const username = typeof body.username === 'string' ? body.username : '';
333
493
  const password = typeof body.password === 'string' ? body.password : '';
334
- const user = this.userAuth.authenticate(username, password);
335
- if (!user) {
494
+ const authResult = this.userAuth.authenticate(username, password);
495
+ if (!authResult.ok) {
336
496
  // AUTH_FAILED — never log credential values
497
+ const lockedUntilMs = authResult.lockedUntilMs;
337
498
  logger.warn('AUTH_FAILED', {
338
499
  type: 'AUTH_FAILED',
339
500
  requestId,
340
- usernameAttempted: username,
341
501
  clientIp,
342
- reason: 'invalid_credentials',
502
+ reason: lockedUntilMs ? 'account_locked' : 'invalid_credentials',
503
+ // Never log usernameAttempted to avoid associating accounts with IPs in logs
343
504
  });
344
505
  authFailureTotal.add(1);
506
+ if (lockedUntilMs) {
507
+ const retryAfterSeconds = Math.ceil((lockedUntilMs - Date.now()) / 1_000);
508
+ return Response.json({ error: 'Too many requests' }, { status: 429, headers: { 'Retry-After': String(Math.max(1, retryAfterSeconds)) } });
509
+ }
345
510
  return Response.json({ error: 'Invalid credentials' }, { status: 401 });
346
511
  }
512
+ const { user } = authResult;
347
513
  const session = this.userAuth.createSession(user.username);
348
514
  // AUTH_SUCCEEDED — never log credential values
349
515
  authSuccessTotal.add(1);
@@ -354,6 +520,19 @@ export class HttpListener {
354
520
  clientIp,
355
521
  method: 'password',
356
522
  });
523
+ // Auto-retire the bootstrap credential file ONLY after the first
524
+ // NON-bootstrap login. The bootstrap credential is a one-time convenience
525
+ // artifact; retiring it immediately on a bootstrap login would prevent the
526
+ // operator from logging in again if the session is lost before a real
527
+ // account/password is established.
528
+ if (!authResult.usedBootstrapCredential && this.userAuth.inspect().bootstrapCredentialPresent) {
529
+ const retired = this.userAuth.clearBootstrapCredentialFile();
530
+ if (retired) {
531
+ logger.info('Bootstrap credential file retired after first non-bootstrap login', {
532
+ username: user.username,
533
+ });
534
+ }
535
+ }
357
536
  return Response.json({
358
537
  authenticated: true,
359
538
  token: session.token,
@@ -54,7 +54,7 @@ export interface MemoryApi {
54
54
  rebuildVectors(): MemoryVectorStats;
55
55
  rebuildVectorsAsync(): Promise<MemoryVectorStats>;
56
56
  doctor(): Promise<MemoryDoctorReport>;
57
- reviewQueue(limit?: number): readonly MemoryRecord[];
57
+ reviewQueue(limit?: number, scope?: MemoryScope): readonly MemoryRecord[];
58
58
  exportBundle(filter?: MemorySearchFilter): MemoryBundle;
59
59
  importBundle(bundle: MemoryBundle): Promise<MemoryImportResult>;
60
60
  get(id: string): MemoryRecord | null;
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-api.d.ts","sourceRoot":"","sources":["../../../src/platform/knowledge/knowledge-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knowledge-api.d.ts","sourceRoot":"","sources":["../../../src/platform/knowledge/knowledge-api.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ export function createMemoryApi(memoryRegistry) {
31
31
  rebuildVectors: () => memoryRegistry.rebuildVectors(),
32
32
  rebuildVectorsAsync: () => memoryRegistry.rebuildVectorsAsync(),
33
33
  doctor: () => memoryRegistry.doctor(),
34
- reviewQueue: (limit = 10) => memoryRegistry.reviewQueue(limit),
34
+ reviewQueue: (limit = 10, scope) => memoryRegistry.reviewQueue(limit, scope),
35
35
  exportBundle: (filter = {}) => memoryRegistry.exportBundle(filter),
36
36
  importBundle: (bundle) => memoryRegistry.importBundle(bundle),
37
37
  get: (id) => memoryRegistry.get(id),
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,gCAAgC,CAAC;AA+BxC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,eAAe,GACrB,kBAAkB,CAyBpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,eAAe,GACrB,qBAAqB,CAmCvB;AAiCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,eAAe,CAuD1F;AAED,iBAAS,0BAA0B,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAQ/G;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GACb,eAAe,CAIjB;AA2CD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB,CA0F9F;AAED,iBAAS,2BAA2B,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GACb,gBAAgB,CAgBlB;AAgBD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CA4G1B;AAED,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,gCAAgC,CAAC;AA+BxC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,eAAe,GACrB,kBAAkB,CAyBpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,eAAe,GACrB,qBAAqB,CAmCvB;AAiCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,eAAe,CA0D1F;AAED,iBAAS,0BAA0B,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAQ/G;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GACb,eAAe,CAIjB;AA2CD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB,CA0F9F;AAED,iBAAS,2BAA2B,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GACb,gBAAgB,CAgBlB;AAgBD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CA4G1B;AAED,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,CAAC"}
@@ -121,6 +121,10 @@ function countTaskTransition(domain, previous, task) {
121
121
  return { totalCreated, totalCompleted, totalFailed, totalCancelled };
122
122
  }
123
123
  export function updateTaskState(domain, event) {
124
+ // Progress-only events (BATCH_JOB_PROGRESS, EXPORT_PROGRESS) have no taskId —
125
+ // they are not task lifecycle events and do not mutate the task registry.
126
+ if (!('taskId' in event))
127
+ return domain;
124
128
  const tasks = new Map(domain.tasks);
125
129
  const existing = tasks.get(event.taskId);
126
130
  const timestamp = now();
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/sync.ts"],"names":[],"mappings":"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"}
@@ -271,6 +271,10 @@ function transportStateForEvent(event) {
271
271
  case 'TRANSPORT_RETRY_EXECUTED':
272
272
  case 'STREAM_SUBSCRIBER_CONNECTED':
273
273
  case 'STREAM_SUBSCRIBER_DISCONNECTED':
274
+ // UX-enhancement observability events — no transport state change.
275
+ case 'TRANSPORT_BACKPRESSURE':
276
+ case 'TRANSPORT_CONNECTION_STATE':
277
+ case 'TRANSPORT_RECONNECT_ATTEMPT':
274
278
  return null;
275
279
  }
276
280
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-auth.d.ts","sourceRoot":"","sources":["../../../src/platform/security/http-auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,MAAM,MAAM,4BAA4B,GACpC;IACE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;AAEN,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3C;AAmCD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,GACX,MAAM,CAQR;AAOD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAC;CACzE,GACA,4BAA4B,GAAG,IAAI,CAqBrC;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAC;CACzE,GACA,4BAA4B,GAAG,IAAI,CAErC;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,4BAA4B,GAAG,IAAI,GAAG,OAAO,CAG3F;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAa/F;AAED,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,UAAQ,GAAG,MAAM,CAW1F"}
1
+ {"version":3,"file":"http-auth.d.ts","sourceRoot":"","sources":["../../../src/platform/security/http-auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,MAAM,MAAM,4BAA4B,GACpC;IACE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;AAEN,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3C;AAmCD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,GACX,MAAM,CAQR;AAeD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAC;CACzE,GACA,4BAA4B,GAAG,IAAI,CAqBrC;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAC;CACzE,GACA,4BAA4B,GAAG,IAAI,CAErC;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,4BAA4B,GAAG,IAAI,GAAG,OAAO,CAG3F;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAa/F;AAED,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,UAAQ,GAAG,MAAM,CAW1F"}
@@ -1,4 +1,4 @@
1
- import { timingSafeEqual } from 'node:crypto';
1
+ import { createHash, timingSafeEqual } from 'node:crypto';
2
2
  export const OPERATOR_SESSION_COOKIE_NAME = 'goodvibes_session';
3
3
  function parseCookies(header) {
4
4
  const cookies = new Map();
@@ -47,10 +47,17 @@ export function extractOperatorAuthToken(req) {
47
47
  return sessionCookie;
48
48
  return '';
49
49
  }
50
+ /**
51
+ * Compare two tokens in constant time without leaking length via early-exit.
52
+ * Hash both sides with SHA-256 so the Buffers are always 32 bytes before
53
+ * calling timingSafeEqual, eliminating the length-based side-channel that a
54
+ * plain Buffer.from(token).length check or early-return on length mismatch
55
+ * would have exposed.
56
+ */
50
57
  function matchesSharedToken(token, sharedToken) {
51
- if (token.length !== sharedToken.length)
52
- return false;
53
- return timingSafeEqual(Buffer.from(token), Buffer.from(sharedToken));
58
+ const aHash = createHash('sha256').update(token).digest();
59
+ const bHash = createHash('sha256').update(sharedToken).digest();
60
+ return timingSafeEqual(aHash, bHash);
54
61
  }
55
62
  export function authenticateOperatorToken(token, context) {
56
63
  const normalized = token.trim();
@@ -11,10 +11,57 @@ export interface AuthSession {
11
11
  interface UserAuthConfig {
12
12
  sessionTtlMs?: number | undefined;
13
13
  maxSessions?: number | undefined;
14
+ /** Maximum number of per-account lock state entries. Excess entries are evicted by staleness. Default: 10000. */
15
+ maxAccountLocks?: number | undefined;
14
16
  users?: AuthUser[] | undefined;
15
17
  bootstrapFilePath: string;
16
18
  bootstrapCredentialPath: string;
19
+ /** Scrypt cost params for hashing new passwords. Existing hashes carry their own params. Default: Node defaults. */
20
+ scryptParams?: ScryptParams | undefined;
21
+ /** Injectable clock for testing. Defaults to Date.now. */
22
+ nowFn?: (() => number) | undefined;
17
23
  }
24
+ /**
25
+ * Scrypt cost parameters. N must be a power of 2. Increasing N multiplies
26
+ * memory usage by 128*N*r bytes and CPU time proportionally.
27
+ * Safe minimums: N>=16384, r>=8, p>=1.
28
+ */
29
+ export interface ScryptParams {
30
+ /** CPU/memory cost factor — must be a power of 2. Default: 16384. */
31
+ readonly N: number;
32
+ /** Block size. Default: 8. */
33
+ readonly r: number;
34
+ /** Parallelization factor. Default: 1. */
35
+ readonly p: number;
36
+ }
37
+ /**
38
+ * Per-account login failure state for escalating lockout.
39
+ * Independent of IP-based throttling.
40
+ */
41
+ interface AccountLockState {
42
+ failures: number;
43
+ lockedUntil: number;
44
+ }
45
+ /**
46
+ * Result of authenticate() — includes lock state so callers can
47
+ * return Retry-After without leaking whether the username exists.
48
+ *
49
+ * The union is strict: `.user` is ONLY present (and non-undefined) on the
50
+ * `ok:true` branch, so TypeScript catches any caller that forgets to check `.ok`
51
+ * before accessing the user. `.usedBootstrapCredential` is set on the `ok:true`
52
+ * branch so callers can decide whether to retire the bootstrap credential file.
53
+ */
54
+ export type AuthenticateResult = {
55
+ readonly ok: true;
56
+ readonly user: AuthUser;
57
+ readonly usedBootstrapCredential: boolean;
58
+ readonly lockedUntilMs?: undefined;
59
+ } | {
60
+ readonly ok: false;
61
+ readonly user?: undefined;
62
+ readonly usedBootstrapCredential?: undefined;
63
+ readonly lockedUntilMs?: number;
64
+ };
18
65
  export interface AuthUserRecord {
19
66
  readonly username: string;
20
67
  readonly roles: readonly string[];
@@ -37,14 +84,63 @@ export interface LocalAuthSnapshot {
37
84
  export declare class UserAuthManager {
38
85
  private users;
39
86
  private sessions;
87
+ /** Per-username failure counters for account-level lockout (independent of IP throttling). */
88
+ private accountLocks;
40
89
  private sessionTtlMs;
41
90
  private readonly maxSessions;
91
+ private readonly maxAccountLocks;
42
92
  private readonly userStorePath;
43
93
  private readonly bootstrapCredentialPath;
44
94
  private readonly persistUsers;
95
+ private readonly scryptParams;
96
+ /** Injectable clock — defaults to Date.now for production. */
97
+ private readonly nowFn;
45
98
  constructor(config: UserAuthConfig);
46
- static hashPassword(password: string): string;
47
- authenticate(username: string, password: string): AuthUser | null;
99
+ static hashPassword(password: string, params?: ScryptParams): string;
100
+ /**
101
+ * Authenticate username/password with per-account lockout.
102
+ * - Does NOT leak whether a username exists (same generic error path for unknown users).
103
+ * - Records failures against the username bucket (not IP) with escalating backoff.
104
+ * - Returns lockedUntilMs when the account is temporarily locked.
105
+ * - Returns usedBootstrapCredential=true when the matched credential originated from
106
+ * the bootstrap credential file, so callers can defer retirement until a non-bootstrap
107
+ * login succeeds.
108
+ */
109
+ authenticate(username: string, password: string): AuthenticateResult;
110
+ /**
111
+ * Record a login failure for the given username and apply escalating backoff.
112
+ *
113
+ * Thresholds are anchored ABOVE the per-IP login budget (default 5/min) so
114
+ * the first account lock cannot fire before the IP limiter has already
115
+ * throttled further attempts. This preserves the 401-then-429-by-IP contract
116
+ * for in-budget attempts.
117
+ *
118
+ * 1-5 failures: no lock (IP budget exhaustion fires at attempt 6+)
119
+ * 6-9 failures: 30-second lock
120
+ * 10-19 failures: 5-minute lock
121
+ * 20+ failures: 30-minute lock
122
+ *
123
+ * Note: failures also increment during an active lock window (when the account
124
+ * is already locked and another attempt arrives). This means a lock can expire
125
+ * with a failure count already in a higher tier, causing the next lock after
126
+ * expiry to jump directly to that tier. This is intentional: repeated attempts
127
+ * during a lock are themselves failures and escalate the penalty schedule.
128
+ */
129
+ private _recordLoginFailure;
130
+ /**
131
+ * Evict account lock entries when the map is at capacity.
132
+ * Prefers entries with expired locks + no recent failures (stale entries).
133
+ * Falls back to the entry with the oldest/soonest-expired lock.
134
+ * Preserves no-username-enumeration: eviction policy is time-based, not
135
+ * user-existence-based.
136
+ */
137
+ private _evictAccountLockIfNeeded;
138
+ /**
139
+ * Expose account lock state for testing.
140
+ * Returns a defensive copy so callers cannot mutate internal state.
141
+ * Use the injected nowFn (via UserAuthManager constructor) to advance time in tests.
142
+ */
143
+ getAccountLockState(username: string): AccountLockState | undefined;
48
144
  getUser(username: string): AuthUserRecord | null;
49
145
  createSession(username: string): AuthSession;
50
146
  validateSession(token: string): AuthSession | null;
@@ -1 +1 @@
1
- {"version":3,"file":"user-auth.d.ts","sourceRoot":"","sources":["../../../src/platform/security/user-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-auth.d.ts","sourceRoot":"","sources":["../../../src/platform/security/user-auth.ts"],"names":[],"mappings":"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"}