@waiaas/daemon 2.9.1-rc → 2.10.0-rc
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/api/middleware/master-auth.d.ts +3 -0
- package/dist/api/middleware/master-auth.d.ts.map +1 -1
- package/dist/api/middleware/master-auth.js +14 -0
- package/dist/api/middleware/master-auth.js.map +1 -1
- package/dist/api/routes/admin.d.ts +4 -0
- package/dist/api/routes/admin.d.ts.map +1 -1
- package/dist/api/routes/admin.js +186 -1
- package/dist/api/routes/admin.js.map +1 -1
- package/dist/api/routes/audit-logs.d.ts +15 -0
- package/dist/api/routes/audit-logs.d.ts.map +1 -0
- package/dist/api/routes/audit-logs.js +119 -0
- package/dist/api/routes/audit-logs.js.map +1 -0
- package/dist/api/routes/index.d.ts +2 -1
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +2 -1
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/openapi-schemas.d.ts +324 -6
- package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
- package/dist/api/routes/openapi-schemas.js +76 -0
- package/dist/api/routes/openapi-schemas.js.map +1 -1
- package/dist/api/routes/sessions.d.ts +2 -0
- package/dist/api/routes/sessions.d.ts.map +1 -1
- package/dist/api/routes/sessions.js +21 -0
- package/dist/api/routes/sessions.js.map +1 -1
- package/dist/api/routes/transactions.d.ts +2 -1
- package/dist/api/routes/transactions.d.ts.map +1 -1
- package/dist/api/routes/transactions.js +72 -1
- package/dist/api/routes/transactions.js.map +1 -1
- package/dist/api/routes/wallets.d.ts.map +1 -1
- package/dist/api/routes/wallets.js +25 -0
- package/dist/api/routes/wallets.js.map +1 -1
- package/dist/api/routes/webhooks.d.ts +17 -0
- package/dist/api/routes/webhooks.d.ts.map +1 -0
- package/dist/api/routes/webhooks.js +218 -0
- package/dist/api/routes/webhooks.js.map +1 -0
- package/dist/api/server.d.ts +27 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +31 -5
- package/dist/api/server.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/backup/backup-format.d.ts +107 -0
- package/dist/infrastructure/backup/backup-format.d.ts.map +1 -0
- package/dist/infrastructure/backup/backup-format.js +134 -0
- package/dist/infrastructure/backup/backup-format.js.map +1 -0
- package/dist/infrastructure/backup/encrypted-backup-service.d.ts +56 -0
- package/dist/infrastructure/backup/encrypted-backup-service.d.ts.map +1 -0
- package/dist/infrastructure/backup/encrypted-backup-service.js +269 -0
- package/dist/infrastructure/backup/encrypted-backup-service.js.map +1 -0
- package/dist/infrastructure/backup/index.d.ts +3 -0
- package/dist/infrastructure/backup/index.d.ts.map +1 -1
- package/dist/infrastructure/backup/index.js +2 -0
- package/dist/infrastructure/backup/index.js.map +1 -1
- package/dist/infrastructure/config/loader.d.ts +23 -0
- package/dist/infrastructure/config/loader.d.ts.map +1 -1
- package/dist/infrastructure/config/loader.js +8 -0
- package/dist/infrastructure/config/loader.js.map +1 -1
- package/dist/infrastructure/database/audit-helper.d.ts +29 -0
- package/dist/infrastructure/database/audit-helper.d.ts.map +1 -0
- package/dist/infrastructure/database/audit-helper.js +30 -0
- package/dist/infrastructure/database/audit-helper.js.map +1 -0
- package/dist/infrastructure/database/index.d.ts +2 -0
- package/dist/infrastructure/database/index.d.ts.map +1 -1
- package/dist/infrastructure/database/index.js +1 -0
- package/dist/infrastructure/database/index.js.map +1 -1
- package/dist/infrastructure/database/migrate.d.ts +1 -1
- package/dist/infrastructure/database/migrate.d.ts.map +1 -1
- package/dist/infrastructure/database/migrate.js +83 -2
- package/dist/infrastructure/database/migrate.js.map +1 -1
- package/dist/infrastructure/database/schema.d.ts +343 -1
- package/dist/infrastructure/database/schema.d.ts.map +1 -1
- package/dist/infrastructure/database/schema.js +41 -1
- package/dist/infrastructure/database/schema.js.map +1 -1
- package/dist/infrastructure/metrics/in-memory-counter.d.ts +34 -0
- package/dist/infrastructure/metrics/in-memory-counter.d.ts.map +1 -0
- package/dist/infrastructure/metrics/in-memory-counter.js +88 -0
- package/dist/infrastructure/metrics/in-memory-counter.js.map +1 -0
- package/dist/infrastructure/settings/hot-reload.d.ts +1 -0
- package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -1
- package/dist/infrastructure/settings/hot-reload.js +23 -2
- package/dist/infrastructure/settings/hot-reload.js.map +1 -1
- package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -1
- package/dist/infrastructure/settings/setting-keys.js +4 -0
- package/dist/infrastructure/settings/setting-keys.js.map +1 -1
- package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -1
- package/dist/infrastructure/telegram/telegram-bot-service.js +32 -19
- package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -1
- package/dist/lifecycle/daemon.d.ts +8 -1
- package/dist/lifecycle/daemon.d.ts.map +1 -1
- package/dist/lifecycle/daemon.js +103 -1
- package/dist/lifecycle/daemon.js.map +1 -1
- package/dist/pipeline/dry-run.d.ts +68 -0
- package/dist/pipeline/dry-run.d.ts.map +1 -0
- package/dist/pipeline/dry-run.js +426 -0
- package/dist/pipeline/dry-run.js.map +1 -0
- package/dist/pipeline/index.d.ts +1 -0
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +2 -0
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/pipeline.d.ts +18 -1
- package/dist/pipeline/pipeline.d.ts.map +1 -1
- package/dist/pipeline/pipeline.js +38 -0
- package/dist/pipeline/pipeline.js.map +1 -1
- package/dist/pipeline/stages.d.ts +31 -1
- package/dist/pipeline/stages.d.ts.map +1 -1
- package/dist/pipeline/stages.js +120 -22
- package/dist/pipeline/stages.js.map +1 -1
- package/dist/services/admin-stats-service.d.ts +48 -0
- package/dist/services/admin-stats-service.d.ts.map +1 -0
- package/dist/services/admin-stats-service.js +182 -0
- package/dist/services/admin-stats-service.js.map +1 -0
- package/dist/services/autostop/autostop-service.d.ts +83 -0
- package/dist/services/autostop/autostop-service.d.ts.map +1 -0
- package/dist/services/autostop/autostop-service.js +252 -0
- package/dist/services/autostop/autostop-service.js.map +1 -0
- package/dist/services/autostop/index.d.ts +15 -0
- package/dist/services/autostop/index.d.ts.map +1 -0
- package/dist/services/autostop/index.js +11 -0
- package/dist/services/autostop/index.js.map +1 -0
- package/dist/services/autostop/rule-registry.d.ts +42 -0
- package/dist/services/autostop/rule-registry.d.ts.map +1 -0
- package/dist/services/autostop/rule-registry.js +54 -0
- package/dist/services/autostop/rule-registry.js.map +1 -0
- package/dist/services/autostop/rules/consecutive-failures.rule.d.ts +38 -0
- package/dist/services/autostop/rules/consecutive-failures.rule.d.ts.map +1 -0
- package/dist/services/autostop/rules/consecutive-failures.rule.js +75 -0
- package/dist/services/autostop/rules/consecutive-failures.rule.js.map +1 -0
- package/dist/services/autostop/rules/idle-timeout.rule.d.ts +43 -0
- package/dist/services/autostop/rules/idle-timeout.rule.d.ts.map +1 -0
- package/dist/services/autostop/rules/idle-timeout.rule.js +128 -0
- package/dist/services/autostop/rules/idle-timeout.rule.js.map +1 -0
- package/dist/services/autostop/rules/unusual-activity.rule.d.ts +33 -0
- package/dist/services/autostop/rules/unusual-activity.rule.d.ts.map +1 -0
- package/dist/services/autostop/rules/unusual-activity.rule.js +73 -0
- package/dist/services/autostop/rules/unusual-activity.rule.js.map +1 -0
- package/dist/services/autostop/types.d.ts +49 -0
- package/dist/services/autostop/types.d.ts.map +1 -0
- package/dist/services/autostop/types.js +10 -0
- package/dist/services/autostop/types.js.map +1 -0
- package/dist/services/autostop-rules.d.ts +11 -74
- package/dist/services/autostop-rules.d.ts.map +1 -1
- package/dist/services/autostop-rules.js +9 -169
- package/dist/services/autostop-rules.js.map +1 -1
- package/dist/services/autostop-service.d.ts +6 -77
- package/dist/services/autostop-service.d.ts.map +1 -1
- package/dist/services/autostop-service.js +5 -212
- package/dist/services/autostop-service.js.map +1 -1
- package/dist/services/kill-switch-service.d.ts.map +1 -1
- package/dist/services/kill-switch-service.js +36 -21
- package/dist/services/kill-switch-service.js.map +1 -1
- package/dist/services/webhook-delivery-queue.d.ts +53 -0
- package/dist/services/webhook-delivery-queue.d.ts.map +1 -0
- package/dist/services/webhook-delivery-queue.js +118 -0
- package/dist/services/webhook-delivery-queue.js.map +1 -0
- package/dist/services/webhook-service.d.ts +46 -0
- package/dist/services/webhook-service.d.ts.map +1 -0
- package/dist/services/webhook-service.js +160 -0
- package/dist/services/webhook-service.js.map +1 -0
- package/package.json +5 -5
- package/public/admin/assets/{index-CBU6NfOH.js → index-RagPnRU1.js} +2 -2
- package/public/admin/index.html +1 -1
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @see docs/52-auth-redesign.md
|
|
10
10
|
*/
|
|
11
|
+
import type { Database as SQLiteDatabase } from 'better-sqlite3';
|
|
11
12
|
/** Mutable ref for in-memory master password + hash, enabling hot-swap on password change. */
|
|
12
13
|
export interface MasterPasswordRef {
|
|
13
14
|
password: string;
|
|
@@ -17,6 +18,8 @@ export interface MasterAuthDeps {
|
|
|
17
18
|
masterPasswordHash?: string;
|
|
18
19
|
/** Mutable ref for live password/hash updates. Takes precedence over masterPasswordHash. */
|
|
19
20
|
passwordRef?: MasterPasswordRef;
|
|
21
|
+
/** Raw SQLite for audit logging (MASTER_AUTH_FAILED). */
|
|
22
|
+
sqlite?: SQLiteDatabase;
|
|
20
23
|
}
|
|
21
24
|
export declare function createMasterAuth(deps: MasterAuthDeps): import("hono").MiddlewareHandler<any, string, {}, Response>;
|
|
22
25
|
//# sourceMappingURL=master-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master-auth.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/master-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"master-auth.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/master-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOjE,8FAA8F;AAC9F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4FAA4F;IAC5F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,yDAAyD;IACzD,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,+DA2CpD"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { createMiddleware } from 'hono/factory';
|
|
12
12
|
import argon2 from 'argon2';
|
|
13
13
|
import { WAIaaSError } from '@waiaas/core';
|
|
14
|
+
import { insertAuditLog } from '../../infrastructure/database/audit-helper.js';
|
|
14
15
|
// ---------------------------------------------------------------------------
|
|
15
16
|
// Middleware factory
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
@@ -32,6 +33,19 @@ export function createMasterAuth(deps) {
|
|
|
32
33
|
// Verify password against stored Argon2id hash
|
|
33
34
|
const isValid = await argon2.verify(hash, password);
|
|
34
35
|
if (!isValid) {
|
|
36
|
+
// Audit log: MASTER_AUTH_FAILED (best-effort)
|
|
37
|
+
if (deps.sqlite) {
|
|
38
|
+
insertAuditLog(deps.sqlite, {
|
|
39
|
+
eventType: 'MASTER_AUTH_FAILED',
|
|
40
|
+
actor: 'unknown',
|
|
41
|
+
details: {
|
|
42
|
+
reason: 'Invalid master password',
|
|
43
|
+
ip: c.req.header('x-forwarded-for') ?? 'localhost',
|
|
44
|
+
},
|
|
45
|
+
severity: 'critical',
|
|
46
|
+
ipAddress: c.req.header('x-forwarded-for') ?? undefined,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
35
49
|
throw new WAIaaSError('INVALID_MASTER_PASSWORD', {
|
|
36
50
|
message: 'Invalid master password',
|
|
37
51
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master-auth.js","sourceRoot":"","sources":["../../../src/api/middleware/master-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"master-auth.js","sourceRoot":"","sources":["../../../src/api/middleware/master-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAoB/E,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,OAAO,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,WAAW,CAAC,yBAAyB,EAAE;gBAC/C,OAAO,EAAE,sCAAsC;aAChD,CAAC,CAAC;QACL,CAAC;QAED,kEAAkE;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,WAAW,CAAC,yBAAyB,EAAE;gBAC/C,OAAO,EAAE,gCAAgC;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,+CAA+C;QAC/C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,8CAA8C;YAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE;oBAC1B,SAAS,EAAE,oBAAoB;oBAC/B,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE;wBACP,MAAM,EAAE,yBAAyB;wBACjC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,WAAW;qBACnD;oBACD,QAAQ,EAAE,UAAU;oBACpB,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,SAAS;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,WAAW,CAAC,yBAAyB,EAAE;gBAC/C,OAAO,EAAE,yBAAyB;aACnC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -47,6 +47,7 @@ import type { VersionCheckService } from '../../infrastructure/version/version-c
|
|
|
47
47
|
import type { DelayQueue } from '../../workflow/delay-queue.js';
|
|
48
48
|
import type { ApprovalWorkflow } from '../../workflow/approval-workflow.js';
|
|
49
49
|
import type { MasterPasswordRef } from '../middleware/master-auth.js';
|
|
50
|
+
import type { EncryptedBackupService } from '../../infrastructure/backup/encrypted-backup-service.js';
|
|
50
51
|
export interface KillSwitchState {
|
|
51
52
|
state: string;
|
|
52
53
|
activatedAt: number | null;
|
|
@@ -83,6 +84,9 @@ export interface AdminRouteDeps {
|
|
|
83
84
|
delayQueue?: DelayQueue;
|
|
84
85
|
approvalWorkflow?: ApprovalWorkflow;
|
|
85
86
|
rpcPool?: RpcPool;
|
|
87
|
+
encryptedBackupService?: EncryptedBackupService;
|
|
88
|
+
adminStatsService?: import('../../services/admin-stats-service.js').AdminStatsService;
|
|
89
|
+
autoStopService?: import('../../services/autostop/autostop-service.js').AutoStopService;
|
|
86
90
|
}
|
|
87
91
|
export declare function adminRoutes(deps: AdminRouteDeps): OpenAPIHono;
|
|
88
92
|
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/api/routes/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,KAAK,EAAyE,YAAY,EAAE,iBAAiB,EAAgB,MAAM,cAAc,CAAC;AACzJ,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,gDAAgD,CAAC;AAKnG,OAAO,KAAK,KAAK,MAAM,MAAM,yCAAyC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/api/routes/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,KAAK,EAAyE,YAAY,EAAE,iBAAiB,EAAgB,MAAM,cAAc,CAAC;AACzJ,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,gDAAgD,CAAC;AAKnG,OAAO,KAAK,KAAK,MAAM,MAAM,yCAAyC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAiCtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AAMtG,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,wEAAwE;IACxE,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,EAAE,MAAM,eAAe,CAAC;IAC1C,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,kBAAkB,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;IACnD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE;QAAE,yBAAyB,EAAE,OAAO,CAAC;QAAC,wBAAwB,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,iBAAiB,CAAC,EAAE,OAAO,uCAAuC,EAAE,iBAAiB,CAAC;IACtF,eAAe,CAAC,EAAE,OAAO,6CAA6C,EAAE,eAAe,CAAC;CACzF;AAqzBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAskE7D"}
|
package/dist/api/routes/admin.js
CHANGED
|
@@ -40,7 +40,7 @@ import { generateId } from '../../infrastructure/database/id.js';
|
|
|
40
40
|
import { buildConnectInfoPrompt } from './connect-info.js';
|
|
41
41
|
import { getSettingDefinition } from '../../infrastructure/settings/index.js';
|
|
42
42
|
import { resolveRpcUrl } from '../../infrastructure/adapter-pool.js';
|
|
43
|
-
import { AdminStatusResponseSchema, KillSwitchResponseSchema, KillSwitchActivateResponseSchema, KillSwitchEscalateResponseSchema, MasterPasswordChangeRequestSchema, MasterPasswordChangeResponseSchema, RecoverResponseSchema, KillSwitchRecoverRequestSchema, ShutdownResponseSchema, RotateSecretResponseSchema, NotificationStatusResponseSchema, NotificationTestRequestSchema, NotificationTestResponseSchema, NotificationLogResponseSchema, SettingsResponseSchema, SettingsUpdateRequestSchema, SettingsUpdateResponseSchema, TestRpcRequestSchema, TestRpcResponseSchema, OracleStatusResponseSchema, AgentPromptRequestSchema, AgentPromptResponseSchema, SessionReissueResponseSchema, StakingPositionsResponseSchema, RpcStatusResponseSchema, buildErrorResponses, openApiValidationHook, } from './openapi-schemas.js';
|
|
43
|
+
import { AdminStatusResponseSchema, KillSwitchResponseSchema, KillSwitchActivateResponseSchema, KillSwitchEscalateResponseSchema, MasterPasswordChangeRequestSchema, MasterPasswordChangeResponseSchema, RecoverResponseSchema, KillSwitchRecoverRequestSchema, ShutdownResponseSchema, RotateSecretResponseSchema, NotificationStatusResponseSchema, NotificationTestRequestSchema, NotificationTestResponseSchema, NotificationLogResponseSchema, SettingsResponseSchema, SettingsUpdateRequestSchema, SettingsUpdateResponseSchema, TestRpcRequestSchema, TestRpcResponseSchema, OracleStatusResponseSchema, AgentPromptRequestSchema, AgentPromptResponseSchema, SessionReissueResponseSchema, StakingPositionsResponseSchema, RpcStatusResponseSchema, BackupInfoResponseSchema, BackupListResponseSchema, ErrorResponseSchema, buildErrorResponses, openApiValidationHook, } from './openapi-schemas.js';
|
|
44
44
|
// ---------------------------------------------------------------------------
|
|
45
45
|
// Route definitions
|
|
46
46
|
// ---------------------------------------------------------------------------
|
|
@@ -2328,6 +2328,191 @@ export function adminRoutes(deps) {
|
|
|
2328
2328
|
activeCount: positions.length,
|
|
2329
2329
|
}, 200);
|
|
2330
2330
|
});
|
|
2331
|
+
// ---------------------------------------------------------------------------
|
|
2332
|
+
// POST /admin/backup (create encrypted backup)
|
|
2333
|
+
// ---------------------------------------------------------------------------
|
|
2334
|
+
const createBackupRoute = createRoute({
|
|
2335
|
+
method: 'post',
|
|
2336
|
+
path: '/admin/backup',
|
|
2337
|
+
tags: ['Admin'],
|
|
2338
|
+
summary: 'Create an encrypted backup',
|
|
2339
|
+
responses: {
|
|
2340
|
+
200: {
|
|
2341
|
+
description: 'Backup created successfully',
|
|
2342
|
+
content: { 'application/json': { schema: BackupInfoResponseSchema } },
|
|
2343
|
+
},
|
|
2344
|
+
401: {
|
|
2345
|
+
description: 'Master password not available',
|
|
2346
|
+
content: { 'application/json': { schema: ErrorResponseSchema } },
|
|
2347
|
+
},
|
|
2348
|
+
501: {
|
|
2349
|
+
description: 'Backup service not configured',
|
|
2350
|
+
content: { 'application/json': { schema: ErrorResponseSchema } },
|
|
2351
|
+
},
|
|
2352
|
+
...buildErrorResponses(['INVALID_MASTER_PASSWORD']),
|
|
2353
|
+
},
|
|
2354
|
+
});
|
|
2355
|
+
router.openapi(createBackupRoute, async (c) => {
|
|
2356
|
+
if (!deps.encryptedBackupService) {
|
|
2357
|
+
return c.json({ code: 'NOT_CONFIGURED', message: 'Backup service not configured', retryable: false }, 501);
|
|
2358
|
+
}
|
|
2359
|
+
if (!deps.passwordRef?.password) {
|
|
2360
|
+
return c.json({ code: 'INVALID_MASTER_PASSWORD', message: 'Master password not available', retryable: false }, 401);
|
|
2361
|
+
}
|
|
2362
|
+
const info = await deps.encryptedBackupService.createBackup(deps.passwordRef.password);
|
|
2363
|
+
return c.json(info, 200);
|
|
2364
|
+
});
|
|
2365
|
+
// ---------------------------------------------------------------------------
|
|
2366
|
+
// GET /admin/backups (list backups)
|
|
2367
|
+
// ---------------------------------------------------------------------------
|
|
2368
|
+
const listBackupsRoute = createRoute({
|
|
2369
|
+
method: 'get',
|
|
2370
|
+
path: '/admin/backups',
|
|
2371
|
+
tags: ['Admin'],
|
|
2372
|
+
summary: 'List available backups',
|
|
2373
|
+
responses: {
|
|
2374
|
+
200: {
|
|
2375
|
+
description: 'Backup list',
|
|
2376
|
+
content: { 'application/json': { schema: BackupListResponseSchema } },
|
|
2377
|
+
},
|
|
2378
|
+
501: {
|
|
2379
|
+
description: 'Backup service not configured',
|
|
2380
|
+
content: { 'application/json': { schema: ErrorResponseSchema } },
|
|
2381
|
+
},
|
|
2382
|
+
},
|
|
2383
|
+
});
|
|
2384
|
+
router.openapi(listBackupsRoute, async (c) => {
|
|
2385
|
+
if (!deps.encryptedBackupService) {
|
|
2386
|
+
return c.json({ code: 'NOT_CONFIGURED', message: 'Backup service not configured', retryable: false }, 501);
|
|
2387
|
+
}
|
|
2388
|
+
const backups = deps.encryptedBackupService.listBackups();
|
|
2389
|
+
const retentionCount = deps.daemonConfig?.backup?.retention_count ?? 7;
|
|
2390
|
+
return c.json({ backups, total: backups.length, retention_count: retentionCount }, 200);
|
|
2391
|
+
});
|
|
2392
|
+
// ---------------------------------------------------------------------------
|
|
2393
|
+
// GET /admin/stats -- 7-category operational statistics (STAT-01)
|
|
2394
|
+
// ---------------------------------------------------------------------------
|
|
2395
|
+
const adminStatsRoute = createRoute({
|
|
2396
|
+
method: 'get',
|
|
2397
|
+
path: '/admin/stats',
|
|
2398
|
+
tags: ['Admin'],
|
|
2399
|
+
summary: 'Get operational statistics',
|
|
2400
|
+
responses: {
|
|
2401
|
+
200: {
|
|
2402
|
+
description: 'Operational statistics (7 categories)',
|
|
2403
|
+
content: { 'application/json': { schema: z.any() } },
|
|
2404
|
+
},
|
|
2405
|
+
},
|
|
2406
|
+
});
|
|
2407
|
+
router.openapi(adminStatsRoute, async (c) => {
|
|
2408
|
+
if (!deps.adminStatsService) {
|
|
2409
|
+
return c.json({ code: 'NOT_CONFIGURED', message: 'Stats service not configured', retryable: false }, 503);
|
|
2410
|
+
}
|
|
2411
|
+
const stats = deps.adminStatsService.getStats();
|
|
2412
|
+
return c.json(stats, 200);
|
|
2413
|
+
});
|
|
2414
|
+
// ---------------------------------------------------------------------------
|
|
2415
|
+
// GET /admin/autostop/rules -- List AutoStop rules with status (PLUG-03)
|
|
2416
|
+
// ---------------------------------------------------------------------------
|
|
2417
|
+
const autostopRulesRoute = createRoute({
|
|
2418
|
+
method: 'get',
|
|
2419
|
+
path: '/admin/autostop/rules',
|
|
2420
|
+
tags: ['Admin'],
|
|
2421
|
+
summary: 'List AutoStop rules with status',
|
|
2422
|
+
responses: {
|
|
2423
|
+
200: {
|
|
2424
|
+
description: 'AutoStop rules list',
|
|
2425
|
+
content: { 'application/json': { schema: z.any() } },
|
|
2426
|
+
},
|
|
2427
|
+
},
|
|
2428
|
+
});
|
|
2429
|
+
router.openapi(autostopRulesRoute, async (c) => {
|
|
2430
|
+
if (!deps.autoStopService) {
|
|
2431
|
+
return c.json({ globalEnabled: false, rules: [] }, 200);
|
|
2432
|
+
}
|
|
2433
|
+
const status = deps.autoStopService.getStatus();
|
|
2434
|
+
const registry = deps.autoStopService.registry;
|
|
2435
|
+
const rules = registry.getRules().map((r) => {
|
|
2436
|
+
const ruleStatus = r.getStatus();
|
|
2437
|
+
return {
|
|
2438
|
+
id: r.id,
|
|
2439
|
+
displayName: r.displayName,
|
|
2440
|
+
description: r.description,
|
|
2441
|
+
enabled: r.enabled,
|
|
2442
|
+
subscribedEvents: r.subscribedEvents,
|
|
2443
|
+
config: ruleStatus.config,
|
|
2444
|
+
state: ruleStatus.state,
|
|
2445
|
+
};
|
|
2446
|
+
});
|
|
2447
|
+
return c.json({ globalEnabled: status.enabled, rules }, 200);
|
|
2448
|
+
});
|
|
2449
|
+
// ---------------------------------------------------------------------------
|
|
2450
|
+
// PUT /admin/autostop/rules/:id -- Update AutoStop rule (PLUG-03)
|
|
2451
|
+
// ---------------------------------------------------------------------------
|
|
2452
|
+
const autostopRuleUpdateRoute = createRoute({
|
|
2453
|
+
method: 'put',
|
|
2454
|
+
path: '/admin/autostop/rules/{id}',
|
|
2455
|
+
tags: ['Admin'],
|
|
2456
|
+
summary: 'Update AutoStop rule enabled/config',
|
|
2457
|
+
request: {
|
|
2458
|
+
params: z.object({ id: z.string() }),
|
|
2459
|
+
body: {
|
|
2460
|
+
content: {
|
|
2461
|
+
'application/json': {
|
|
2462
|
+
schema: z.object({
|
|
2463
|
+
enabled: z.boolean().optional(),
|
|
2464
|
+
config: z.record(z.unknown()).optional(),
|
|
2465
|
+
}),
|
|
2466
|
+
},
|
|
2467
|
+
},
|
|
2468
|
+
},
|
|
2469
|
+
},
|
|
2470
|
+
responses: {
|
|
2471
|
+
200: {
|
|
2472
|
+
description: 'Rule updated',
|
|
2473
|
+
content: { 'application/json': { schema: z.any() } },
|
|
2474
|
+
},
|
|
2475
|
+
404: {
|
|
2476
|
+
description: 'Rule not found',
|
|
2477
|
+
content: { 'application/json': { schema: z.any() } },
|
|
2478
|
+
},
|
|
2479
|
+
},
|
|
2480
|
+
});
|
|
2481
|
+
router.openapi(autostopRuleUpdateRoute, async (c) => {
|
|
2482
|
+
if (!deps.autoStopService) {
|
|
2483
|
+
throw new WAIaaSError('RULE_NOT_FOUND');
|
|
2484
|
+
}
|
|
2485
|
+
const { id } = c.req.valid('param');
|
|
2486
|
+
const body = c.req.valid('json');
|
|
2487
|
+
const registry = deps.autoStopService.registry;
|
|
2488
|
+
const rule = registry.getRule(id);
|
|
2489
|
+
if (!rule) {
|
|
2490
|
+
throw new WAIaaSError('RULE_NOT_FOUND');
|
|
2491
|
+
}
|
|
2492
|
+
// Update enabled state
|
|
2493
|
+
if (body.enabled !== undefined) {
|
|
2494
|
+
registry.setEnabled(id, body.enabled);
|
|
2495
|
+
// Persist to Admin Settings
|
|
2496
|
+
if (deps.settingsService) {
|
|
2497
|
+
deps.settingsService.set(`autostop.rule.${id}.enabled`, String(body.enabled));
|
|
2498
|
+
}
|
|
2499
|
+
}
|
|
2500
|
+
// Update config
|
|
2501
|
+
if (body.config) {
|
|
2502
|
+
rule.updateConfig(body.config);
|
|
2503
|
+
}
|
|
2504
|
+
// Return updated rule info
|
|
2505
|
+
const ruleStatus = rule.getStatus();
|
|
2506
|
+
return c.json({
|
|
2507
|
+
id: rule.id,
|
|
2508
|
+
displayName: rule.displayName,
|
|
2509
|
+
description: rule.description,
|
|
2510
|
+
enabled: rule.enabled,
|
|
2511
|
+
subscribedEvents: rule.subscribedEvents,
|
|
2512
|
+
config: ruleStatus.config,
|
|
2513
|
+
state: ruleStatus.state,
|
|
2514
|
+
}, 200);
|
|
2515
|
+
});
|
|
2331
2516
|
return router;
|
|
2332
2517
|
}
|
|
2333
2518
|
//# sourceMappingURL=admin.js.map
|