@waiaas/daemon 2.10.0 → 2.10.1-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 (95) hide show
  1. package/dist/api/helpers/resolve-chain-id.d.ts +2 -0
  2. package/dist/api/helpers/resolve-chain-id.d.ts.map +1 -0
  3. package/dist/api/helpers/resolve-chain-id.js +21 -0
  4. package/dist/api/helpers/resolve-chain-id.js.map +1 -0
  5. package/dist/api/routes/actions.d.ts.map +1 -1
  6. package/dist/api/routes/actions.js +1 -20
  7. package/dist/api/routes/actions.js.map +1 -1
  8. package/dist/api/routes/admin-actions.d.ts.map +1 -1
  9. package/dist/api/routes/admin-actions.js +1 -19
  10. package/dist/api/routes/admin-actions.js.map +1 -1
  11. package/dist/api/routes/admin-auth.d.ts +9 -0
  12. package/dist/api/routes/admin-auth.d.ts.map +1 -0
  13. package/dist/api/routes/admin-auth.js +453 -0
  14. package/dist/api/routes/admin-auth.js.map +1 -0
  15. package/dist/api/routes/admin-monitoring.d.ts +10 -0
  16. package/dist/api/routes/admin-monitoring.d.ts.map +1 -0
  17. package/dist/api/routes/admin-monitoring.js +788 -0
  18. package/dist/api/routes/admin-monitoring.js.map +1 -0
  19. package/dist/api/routes/admin-notifications.d.ts +9 -0
  20. package/dist/api/routes/admin-notifications.d.ts.map +1 -0
  21. package/dist/api/routes/admin-notifications.js +210 -0
  22. package/dist/api/routes/admin-notifications.js.map +1 -0
  23. package/dist/api/routes/admin-settings.d.ts +9 -0
  24. package/dist/api/routes/admin-settings.d.ts.map +1 -0
  25. package/dist/api/routes/admin-settings.js +433 -0
  26. package/dist/api/routes/admin-settings.js.map +1 -0
  27. package/dist/api/routes/admin-wallets.d.ts +16 -0
  28. package/dist/api/routes/admin-wallets.d.ts.map +1 -0
  29. package/dist/api/routes/admin-wallets.js +582 -0
  30. package/dist/api/routes/admin-wallets.js.map +1 -0
  31. package/dist/api/routes/admin.d.ts +8 -26
  32. package/dist/api/routes/admin.d.ts.map +1 -1
  33. package/dist/api/routes/admin.js +20 -2536
  34. package/dist/api/routes/admin.js.map +1 -1
  35. package/dist/api/routes/erc8004.d.ts.map +1 -1
  36. package/dist/api/routes/erc8004.js +0 -1
  37. package/dist/api/routes/erc8004.js.map +1 -1
  38. package/dist/api/routes/mcp.d.ts +2 -0
  39. package/dist/api/routes/mcp.d.ts.map +1 -1
  40. package/dist/api/routes/mcp.js +2 -1
  41. package/dist/api/routes/mcp.js.map +1 -1
  42. package/dist/api/routes/nft-approvals.js +4 -4
  43. package/dist/api/routes/nft-approvals.js.map +1 -1
  44. package/dist/api/routes/sessions.d.ts +2 -0
  45. package/dist/api/routes/sessions.d.ts.map +1 -1
  46. package/dist/api/routes/sessions.js +5 -3
  47. package/dist/api/routes/sessions.js.map +1 -1
  48. package/dist/api/routes/wallets.d.ts.map +1 -1
  49. package/dist/api/routes/wallets.js +3 -3
  50. package/dist/api/routes/wallets.js.map +1 -1
  51. package/dist/api/server.d.ts.map +1 -1
  52. package/dist/api/server.js +2 -0
  53. package/dist/api/server.js.map +1 -1
  54. package/dist/constants.d.ts +17 -0
  55. package/dist/constants.d.ts.map +1 -0
  56. package/dist/constants.js +17 -0
  57. package/dist/constants.js.map +1 -0
  58. package/dist/infrastructure/nft/nft-indexer-client.d.ts.map +1 -1
  59. package/dist/infrastructure/nft/nft-indexer-client.js +3 -3
  60. package/dist/infrastructure/nft/nft-indexer-client.js.map +1 -1
  61. package/dist/infrastructure/oracle/coingecko-forex.d.ts.map +1 -1
  62. package/dist/infrastructure/oracle/coingecko-forex.js +2 -3
  63. package/dist/infrastructure/oracle/coingecko-forex.js.map +1 -1
  64. package/dist/infrastructure/oracle/coingecko-oracle.d.ts.map +1 -1
  65. package/dist/infrastructure/oracle/coingecko-oracle.js +2 -3
  66. package/dist/infrastructure/oracle/coingecko-oracle.js.map +1 -1
  67. package/dist/infrastructure/oracle/pyth-oracle.d.ts +0 -1
  68. package/dist/infrastructure/oracle/pyth-oracle.d.ts.map +1 -1
  69. package/dist/infrastructure/oracle/pyth-oracle.js +3 -3
  70. package/dist/infrastructure/oracle/pyth-oracle.js.map +1 -1
  71. package/dist/lifecycle/workers.d.ts.map +1 -1
  72. package/dist/lifecycle/workers.js +2 -1
  73. package/dist/lifecycle/workers.js.map +1 -1
  74. package/dist/pipeline/dry-run.d.ts.map +1 -1
  75. package/dist/pipeline/dry-run.js +4 -3
  76. package/dist/pipeline/dry-run.js.map +1 -1
  77. package/dist/pipeline/stages.d.ts.map +1 -1
  78. package/dist/pipeline/stages.js +4 -3
  79. package/dist/pipeline/stages.js.map +1 -1
  80. package/dist/services/signing-sdk/channels/ntfy-signing-channel.js +2 -2
  81. package/dist/services/signing-sdk/channels/ntfy-signing-channel.js.map +1 -1
  82. package/dist/services/signing-sdk/channels/telegram-signing-channel.js +1 -1
  83. package/dist/services/signing-sdk/channels/telegram-signing-channel.js.map +1 -1
  84. package/dist/services/signing-sdk/channels/wallet-notification-channel.js +2 -2
  85. package/dist/services/signing-sdk/channels/wallet-notification-channel.js.map +1 -1
  86. package/dist/services/signing-sdk/sign-request-builder.d.ts +2 -0
  87. package/dist/services/signing-sdk/sign-request-builder.d.ts.map +1 -1
  88. package/dist/services/signing-sdk/sign-request-builder.js +20 -3
  89. package/dist/services/signing-sdk/sign-request-builder.js.map +1 -1
  90. package/dist/services/signing-sdk/sign-response-handler.js +4 -4
  91. package/dist/services/signing-sdk/sign-response-handler.js.map +1 -1
  92. package/package.json +5 -5
  93. package/public/admin/assets/index-By5VUJ-B.js +3 -0
  94. package/public/admin/index.html +1 -1
  95. package/public/admin/assets/index--wQVT9Dz.js +0 -3
@@ -0,0 +1,453 @@
1
+ /**
2
+ * Admin Auth route handlers: status, kill switch, recovery, shutdown, password change, JWT rotation.
3
+ *
4
+ * Extracted from admin.ts for maintainability.
5
+ */
6
+ import { createRoute } from '@hono/zod-openapi';
7
+ import { sql, eq } from 'drizzle-orm';
8
+ import { desc } from 'drizzle-orm';
9
+ import { WAIaaSError } from '@waiaas/core';
10
+ import { wallets, sessions, policies, transactions } from '../../infrastructure/database/schema.js';
11
+ import { AdminStatusResponseSchema, KillSwitchResponseSchema, KillSwitchActivateResponseSchema, KillSwitchEscalateResponseSchema, MasterPasswordChangeRequestSchema, MasterPasswordChangeResponseSchema, RecoverResponseSchema, KillSwitchRecoverRequestSchema, ShutdownResponseSchema, RotateSecretResponseSchema, buildErrorResponses, } from './openapi-schemas.js';
12
+ import { formatTxAmount } from './admin-wallets.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Route definitions
15
+ // ---------------------------------------------------------------------------
16
+ const statusRoute = createRoute({
17
+ method: 'get',
18
+ path: '/admin/status',
19
+ tags: ['Admin'],
20
+ summary: 'Get daemon status',
21
+ responses: {
22
+ 200: {
23
+ description: 'Daemon status',
24
+ content: { 'application/json': { schema: AdminStatusResponseSchema } },
25
+ },
26
+ },
27
+ });
28
+ const activateKillSwitchRoute = createRoute({
29
+ method: 'post',
30
+ path: '/admin/kill-switch',
31
+ tags: ['Admin'],
32
+ summary: 'Activate kill switch',
33
+ responses: {
34
+ 200: {
35
+ description: 'Kill switch activated',
36
+ content: { 'application/json': { schema: KillSwitchActivateResponseSchema } },
37
+ },
38
+ ...buildErrorResponses(['KILL_SWITCH_ACTIVE']),
39
+ },
40
+ });
41
+ const getKillSwitchRoute = createRoute({
42
+ method: 'get',
43
+ path: '/admin/kill-switch',
44
+ tags: ['Admin'],
45
+ summary: 'Get kill switch state',
46
+ responses: {
47
+ 200: {
48
+ description: 'Kill switch state',
49
+ content: { 'application/json': { schema: KillSwitchResponseSchema } },
50
+ },
51
+ },
52
+ });
53
+ const escalateKillSwitchRoute = createRoute({
54
+ method: 'post',
55
+ path: '/admin/kill-switch/escalate',
56
+ tags: ['Admin'],
57
+ summary: 'Escalate kill switch to LOCKED',
58
+ responses: {
59
+ 200: {
60
+ description: 'Kill switch escalated to LOCKED',
61
+ content: { 'application/json': { schema: KillSwitchEscalateResponseSchema } },
62
+ },
63
+ ...buildErrorResponses(['INVALID_STATE_TRANSITION']),
64
+ },
65
+ });
66
+ const recoverRoute = createRoute({
67
+ method: 'post',
68
+ path: '/admin/recover',
69
+ tags: ['Admin'],
70
+ summary: 'Recover from kill switch (dual-auth)',
71
+ request: {
72
+ body: {
73
+ content: { 'application/json': { schema: KillSwitchRecoverRequestSchema } },
74
+ required: false,
75
+ },
76
+ },
77
+ responses: {
78
+ 200: {
79
+ description: 'Kill switch deactivated',
80
+ content: { 'application/json': { schema: RecoverResponseSchema } },
81
+ },
82
+ ...buildErrorResponses(['KILL_SWITCH_NOT_ACTIVE', 'INVALID_STATE_TRANSITION', 'INVALID_SIGNATURE']),
83
+ },
84
+ });
85
+ const shutdownRoute = createRoute({
86
+ method: 'post',
87
+ path: '/admin/shutdown',
88
+ tags: ['Admin'],
89
+ summary: 'Initiate graceful shutdown',
90
+ responses: {
91
+ 200: {
92
+ description: 'Shutdown initiated',
93
+ content: { 'application/json': { schema: ShutdownResponseSchema } },
94
+ },
95
+ },
96
+ });
97
+ const masterPasswordChangeRoute = createRoute({
98
+ method: 'put',
99
+ path: '/admin/master-password',
100
+ tags: ['Admin'],
101
+ summary: 'Change master password',
102
+ request: {
103
+ body: {
104
+ content: { 'application/json': { schema: MasterPasswordChangeRequestSchema } },
105
+ },
106
+ },
107
+ responses: {
108
+ 200: {
109
+ description: 'Master password changed successfully',
110
+ content: { 'application/json': { schema: MasterPasswordChangeResponseSchema } },
111
+ },
112
+ ...buildErrorResponses(['INVALID_MASTER_PASSWORD', 'ACTION_VALIDATION_FAILED']),
113
+ },
114
+ });
115
+ const rotateSecretRoute = createRoute({
116
+ method: 'post',
117
+ path: '/admin/rotate-secret',
118
+ tags: ['Admin'],
119
+ summary: 'Rotate JWT secret',
120
+ responses: {
121
+ 200: {
122
+ description: 'JWT secret rotated',
123
+ content: { 'application/json': { schema: RotateSecretResponseSchema } },
124
+ },
125
+ ...buildErrorResponses(['ROTATION_TOO_RECENT']),
126
+ },
127
+ });
128
+ // ---------------------------------------------------------------------------
129
+ // Register handlers
130
+ // ---------------------------------------------------------------------------
131
+ export function registerAdminAuthRoutes(router, deps) {
132
+ // GET /admin/status
133
+ router.openapi(statusRoute, async (c) => {
134
+ const nowSec = Math.floor(Date.now() / 1000);
135
+ const uptime = nowSec - deps.startTime;
136
+ // Count wallets
137
+ const walletCountResult = deps.db
138
+ .select({ count: sql `count(*)` })
139
+ .from(wallets)
140
+ .get();
141
+ const walletCount = walletCountResult?.count ?? 0;
142
+ // Count active sessions (not expired, not revoked)
143
+ const activeSessionResult = deps.db
144
+ .select({ count: sql `count(*)` })
145
+ .from(sessions)
146
+ .where(sql `${sessions.revokedAt} IS NULL AND (${sessions.expiresAt} = 0 OR ${sessions.expiresAt} > ${nowSec})`)
147
+ .get();
148
+ const activeSessionCount = activeSessionResult?.count ?? 0;
149
+ // Count policies
150
+ const policyCountResult = deps.db
151
+ .select({ count: sql `count(*)` })
152
+ .from(policies)
153
+ .get();
154
+ const policyCount = policyCountResult?.count ?? 0;
155
+ // Count recent transactions (24h)
156
+ const cutoffSec = nowSec - 86400;
157
+ const recentTxCountResult = deps.db
158
+ .select({ count: sql `count(*)` })
159
+ .from(transactions)
160
+ .where(sql `${transactions.createdAt} > ${cutoffSec}`)
161
+ .get();
162
+ const recentTxCount = recentTxCountResult?.count ?? 0;
163
+ // Count failed transactions (24h)
164
+ const failedTxCountResult = deps.db
165
+ .select({ count: sql `count(*)` })
166
+ .from(transactions)
167
+ .where(sql `${transactions.status} = 'FAILED' AND ${transactions.createdAt} > ${cutoffSec}`)
168
+ .get();
169
+ const failedTxCount = failedTxCountResult?.count ?? 0;
170
+ // Recent 5 transactions with wallet name
171
+ const recentTxRows = deps.db
172
+ .select({
173
+ id: transactions.id,
174
+ walletId: transactions.walletId,
175
+ walletName: wallets.name,
176
+ type: transactions.type,
177
+ status: transactions.status,
178
+ toAddress: transactions.toAddress,
179
+ amount: transactions.amount,
180
+ amountUsd: transactions.amountUsd,
181
+ network: transactions.network,
182
+ txHash: transactions.txHash,
183
+ chain: transactions.chain,
184
+ tokenMint: transactions.tokenMint,
185
+ contractAddress: transactions.contractAddress,
186
+ createdAt: transactions.createdAt,
187
+ })
188
+ .from(transactions)
189
+ .leftJoin(wallets, eq(transactions.walletId, wallets.id))
190
+ .orderBy(desc(transactions.createdAt))
191
+ .limit(5)
192
+ .all();
193
+ const recentTransactions = recentTxRows.map((tx) => {
194
+ const tokenAddr = tx.tokenMint ?? tx.contractAddress ?? null;
195
+ return {
196
+ id: tx.id,
197
+ walletId: tx.walletId,
198
+ walletName: tx.walletName ?? null,
199
+ type: tx.type,
200
+ status: tx.status,
201
+ toAddress: tx.toAddress ?? null,
202
+ amount: tx.amount ?? null,
203
+ formattedAmount: formatTxAmount(tx.amount ?? null, tx.chain, tx.network ?? null, tokenAddr, deps.db),
204
+ amountUsd: tx.amountUsd ?? null,
205
+ network: tx.network ?? null,
206
+ txHash: tx.txHash ?? null,
207
+ createdAt: tx.createdAt instanceof Date
208
+ ? Math.floor(tx.createdAt.getTime() / 1000)
209
+ : (typeof tx.createdAt === 'number' ? tx.createdAt : null),
210
+ };
211
+ });
212
+ const ksState = deps.killSwitchService
213
+ ? deps.killSwitchService.getState()
214
+ : deps.getKillSwitchState();
215
+ const latestVersion = deps.versionCheckService?.getLatest() ?? null;
216
+ const semverMod = await import('semver');
217
+ const updateAvailable = latestVersion !== null
218
+ && semverMod.default.valid(latestVersion) !== null
219
+ && semverMod.default.gt(latestVersion, deps.version);
220
+ // Check for auto-provisioned status (recovery.key exists in data dir)
221
+ const { existsSync } = await import('node:fs');
222
+ const { join } = await import('node:path');
223
+ const autoProvisioned = deps.dataDir
224
+ ? existsSync(join(deps.dataDir, 'recovery.key'))
225
+ : false;
226
+ return c.json({
227
+ status: 'running',
228
+ version: deps.version,
229
+ latestVersion,
230
+ updateAvailable,
231
+ uptime,
232
+ walletCount,
233
+ activeSessionCount,
234
+ killSwitchState: ksState.state,
235
+ adminTimeout: deps.adminTimeout,
236
+ timestamp: nowSec,
237
+ policyCount,
238
+ recentTxCount,
239
+ failedTxCount,
240
+ autoProvisioned,
241
+ recentTransactions,
242
+ }, 200);
243
+ });
244
+ // POST /admin/kill-switch
245
+ router.openapi(activateKillSwitchRoute, async (c) => {
246
+ if (deps.killSwitchService) {
247
+ const result = deps.killSwitchService.activateWithCascade('master');
248
+ if (!result.success) {
249
+ throw new WAIaaSError('KILL_SWITCH_ACTIVE', {
250
+ message: result.error ?? 'Kill switch is already active',
251
+ });
252
+ }
253
+ const state = deps.killSwitchService.getState();
254
+ return c.json({
255
+ state: 'SUSPENDED',
256
+ activatedAt: state.activatedAt ?? Math.floor(Date.now() / 1000),
257
+ }, 200);
258
+ }
259
+ // Legacy fallback (no KillSwitchService)
260
+ const ksState = deps.getKillSwitchState();
261
+ if (ksState.state !== 'ACTIVE' && ksState.state !== 'NORMAL') {
262
+ throw new WAIaaSError('KILL_SWITCH_ACTIVE', {
263
+ message: 'Kill switch is already activated',
264
+ });
265
+ }
266
+ const nowSec = Math.floor(Date.now() / 1000);
267
+ deps.setKillSwitchState('SUSPENDED', 'master');
268
+ return c.json({
269
+ state: 'SUSPENDED',
270
+ activatedAt: nowSec,
271
+ }, 200);
272
+ });
273
+ // GET /admin/kill-switch
274
+ router.openapi(getKillSwitchRoute, async (c) => {
275
+ if (deps.killSwitchService) {
276
+ const ksState = deps.killSwitchService.getState();
277
+ return c.json({
278
+ state: ksState.state,
279
+ activatedAt: ksState.activatedAt,
280
+ activatedBy: ksState.activatedBy,
281
+ }, 200);
282
+ }
283
+ const ksState = deps.getKillSwitchState();
284
+ return c.json({
285
+ state: ksState.state,
286
+ activatedAt: ksState.activatedAt,
287
+ activatedBy: ksState.activatedBy,
288
+ }, 200);
289
+ });
290
+ // POST /admin/kill-switch/escalate
291
+ router.openapi(escalateKillSwitchRoute, async (c) => {
292
+ if (deps.killSwitchService) {
293
+ const result = deps.killSwitchService.escalateWithCascade('master');
294
+ if (!result.success) {
295
+ throw new WAIaaSError('INVALID_STATE_TRANSITION', {
296
+ message: result.error ?? 'Cannot escalate kill switch',
297
+ });
298
+ }
299
+ const state = deps.killSwitchService.getState();
300
+ return c.json({
301
+ state: 'LOCKED',
302
+ escalatedAt: state.activatedAt ?? Math.floor(Date.now() / 1000),
303
+ }, 200);
304
+ }
305
+ throw new WAIaaSError('INVALID_STATE_TRANSITION', {
306
+ message: 'Kill switch service not available',
307
+ });
308
+ });
309
+ // POST /admin/recover (dual-auth recovery)
310
+ router.openapi(recoverRoute, async (c) => {
311
+ if (deps.killSwitchService) {
312
+ const currentState = deps.killSwitchService.getState();
313
+ if (currentState.state === 'ACTIVE') {
314
+ throw new WAIaaSError('KILL_SWITCH_NOT_ACTIVE', {
315
+ message: 'Kill switch is not active, nothing to recover',
316
+ });
317
+ }
318
+ // Master password (masterAuth middleware) is sufficient for recovery.
319
+ // Self-hosted daemon: admin with master password = server/DB access.
320
+ // Dual-auth adds no real security but blocks emergency recovery.
321
+ // LOCKED recovery: additional wait time (5 seconds)
322
+ if (currentState.state === 'LOCKED') {
323
+ await new Promise((resolve) => setTimeout(resolve, 5000));
324
+ const success = deps.killSwitchService.recoverFromLocked();
325
+ if (!success) {
326
+ throw new WAIaaSError('INVALID_STATE_TRANSITION', {
327
+ message: 'Failed to recover from LOCKED state (concurrent state change)',
328
+ });
329
+ }
330
+ }
331
+ else {
332
+ // SUSPENDED recovery
333
+ const success = deps.killSwitchService.recoverFromSuspended();
334
+ if (!success) {
335
+ throw new WAIaaSError('INVALID_STATE_TRANSITION', {
336
+ message: 'Failed to recover from SUSPENDED state (concurrent state change)',
337
+ });
338
+ }
339
+ }
340
+ const nowSec = Math.floor(Date.now() / 1000);
341
+ // Send recovery notification
342
+ if (deps.notificationService) {
343
+ void deps.notificationService.notify('KILL_SWITCH_RECOVERED', 'system', {});
344
+ }
345
+ return c.json({
346
+ state: 'ACTIVE',
347
+ recoveredAt: nowSec,
348
+ }, 200);
349
+ }
350
+ // Legacy fallback
351
+ const ksState = deps.getKillSwitchState();
352
+ if (ksState.state === 'NORMAL' || ksState.state === 'ACTIVE') {
353
+ throw new WAIaaSError('KILL_SWITCH_NOT_ACTIVE', {
354
+ message: 'Kill switch is not active, nothing to recover',
355
+ });
356
+ }
357
+ deps.setKillSwitchState('ACTIVE');
358
+ const nowSec = Math.floor(Date.now() / 1000);
359
+ return c.json({
360
+ state: 'ACTIVE',
361
+ recoveredAt: nowSec,
362
+ }, 200);
363
+ });
364
+ // POST /admin/shutdown
365
+ router.openapi(shutdownRoute, async (c) => {
366
+ if (deps.requestShutdown) {
367
+ deps.requestShutdown();
368
+ }
369
+ return c.json({
370
+ message: 'Shutdown initiated',
371
+ }, 200);
372
+ });
373
+ // PUT /admin/master-password
374
+ router.openapi(masterPasswordChangeRoute, async (c) => {
375
+ const body = c.req.valid('json');
376
+ const newPassword = body.newPassword;
377
+ if (!deps.passwordRef) {
378
+ throw new WAIaaSError('ACTION_VALIDATION_FAILED', {
379
+ message: 'Password change not supported (passwordRef not available)',
380
+ });
381
+ }
382
+ const oldPassword = deps.passwordRef.password;
383
+ if (newPassword === oldPassword) {
384
+ throw new WAIaaSError('ACTION_VALIDATION_FAILED', {
385
+ message: 'New password must be different from the current password',
386
+ });
387
+ }
388
+ // 1. Re-encrypt keystore files
389
+ const { join } = await import('node:path');
390
+ const { reEncryptKeystores, reEncryptSettings } = await import('../../infrastructure/keystore/re-encrypt.js');
391
+ const keystoreDir = deps.dataDir ? join(deps.dataDir, 'keystore') : null;
392
+ let walletsReEncrypted = 0;
393
+ if (keystoreDir) {
394
+ const { existsSync } = await import('node:fs');
395
+ if (existsSync(keystoreDir)) {
396
+ walletsReEncrypted = await reEncryptKeystores(keystoreDir, oldPassword, newPassword);
397
+ }
398
+ }
399
+ // 2. Re-encrypt settings + API keys in DB
400
+ const settingsReEncrypted = reEncryptSettings(deps.db, deps.sqlite, oldPassword, newPassword);
401
+ // 3. Compute new Argon2id hash
402
+ const argon2 = await import('argon2');
403
+ const newHash = await argon2.default.hash(newPassword, {
404
+ type: argon2.default.argon2id,
405
+ memoryCost: 19456,
406
+ timeCost: 2,
407
+ parallelism: 1,
408
+ });
409
+ // 4. Update DB master_password_hash
410
+ const { keyValueStore } = await import('../../infrastructure/database/schema.js');
411
+ deps.db
412
+ .update(keyValueStore)
413
+ .set({ value: newHash, updatedAt: new Date() })
414
+ .where(eq(keyValueStore.key, 'master_password_hash'))
415
+ .run();
416
+ // 5. Update in-memory ref (live swap)
417
+ deps.passwordRef.password = newPassword;
418
+ deps.passwordRef.hash = newHash;
419
+ // 6. Delete recovery.key if it exists (auto-provision -> manual)
420
+ if (deps.dataDir) {
421
+ const recoveryPath = join(deps.dataDir, 'recovery.key');
422
+ const { existsSync, unlinkSync } = await import('node:fs');
423
+ if (existsSync(recoveryPath)) {
424
+ try {
425
+ unlinkSync(recoveryPath);
426
+ }
427
+ catch {
428
+ // Non-fatal: recovery.key cleanup failure
429
+ }
430
+ }
431
+ }
432
+ return c.json({
433
+ message: 'Master password changed successfully',
434
+ walletsReEncrypted,
435
+ settingsReEncrypted,
436
+ }, 200);
437
+ });
438
+ // POST /admin/rotate-secret
439
+ router.openapi(rotateSecretRoute, async (c) => {
440
+ if (!deps.jwtSecretManager) {
441
+ throw new WAIaaSError('ADAPTER_NOT_AVAILABLE', {
442
+ message: 'JWT secret manager not available',
443
+ });
444
+ }
445
+ await deps.jwtSecretManager.rotateSecret();
446
+ const nowSec = Math.floor(Date.now() / 1000);
447
+ return c.json({
448
+ rotatedAt: nowSec,
449
+ message: 'JWT secret rotated. Old tokens valid for 5 minutes.',
450
+ }, 200);
451
+ });
452
+ }
453
+ //# sourceMappingURL=admin-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-auth.js","sourceRoot":"","sources":["../../../src/api/routes/admin-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Admin Monitoring route handlers: transactions, incoming, agent-prompt, session-reissue,
3
+ * tx-cancel, tx-reject, backup, stats, autostop.
4
+ *
5
+ * Extracted from admin.ts for maintainability.
6
+ */
7
+ import type { OpenAPIHono } from '@hono/zod-openapi';
8
+ import type { AdminRouteDeps } from './admin.js';
9
+ export declare function registerAdminMonitoringRoutes(router: OpenAPIHono, deps: AdminRouteDeps): void;
10
+ //# sourceMappingURL=admin-monitoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-monitoring.d.ts","sourceRoot":"","sources":["../../../src/api/routes/admin-monitoring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAmBrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmHjD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAmwB7F"}