@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.
Files changed (163) hide show
  1. package/dist/api/middleware/master-auth.d.ts +3 -0
  2. package/dist/api/middleware/master-auth.d.ts.map +1 -1
  3. package/dist/api/middleware/master-auth.js +14 -0
  4. package/dist/api/middleware/master-auth.js.map +1 -1
  5. package/dist/api/routes/admin.d.ts +4 -0
  6. package/dist/api/routes/admin.d.ts.map +1 -1
  7. package/dist/api/routes/admin.js +186 -1
  8. package/dist/api/routes/admin.js.map +1 -1
  9. package/dist/api/routes/audit-logs.d.ts +15 -0
  10. package/dist/api/routes/audit-logs.d.ts.map +1 -0
  11. package/dist/api/routes/audit-logs.js +119 -0
  12. package/dist/api/routes/audit-logs.js.map +1 -0
  13. package/dist/api/routes/index.d.ts +2 -1
  14. package/dist/api/routes/index.d.ts.map +1 -1
  15. package/dist/api/routes/index.js +2 -1
  16. package/dist/api/routes/index.js.map +1 -1
  17. package/dist/api/routes/openapi-schemas.d.ts +324 -6
  18. package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
  19. package/dist/api/routes/openapi-schemas.js +76 -0
  20. package/dist/api/routes/openapi-schemas.js.map +1 -1
  21. package/dist/api/routes/sessions.d.ts +2 -0
  22. package/dist/api/routes/sessions.d.ts.map +1 -1
  23. package/dist/api/routes/sessions.js +21 -0
  24. package/dist/api/routes/sessions.js.map +1 -1
  25. package/dist/api/routes/transactions.d.ts +2 -1
  26. package/dist/api/routes/transactions.d.ts.map +1 -1
  27. package/dist/api/routes/transactions.js +72 -1
  28. package/dist/api/routes/transactions.js.map +1 -1
  29. package/dist/api/routes/wallets.d.ts.map +1 -1
  30. package/dist/api/routes/wallets.js +25 -0
  31. package/dist/api/routes/wallets.js.map +1 -1
  32. package/dist/api/routes/webhooks.d.ts +17 -0
  33. package/dist/api/routes/webhooks.d.ts.map +1 -0
  34. package/dist/api/routes/webhooks.js +218 -0
  35. package/dist/api/routes/webhooks.js.map +1 -0
  36. package/dist/api/server.d.ts +27 -0
  37. package/dist/api/server.d.ts.map +1 -1
  38. package/dist/api/server.js +31 -5
  39. package/dist/api/server.js.map +1 -1
  40. package/dist/index.d.ts +3 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/infrastructure/backup/backup-format.d.ts +107 -0
  45. package/dist/infrastructure/backup/backup-format.d.ts.map +1 -0
  46. package/dist/infrastructure/backup/backup-format.js +134 -0
  47. package/dist/infrastructure/backup/backup-format.js.map +1 -0
  48. package/dist/infrastructure/backup/encrypted-backup-service.d.ts +56 -0
  49. package/dist/infrastructure/backup/encrypted-backup-service.d.ts.map +1 -0
  50. package/dist/infrastructure/backup/encrypted-backup-service.js +269 -0
  51. package/dist/infrastructure/backup/encrypted-backup-service.js.map +1 -0
  52. package/dist/infrastructure/backup/index.d.ts +3 -0
  53. package/dist/infrastructure/backup/index.d.ts.map +1 -1
  54. package/dist/infrastructure/backup/index.js +2 -0
  55. package/dist/infrastructure/backup/index.js.map +1 -1
  56. package/dist/infrastructure/config/loader.d.ts +23 -0
  57. package/dist/infrastructure/config/loader.d.ts.map +1 -1
  58. package/dist/infrastructure/config/loader.js +8 -0
  59. package/dist/infrastructure/config/loader.js.map +1 -1
  60. package/dist/infrastructure/database/audit-helper.d.ts +29 -0
  61. package/dist/infrastructure/database/audit-helper.d.ts.map +1 -0
  62. package/dist/infrastructure/database/audit-helper.js +30 -0
  63. package/dist/infrastructure/database/audit-helper.js.map +1 -0
  64. package/dist/infrastructure/database/index.d.ts +2 -0
  65. package/dist/infrastructure/database/index.d.ts.map +1 -1
  66. package/dist/infrastructure/database/index.js +1 -0
  67. package/dist/infrastructure/database/index.js.map +1 -1
  68. package/dist/infrastructure/database/migrate.d.ts +1 -1
  69. package/dist/infrastructure/database/migrate.d.ts.map +1 -1
  70. package/dist/infrastructure/database/migrate.js +83 -2
  71. package/dist/infrastructure/database/migrate.js.map +1 -1
  72. package/dist/infrastructure/database/schema.d.ts +343 -1
  73. package/dist/infrastructure/database/schema.d.ts.map +1 -1
  74. package/dist/infrastructure/database/schema.js +41 -1
  75. package/dist/infrastructure/database/schema.js.map +1 -1
  76. package/dist/infrastructure/metrics/in-memory-counter.d.ts +34 -0
  77. package/dist/infrastructure/metrics/in-memory-counter.d.ts.map +1 -0
  78. package/dist/infrastructure/metrics/in-memory-counter.js +88 -0
  79. package/dist/infrastructure/metrics/in-memory-counter.js.map +1 -0
  80. package/dist/infrastructure/settings/hot-reload.d.ts +1 -0
  81. package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -1
  82. package/dist/infrastructure/settings/hot-reload.js +23 -2
  83. package/dist/infrastructure/settings/hot-reload.js.map +1 -1
  84. package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -1
  85. package/dist/infrastructure/settings/setting-keys.js +4 -0
  86. package/dist/infrastructure/settings/setting-keys.js.map +1 -1
  87. package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -1
  88. package/dist/infrastructure/telegram/telegram-bot-service.js +32 -19
  89. package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -1
  90. package/dist/lifecycle/daemon.d.ts +8 -1
  91. package/dist/lifecycle/daemon.d.ts.map +1 -1
  92. package/dist/lifecycle/daemon.js +103 -1
  93. package/dist/lifecycle/daemon.js.map +1 -1
  94. package/dist/pipeline/dry-run.d.ts +68 -0
  95. package/dist/pipeline/dry-run.d.ts.map +1 -0
  96. package/dist/pipeline/dry-run.js +426 -0
  97. package/dist/pipeline/dry-run.js.map +1 -0
  98. package/dist/pipeline/index.d.ts +1 -0
  99. package/dist/pipeline/index.d.ts.map +1 -1
  100. package/dist/pipeline/index.js +2 -0
  101. package/dist/pipeline/index.js.map +1 -1
  102. package/dist/pipeline/pipeline.d.ts +18 -1
  103. package/dist/pipeline/pipeline.d.ts.map +1 -1
  104. package/dist/pipeline/pipeline.js +38 -0
  105. package/dist/pipeline/pipeline.js.map +1 -1
  106. package/dist/pipeline/stages.d.ts +31 -1
  107. package/dist/pipeline/stages.d.ts.map +1 -1
  108. package/dist/pipeline/stages.js +120 -22
  109. package/dist/pipeline/stages.js.map +1 -1
  110. package/dist/services/admin-stats-service.d.ts +48 -0
  111. package/dist/services/admin-stats-service.d.ts.map +1 -0
  112. package/dist/services/admin-stats-service.js +182 -0
  113. package/dist/services/admin-stats-service.js.map +1 -0
  114. package/dist/services/autostop/autostop-service.d.ts +83 -0
  115. package/dist/services/autostop/autostop-service.d.ts.map +1 -0
  116. package/dist/services/autostop/autostop-service.js +252 -0
  117. package/dist/services/autostop/autostop-service.js.map +1 -0
  118. package/dist/services/autostop/index.d.ts +15 -0
  119. package/dist/services/autostop/index.d.ts.map +1 -0
  120. package/dist/services/autostop/index.js +11 -0
  121. package/dist/services/autostop/index.js.map +1 -0
  122. package/dist/services/autostop/rule-registry.d.ts +42 -0
  123. package/dist/services/autostop/rule-registry.d.ts.map +1 -0
  124. package/dist/services/autostop/rule-registry.js +54 -0
  125. package/dist/services/autostop/rule-registry.js.map +1 -0
  126. package/dist/services/autostop/rules/consecutive-failures.rule.d.ts +38 -0
  127. package/dist/services/autostop/rules/consecutive-failures.rule.d.ts.map +1 -0
  128. package/dist/services/autostop/rules/consecutive-failures.rule.js +75 -0
  129. package/dist/services/autostop/rules/consecutive-failures.rule.js.map +1 -0
  130. package/dist/services/autostop/rules/idle-timeout.rule.d.ts +43 -0
  131. package/dist/services/autostop/rules/idle-timeout.rule.d.ts.map +1 -0
  132. package/dist/services/autostop/rules/idle-timeout.rule.js +128 -0
  133. package/dist/services/autostop/rules/idle-timeout.rule.js.map +1 -0
  134. package/dist/services/autostop/rules/unusual-activity.rule.d.ts +33 -0
  135. package/dist/services/autostop/rules/unusual-activity.rule.d.ts.map +1 -0
  136. package/dist/services/autostop/rules/unusual-activity.rule.js +73 -0
  137. package/dist/services/autostop/rules/unusual-activity.rule.js.map +1 -0
  138. package/dist/services/autostop/types.d.ts +49 -0
  139. package/dist/services/autostop/types.d.ts.map +1 -0
  140. package/dist/services/autostop/types.js +10 -0
  141. package/dist/services/autostop/types.js.map +1 -0
  142. package/dist/services/autostop-rules.d.ts +11 -74
  143. package/dist/services/autostop-rules.d.ts.map +1 -1
  144. package/dist/services/autostop-rules.js +9 -169
  145. package/dist/services/autostop-rules.js.map +1 -1
  146. package/dist/services/autostop-service.d.ts +6 -77
  147. package/dist/services/autostop-service.d.ts.map +1 -1
  148. package/dist/services/autostop-service.js +5 -212
  149. package/dist/services/autostop-service.js.map +1 -1
  150. package/dist/services/kill-switch-service.d.ts.map +1 -1
  151. package/dist/services/kill-switch-service.js +36 -21
  152. package/dist/services/kill-switch-service.js.map +1 -1
  153. package/dist/services/webhook-delivery-queue.d.ts +53 -0
  154. package/dist/services/webhook-delivery-queue.d.ts.map +1 -0
  155. package/dist/services/webhook-delivery-queue.js +118 -0
  156. package/dist/services/webhook-delivery-queue.js.map +1 -0
  157. package/dist/services/webhook-service.d.ts +46 -0
  158. package/dist/services/webhook-service.d.ts.map +1 -0
  159. package/dist/services/webhook-service.js +160 -0
  160. package/dist/services/webhook-service.js.map +1 -0
  161. package/package.json +5 -5
  162. package/public/admin/assets/{index-CBU6NfOH.js → index-RagPnRU1.js} +2 -2
  163. 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;AAUH,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;CACjC;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,+DA6BpD"}
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;AAkB3C,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,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"}
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":"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"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/api/routes/admin.ts"],"names":[],"mappings":"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"}
@@ -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