@pellux/goodvibes-sdk 0.33.37 → 0.33.38
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.
- package/dist/client-auth/control-plane-auth-snapshot.d.ts +23 -0
- package/dist/client-auth/control-plane-auth-snapshot.d.ts.map +1 -1
- package/dist/client-auth/oauth-types.d.ts +18 -0
- package/dist/client-auth/oauth-types.d.ts.map +1 -1
- package/dist/client-auth/types.d.ts +26 -0
- package/dist/client-auth/types.d.ts.map +1 -1
- package/dist/client.d.ts +22 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/contracts/artifacts/operator-contract.json +84 -10
- package/dist/events/knowledge.d.ts +31 -0
- package/dist/events/knowledge.d.ts.map +1 -1
- package/dist/events/tasks.d.ts +58 -0
- package/dist/events/tasks.d.ts.map +1 -1
- package/dist/events/transport.d.ts +60 -0
- package/dist/events/transport.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-config.d.ts +6 -0
- package/dist/platform/agents/wrfc-config.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-config.js +6 -0
- package/dist/platform/agents/wrfc-controller.d.ts +74 -0
- package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-controller.js +368 -9
- package/dist/platform/agents/wrfc-reporting.d.ts +60 -0
- package/dist/platform/agents/wrfc-reporting.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-reporting.js +131 -7
- package/dist/platform/agents/wrfc-types.d.ts +12 -0
- package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
- package/dist/platform/config/manager.d.ts +11 -0
- package/dist/platform/config/manager.d.ts.map +1 -1
- package/dist/platform/config/manager.js +17 -1
- package/dist/platform/config/schema-domain-core.d.ts +2 -0
- package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-core.js +17 -0
- package/dist/platform/config/schema-shared.d.ts +6 -0
- package/dist/platform/config/schema-shared.d.ts.map +1 -1
- package/dist/platform/config/schema-types.d.ts +9 -2
- package/dist/platform/config/schema-types.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-control-automation.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-control-automation.js +10 -4
- package/dist/platform/control-plane/method-catalog-knowledge.js +4 -4
- package/dist/platform/control-plane/method-catalog-runtime.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-runtime.js +13 -0
- package/dist/platform/control-plane/routes/automation.js +2 -2
- package/dist/platform/control-plane/routes/operator.d.ts.map +1 -1
- package/dist/platform/control-plane/routes/operator.js +2 -0
- package/dist/platform/control-plane/routes/sessions.js +1 -1
- package/dist/platform/daemon/http/router.d.ts.map +1 -1
- package/dist/platform/daemon/http/router.js +12 -2
- package/dist/platform/daemon/http-listener.d.ts +17 -0
- package/dist/platform/daemon/http-listener.d.ts.map +1 -1
- package/dist/platform/daemon/http-listener.js +186 -7
- package/dist/platform/knowledge/knowledge-api.d.ts +1 -1
- package/dist/platform/knowledge/knowledge-api.d.ts.map +1 -1
- package/dist/platform/knowledge/knowledge-api.js +1 -1
- package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
- package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +4 -0
- package/dist/platform/runtime/store/helpers/reducers/sync.d.ts.map +1 -1
- package/dist/platform/runtime/store/helpers/reducers/sync.js +4 -0
- package/dist/platform/security/http-auth.d.ts.map +1 -1
- package/dist/platform/security/http-auth.js +11 -4
- package/dist/platform/security/user-auth.d.ts +98 -2
- package/dist/platform/security/user-auth.d.ts.map +1 -1
- package/dist/platform/security/user-auth.js +195 -18
- package/dist/platform/sessions/manager.d.ts +19 -2
- package/dist/platform/sessions/manager.d.ts.map +1 -1
- package/dist/platform/sessions/manager.js +43 -6
- package/dist/platform/state/memory-registry.d.ts +1 -1
- package/dist/platform/state/memory-registry.d.ts.map +1 -1
- package/dist/platform/state/memory-registry.js +2 -2
- package/dist/platform/state/memory-store.d.ts +1 -1
- package/dist/platform/state/memory-store.d.ts.map +1 -1
- package/dist/platform/state/memory-store.js +2 -2
- package/dist/platform/version.js +1 -1
- package/package.json +9 -9
|
@@ -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,
|
|
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":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAqB,MAAM,+BAA+B,CAAC;AAClH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AACxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,wBAAwB,EAA8B,MAAM,gCAAgC,CAAC;AAC3G,OAAO,KAAK,EAAE,iBAAiB,EAAuC,MAAM,0BAA0B,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAA4C,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CA2C1B;AAuBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAmDlG;AAyBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,GAAG,cAAc,CA8HtF;
|
|
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;
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
return timingSafeEqual(
|
|
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
|
-
|
|
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":"AAKA,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"user-auth.d.ts","sourceRoot":"","sources":["../../../src/platform/security/user-auth.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,iHAAiH;IACjH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,oHAAoH;IACpH,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CACpC;AAUD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAA;CAAE,GAC7H;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAOrI,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;AA0ND,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAkC;IAClD,8FAA8F;IAC9F,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,MAAM,EAAE,cAAc;IAyBlC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;IAIpE;;;;;;;;OAQG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB;IAuCpE;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IAuBjC;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAMnE,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAShD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IA0B5C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAUlD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWrC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAW/C,SAAS,IAAI,cAAc,EAAE;IAS7B,YAAY,IAAI,iBAAiB,EAAE;IAWnC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,MAAM,EAAc,GAAG,cAAc;IAejG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAarC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAgB5D,OAAO,IAAI,iBAAiB;IAc5B,4BAA4B,IAAI,OAAO;IAMvC,0BAA0B,IAAI,MAAM;IAIpC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,OAAO;CAIhB"}
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
import { createHash, randomBytes, scryptSync, timingSafeEqual } from 'crypto';
|
|
2
|
-
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { logger } from '../utils/logger.js';
|
|
5
5
|
const DEFAULT_SESSION_TTL_MS = 3_600_000;
|
|
6
6
|
const DEFAULT_MAX_SESSIONS = 1000;
|
|
7
|
+
const DEFAULT_MAX_ACCOUNT_LOCKS = 10_000;
|
|
7
8
|
const SCRYPT_KEY_LENGTH = 64;
|
|
9
|
+
/** Default scrypt cost parameters matching Node.js defaults (N=16384, r=8, p=1). */
|
|
10
|
+
const DEFAULT_SCRYPT_PARAMS = { N: 16384, r: 8, p: 1 };
|
|
8
11
|
function toBase64(value) {
|
|
9
12
|
return value.toString('base64');
|
|
10
13
|
}
|
|
11
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Hash format: base64(salt):N:r:p:base64(derived)
|
|
16
|
+
* The cost parameters are stored in the hash so old hashes can be verified
|
|
17
|
+
* even after the default params change.
|
|
18
|
+
*/
|
|
19
|
+
function hashPassword(password, params = DEFAULT_SCRYPT_PARAMS, salt) {
|
|
12
20
|
const actualSalt = salt ?? randomBytes(16);
|
|
13
|
-
const derived = scryptSync(password, actualSalt, SCRYPT_KEY_LENGTH);
|
|
14
|
-
return `${toBase64(actualSalt)}:${toBase64(derived)}`;
|
|
21
|
+
const derived = scryptSync(password, actualSalt, SCRYPT_KEY_LENGTH, { N: params.N, r: params.r, p: params.p });
|
|
22
|
+
return `${toBase64(actualSalt)}:${params.N}:${params.r}:${params.p}:${toBase64(derived)}`;
|
|
15
23
|
}
|
|
16
24
|
/**
|
|
17
25
|
* Generate a cryptographically random one-time password.
|
|
@@ -21,15 +29,43 @@ function generateInitialPassword() {
|
|
|
21
29
|
return randomBytes(16).toString('hex');
|
|
22
30
|
}
|
|
23
31
|
function verifyPassword(password, passwordHash) {
|
|
24
|
-
const
|
|
32
|
+
const parts = passwordHash.split(':');
|
|
33
|
+
// Legacy format: salt:hash (2 parts) — uses DEFAULT_SCRYPT_PARAMS for backward compat.
|
|
34
|
+
// New format: salt:N:r:p:hash (5 parts)
|
|
35
|
+
let saltEncoded;
|
|
36
|
+
let hashEncoded;
|
|
37
|
+
let params;
|
|
38
|
+
if (parts.length === 2) {
|
|
39
|
+
// Legacy hash: no cost params stored — use defaults.
|
|
40
|
+
[saltEncoded, hashEncoded] = parts;
|
|
41
|
+
params = DEFAULT_SCRYPT_PARAMS;
|
|
42
|
+
}
|
|
43
|
+
else if (parts.length === 5) {
|
|
44
|
+
const N = Number(parts[1]);
|
|
45
|
+
const r = Number(parts[2]);
|
|
46
|
+
const p = Number(parts[3]);
|
|
47
|
+
if (!Number.isInteger(N) || N < 1 || !Number.isInteger(r) || r < 1 || !Number.isInteger(p) || p < 1)
|
|
48
|
+
return false;
|
|
49
|
+
saltEncoded = parts[0];
|
|
50
|
+
hashEncoded = parts[4];
|
|
51
|
+
params = { N, r, p };
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
25
56
|
if (!saltEncoded || !hashEncoded)
|
|
26
57
|
return false;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
58
|
+
try {
|
|
59
|
+
const salt = Buffer.from(saltEncoded, 'base64');
|
|
60
|
+
const expected = Buffer.from(hashEncoded, 'base64');
|
|
61
|
+
const actual = scryptSync(password, salt, SCRYPT_KEY_LENGTH, { N: params.N, r: params.r, p: params.p });
|
|
62
|
+
if (actual.length !== expected.length)
|
|
63
|
+
return false;
|
|
64
|
+
return timingSafeEqual(actual, expected);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
31
67
|
return false;
|
|
32
|
-
|
|
68
|
+
}
|
|
33
69
|
}
|
|
34
70
|
function fingerprintToken(token) {
|
|
35
71
|
return createHash('sha256').update(token).digest('hex').slice(0, 16);
|
|
@@ -59,7 +95,8 @@ function readBootstrapUsers(filePath) {
|
|
|
59
95
|
* some Linux fs drivers).
|
|
60
96
|
*/
|
|
61
97
|
function atomicWriteSecretFile(filePath, content) {
|
|
62
|
-
|
|
98
|
+
const dir = dirname(filePath);
|
|
99
|
+
mkdirSync(dir, { recursive: true });
|
|
63
100
|
const tmpPath = filePath + '.tmp';
|
|
64
101
|
writeFileSync(tmpPath, content, { encoding: 'utf-8', mode: 0o600 });
|
|
65
102
|
try {
|
|
@@ -68,7 +105,23 @@ function atomicWriteSecretFile(filePath, content) {
|
|
|
68
105
|
catch (error) {
|
|
69
106
|
logger.warn('User auth secret temp chmod failed', { path: tmpPath, error: String(error) });
|
|
70
107
|
}
|
|
108
|
+
// fsync the file data before rename so the content survives power loss.
|
|
109
|
+
const fd = openSync(tmpPath, 'r+');
|
|
110
|
+
try {
|
|
111
|
+
fsyncSync(fd);
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
closeSync(fd);
|
|
115
|
+
}
|
|
71
116
|
renameSync(tmpPath, filePath);
|
|
117
|
+
// fsync the parent directory so the directory entry (rename) is durable.
|
|
118
|
+
const dirFd = openSync(dir, 'r');
|
|
119
|
+
try {
|
|
120
|
+
fsyncSync(dirFd);
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
closeSync(dirFd);
|
|
124
|
+
}
|
|
72
125
|
try {
|
|
73
126
|
chmodSync(filePath, 0o600);
|
|
74
127
|
}
|
|
@@ -158,11 +211,17 @@ function detectBootstrapCredentialDrift(users, credentialPath, userStorePath) {
|
|
|
158
211
|
export class UserAuthManager {
|
|
159
212
|
users = new Map();
|
|
160
213
|
sessions = new Map();
|
|
214
|
+
/** Per-username failure counters for account-level lockout (independent of IP throttling). */
|
|
215
|
+
accountLocks = new Map();
|
|
161
216
|
sessionTtlMs;
|
|
162
217
|
maxSessions;
|
|
218
|
+
maxAccountLocks;
|
|
163
219
|
userStorePath;
|
|
164
220
|
bootstrapCredentialPath;
|
|
165
221
|
persistUsers;
|
|
222
|
+
scryptParams;
|
|
223
|
+
/** Injectable clock — defaults to Date.now for production. */
|
|
224
|
+
nowFn;
|
|
166
225
|
constructor(config) {
|
|
167
226
|
if (!config.bootstrapFilePath)
|
|
168
227
|
throw new Error('UserAuthManager requires an explicit bootstrapFilePath.');
|
|
@@ -170,9 +229,12 @@ export class UserAuthManager {
|
|
|
170
229
|
throw new Error('UserAuthManager requires an explicit bootstrapCredentialPath.');
|
|
171
230
|
this.sessionTtlMs = config.sessionTtlMs ?? DEFAULT_SESSION_TTL_MS;
|
|
172
231
|
this.maxSessions = config.maxSessions ?? DEFAULT_MAX_SESSIONS;
|
|
232
|
+
this.maxAccountLocks = config.maxAccountLocks ?? DEFAULT_MAX_ACCOUNT_LOCKS;
|
|
173
233
|
this.userStorePath = config.bootstrapFilePath;
|
|
174
234
|
this.bootstrapCredentialPath = config.bootstrapCredentialPath;
|
|
175
235
|
this.persistUsers = config.users === undefined;
|
|
236
|
+
this.scryptParams = config.scryptParams ?? DEFAULT_SCRYPT_PARAMS;
|
|
237
|
+
this.nowFn = config.nowFn ?? (() => Date.now());
|
|
176
238
|
const seedUsers = config.users ?? loadOrBootstrapUsers(this.userStorePath, this.bootstrapCredentialPath);
|
|
177
239
|
for (const user of seedUsers) {
|
|
178
240
|
this.users.set(user.username, user);
|
|
@@ -184,14 +246,129 @@ export class UserAuthManager {
|
|
|
184
246
|
detectBootstrapCredentialDrift(seedUsers, this.bootstrapCredentialPath, this.userStorePath);
|
|
185
247
|
}
|
|
186
248
|
}
|
|
187
|
-
static hashPassword(password) {
|
|
188
|
-
return hashPassword(password);
|
|
249
|
+
static hashPassword(password, params) {
|
|
250
|
+
return hashPassword(password, params ?? DEFAULT_SCRYPT_PARAMS);
|
|
189
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Authenticate username/password with per-account lockout.
|
|
254
|
+
* - Does NOT leak whether a username exists (same generic error path for unknown users).
|
|
255
|
+
* - Records failures against the username bucket (not IP) with escalating backoff.
|
|
256
|
+
* - Returns lockedUntilMs when the account is temporarily locked.
|
|
257
|
+
* - Returns usedBootstrapCredential=true when the matched credential originated from
|
|
258
|
+
* the bootstrap credential file, so callers can defer retirement until a non-bootstrap
|
|
259
|
+
* login succeeds.
|
|
260
|
+
*/
|
|
190
261
|
authenticate(username, password) {
|
|
262
|
+
const now = this.nowFn();
|
|
263
|
+
const lockState = this.accountLocks.get(username);
|
|
264
|
+
// Check account lock (before touching user store — avoids user-existence side-channel).
|
|
265
|
+
if (lockState && lockState.lockedUntil > now) {
|
|
266
|
+
// Still locked — record the attempt but keep the lock window intact.
|
|
267
|
+
lockState.failures++;
|
|
268
|
+
return { ok: false, lockedUntilMs: lockState.lockedUntil };
|
|
269
|
+
}
|
|
191
270
|
const user = this.users.get(username);
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
271
|
+
// Always verify something with constant-time cost so unknown usernames
|
|
272
|
+
// have the same timing profile as known usernames with wrong password.
|
|
273
|
+
const hashToCheck = user?.passwordHash ?? 'dGVzdHNhbHQ=:16384:8:1:dGVzdGhhc2h0ZXN0aGFzaHRlc3RoYXNodGVzdGhhc2g=';
|
|
274
|
+
const passwordOk = user !== undefined && verifyPassword(password, hashToCheck);
|
|
275
|
+
if (!passwordOk) {
|
|
276
|
+
this._recordLoginFailure(username, now);
|
|
277
|
+
// Check if this failure just triggered a lock.
|
|
278
|
+
const newLock = this.accountLocks.get(username);
|
|
279
|
+
const lockedUntilMs = newLock && newLock.lockedUntil > now ? newLock.lockedUntil : undefined;
|
|
280
|
+
return lockedUntilMs !== undefined ? { ok: false, lockedUntilMs } : { ok: false };
|
|
281
|
+
}
|
|
282
|
+
// Determine whether this login used the bootstrap credential.
|
|
283
|
+
// Compare against the credential file contents without leaking timing info
|
|
284
|
+
// (we already confirmed the password is correct at this point).
|
|
285
|
+
const bootstrapCred = readBootstrapCredentialFile(this.bootstrapCredentialPath);
|
|
286
|
+
const usedBootstrapCredential = bootstrapCred !== null
|
|
287
|
+
&& bootstrapCred.username === username
|
|
288
|
+
&& bootstrapCred.password === password;
|
|
289
|
+
// Success — clear failure count.
|
|
290
|
+
this.accountLocks.delete(username);
|
|
291
|
+
return { ok: true, user, usedBootstrapCredential };
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Record a login failure for the given username and apply escalating backoff.
|
|
295
|
+
*
|
|
296
|
+
* Thresholds are anchored ABOVE the per-IP login budget (default 5/min) so
|
|
297
|
+
* the first account lock cannot fire before the IP limiter has already
|
|
298
|
+
* throttled further attempts. This preserves the 401-then-429-by-IP contract
|
|
299
|
+
* for in-budget attempts.
|
|
300
|
+
*
|
|
301
|
+
* 1-5 failures: no lock (IP budget exhaustion fires at attempt 6+)
|
|
302
|
+
* 6-9 failures: 30-second lock
|
|
303
|
+
* 10-19 failures: 5-minute lock
|
|
304
|
+
* 20+ failures: 30-minute lock
|
|
305
|
+
*
|
|
306
|
+
* Note: failures also increment during an active lock window (when the account
|
|
307
|
+
* is already locked and another attempt arrives). This means a lock can expire
|
|
308
|
+
* with a failure count already in a higher tier, causing the next lock after
|
|
309
|
+
* expiry to jump directly to that tier. This is intentional: repeated attempts
|
|
310
|
+
* during a lock are themselves failures and escalate the penalty schedule.
|
|
311
|
+
*/
|
|
312
|
+
_recordLoginFailure(username, now) {
|
|
313
|
+
const existing = this.accountLocks.get(username);
|
|
314
|
+
if (!existing) {
|
|
315
|
+
// New entry — evict if at cap before inserting.
|
|
316
|
+
this._evictAccountLockIfNeeded(now);
|
|
317
|
+
}
|
|
318
|
+
const state = existing ?? { failures: 0, lockedUntil: 0 };
|
|
319
|
+
state.failures++;
|
|
320
|
+
const f = state.failures;
|
|
321
|
+
let lockDurationMs = 0;
|
|
322
|
+
if (f >= 20)
|
|
323
|
+
lockDurationMs = 30 * 60_000;
|
|
324
|
+
else if (f >= 10)
|
|
325
|
+
lockDurationMs = 5 * 60_000;
|
|
326
|
+
else if (f >= 6)
|
|
327
|
+
lockDurationMs = 30_000;
|
|
328
|
+
state.lockedUntil = lockDurationMs > 0 ? now + lockDurationMs : 0;
|
|
329
|
+
this.accountLocks.set(username, state);
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Evict account lock entries when the map is at capacity.
|
|
333
|
+
* Prefers entries with expired locks + no recent failures (stale entries).
|
|
334
|
+
* Falls back to the entry with the oldest/soonest-expired lock.
|
|
335
|
+
* Preserves no-username-enumeration: eviction policy is time-based, not
|
|
336
|
+
* user-existence-based.
|
|
337
|
+
*/
|
|
338
|
+
_evictAccountLockIfNeeded(now) {
|
|
339
|
+
if (this.accountLocks.size < this.maxAccountLocks)
|
|
340
|
+
return;
|
|
341
|
+
// First sweep: remove all fully stale entries (lock expired AND low failure count).
|
|
342
|
+
for (const [key, state] of this.accountLocks.entries()) {
|
|
343
|
+
if (state.lockedUntil <= now && state.failures < 6) {
|
|
344
|
+
this.accountLocks.delete(key);
|
|
345
|
+
if (this.accountLocks.size < this.maxAccountLocks)
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Second sweep: remove the entry with the smallest lockedUntil (most expired).
|
|
350
|
+
let oldestKey;
|
|
351
|
+
let oldestUntil = Infinity;
|
|
352
|
+
for (const [key, state] of this.accountLocks.entries()) {
|
|
353
|
+
if (state.lockedUntil < oldestUntil) {
|
|
354
|
+
oldestUntil = state.lockedUntil;
|
|
355
|
+
oldestKey = key;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (oldestKey !== undefined) {
|
|
359
|
+
this.accountLocks.delete(oldestKey);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Expose account lock state for testing.
|
|
364
|
+
* Returns a defensive copy so callers cannot mutate internal state.
|
|
365
|
+
* Use the injected nowFn (via UserAuthManager constructor) to advance time in tests.
|
|
366
|
+
*/
|
|
367
|
+
getAccountLockState(username) {
|
|
368
|
+
const state = this.accountLocks.get(username);
|
|
369
|
+
if (!state)
|
|
370
|
+
return undefined;
|
|
371
|
+
return { failures: state.failures, lockedUntil: state.lockedUntil };
|
|
195
372
|
}
|
|
196
373
|
getUser(username) {
|
|
197
374
|
const user = this.users.get(username);
|
|
@@ -286,7 +463,7 @@ export class UserAuthManager {
|
|
|
286
463
|
throw new Error('Password must be at least 8 characters.');
|
|
287
464
|
const user = {
|
|
288
465
|
username: normalized,
|
|
289
|
-
passwordHash: hashPassword(password),
|
|
466
|
+
passwordHash: hashPassword(password, this.scryptParams),
|
|
290
467
|
roles: [...new Set(roles.filter(Boolean))],
|
|
291
468
|
};
|
|
292
469
|
this.users.set(normalized, user);
|
|
@@ -315,7 +492,7 @@ export class UserAuthManager {
|
|
|
315
492
|
throw new Error('Password must be at least 8 characters.');
|
|
316
493
|
this.users.set(normalized, {
|
|
317
494
|
...existing,
|
|
318
|
-
passwordHash: hashPassword(nextPassword),
|
|
495
|
+
passwordHash: hashPassword(nextPassword, this.scryptParams),
|
|
319
496
|
});
|
|
320
497
|
this.revokeSessionsForUser(normalized);
|
|
321
498
|
this.persist();
|
|
@@ -11,6 +11,8 @@ export interface SessionMeta {
|
|
|
11
11
|
timestamp: number;
|
|
12
12
|
titleSource?: ConversationTitleSource | undefined;
|
|
13
13
|
returnContext?: SessionReturnContextSummary | undefined;
|
|
14
|
+
/** File format version written into the JSONL meta line. Present on files saved after schemaVersion was introduced. Missing on older files (treat as version 0). */
|
|
15
|
+
schemaVersion?: number | undefined;
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* Summary info for listing saved sessions.
|
|
@@ -34,6 +36,13 @@ export interface SessionInfo {
|
|
|
34
36
|
* Line 0: { type: 'meta', ...SessionMeta }
|
|
35
37
|
* Line N: { type: 'message', ...message fields }
|
|
36
38
|
*/
|
|
39
|
+
/**
|
|
40
|
+
* Current schema version written to session files.
|
|
41
|
+
* Increment when the file format changes in a backward-incompatible way.
|
|
42
|
+
* Readers accept: version undefined (legacy, treated as 0), version <= CURRENT, and
|
|
43
|
+
* version > CURRENT (future — logged as a warning, accepted with best-effort parsing).
|
|
44
|
+
*/
|
|
45
|
+
export declare const CURRENT_SESSION_SCHEMA_VERSION = 1;
|
|
37
46
|
export declare class SessionManager {
|
|
38
47
|
private sessionsDir;
|
|
39
48
|
constructor(baseDir: string, options?: {
|
|
@@ -46,8 +55,16 @@ export declare class SessionManager {
|
|
|
46
55
|
*/
|
|
47
56
|
private _cleanupOrphanTempFiles;
|
|
48
57
|
/**
|
|
49
|
-
* Atomically write content to filePath via a temp file + fsync + rename.
|
|
50
|
-
* Protects against partial writes on
|
|
58
|
+
* Atomically write content to filePath via a temp file + fsync(file) + rename + fsync(dir).
|
|
59
|
+
* Protects against partial writes and directory-entry reversion on power loss:
|
|
60
|
+
* 1. Write content to a tmp file in the same directory.
|
|
61
|
+
* 2. fsync the tmp file to flush its data to storage.
|
|
62
|
+
* 3. rename the tmp file into place (atomic on POSIX).
|
|
63
|
+
* 4. fsync the parent directory to flush the directory entry — without
|
|
64
|
+
* this step, on power loss after rename the directory entry can
|
|
65
|
+
* revert and the renamed file disappears.
|
|
66
|
+
* Mirrors the reference implementation in platform/security/user-auth.ts
|
|
67
|
+
* (atomicWriteSecretFile), which performs both fsyncs.
|
|
51
68
|
*/
|
|
52
69
|
private _atomicWrite;
|
|
53
70
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/platform/sessions/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAClD,aAAa,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/platform/sessions/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAClD,aAAa,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACxD,oKAAoK;IACpK,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAClD,aAAa,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;CACzD;AAED;;;;;;;GAOG;AACH;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IAM/H;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,YAAY;IAoBpB;;;;OAIG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,WAAW,EACjB,YAAY,CAAC,EAAE,WAAW,EAAE,GAC3B;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAwC9C;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,WAAW,EAAE,CAAA;KAAE;IAgE1F;;OAEG;IACH,IAAI,IAAI,WAAW,EAAE;IA+FrB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAiCzC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAoB5C;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY1B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAuD9F;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CASnC"}
|