@waiaas/daemon 2.6.0-rc.9 → 2.7.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 (64) hide show
  1. package/README.md +51 -3
  2. package/dist/api/routes/actions.d.ts.map +1 -1
  3. package/dist/api/routes/actions.js +43 -2
  4. package/dist/api/routes/actions.js.map +1 -1
  5. package/dist/api/routes/admin.d.ts +0 -30
  6. package/dist/api/routes/admin.d.ts.map +1 -1
  7. package/dist/api/routes/admin.js +201 -33
  8. package/dist/api/routes/admin.js.map +1 -1
  9. package/dist/api/routes/connect-info.d.ts +7 -0
  10. package/dist/api/routes/connect-info.d.ts.map +1 -1
  11. package/dist/api/routes/connect-info.js +36 -6
  12. package/dist/api/routes/connect-info.js.map +1 -1
  13. package/dist/api/routes/openapi-schemas.d.ts +496 -0
  14. package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
  15. package/dist/api/routes/openapi-schemas.js +51 -0
  16. package/dist/api/routes/openapi-schemas.js.map +1 -1
  17. package/dist/api/routes/staking.d.ts +31 -0
  18. package/dist/api/routes/staking.d.ts.map +1 -0
  19. package/dist/api/routes/staking.js +204 -0
  20. package/dist/api/routes/staking.js.map +1 -0
  21. package/dist/api/routes/transactions.d.ts.map +1 -1
  22. package/dist/api/routes/transactions.js +3 -2
  23. package/dist/api/routes/transactions.js.map +1 -1
  24. package/dist/api/server.d.ts.map +1 -1
  25. package/dist/api/server.js +43 -1
  26. package/dist/api/server.js.map +1 -1
  27. package/dist/infrastructure/config/loader.js +3 -3
  28. package/dist/infrastructure/config/loader.js.map +1 -1
  29. package/dist/infrastructure/settings/hot-reload.d.ts +9 -0
  30. package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -1
  31. package/dist/infrastructure/settings/hot-reload.js +28 -0
  32. package/dist/infrastructure/settings/hot-reload.js.map +1 -1
  33. package/dist/infrastructure/settings/setting-keys.d.ts +1 -1
  34. package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -1
  35. package/dist/infrastructure/settings/setting-keys.js +23 -7
  36. package/dist/infrastructure/settings/setting-keys.js.map +1 -1
  37. package/dist/lifecycle/daemon.d.ts +15 -0
  38. package/dist/lifecycle/daemon.d.ts.map +1 -1
  39. package/dist/lifecycle/daemon.js +146 -1
  40. package/dist/lifecycle/daemon.js.map +1 -1
  41. package/dist/pipeline/gas-condition-tracker.d.ts +73 -0
  42. package/dist/pipeline/gas-condition-tracker.d.ts.map +1 -0
  43. package/dist/pipeline/gas-condition-tracker.js +214 -0
  44. package/dist/pipeline/gas-condition-tracker.js.map +1 -0
  45. package/dist/pipeline/pipeline.d.ts.map +1 -1
  46. package/dist/pipeline/pipeline.js +3 -2
  47. package/dist/pipeline/pipeline.js.map +1 -1
  48. package/dist/pipeline/stages.d.ts +15 -0
  49. package/dist/pipeline/stages.d.ts.map +1 -1
  50. package/dist/pipeline/stages.js +152 -1
  51. package/dist/pipeline/stages.js.map +1 -1
  52. package/dist/services/async-polling-service.d.ts +2 -0
  53. package/dist/services/async-polling-service.d.ts.map +1 -1
  54. package/dist/services/async-polling-service.js +41 -6
  55. package/dist/services/async-polling-service.js.map +1 -1
  56. package/dist/services/incoming/__tests__/integration-wiring.test.js +6 -1
  57. package/dist/services/incoming/__tests__/integration-wiring.test.js.map +1 -1
  58. package/dist/services/incoming/incoming-tx-monitor-service.d.ts.map +1 -1
  59. package/dist/services/incoming/incoming-tx-monitor-service.js +10 -3
  60. package/dist/services/incoming/incoming-tx-monitor-service.js.map +1 -1
  61. package/package.json +5 -5
  62. package/public/admin/assets/index-C0nLGE6n.js +1 -0
  63. package/public/admin/index.html +1 -1
  64. package/public/admin/assets/index-yzTEayia.js +0 -1
package/README.md CHANGED
@@ -25,22 +25,69 @@ WAIaaS is a local daemon that sits between your AI agent and the blockchain:
25
25
 
26
26
  See [Security Model](docs/security-model.md) for full details.
27
27
 
28
+ ## Architecture
29
+
30
+ ```mermaid
31
+ graph LR
32
+ subgraph Interfaces
33
+ SDK["TypeScript SDK"]
34
+ MCP["MCP Server"]
35
+ CLI["CLI"]
36
+ Admin["Admin UI"]
37
+ Skills["Skill Files"]
38
+ WalletSDK["Wallet SDK"]
39
+ end
40
+
41
+ subgraph Daemon
42
+ API["API Layer<br>(Hono + Middleware)"]
43
+ Services["Service Layer<br>(Policy, Notifications, Kill Switch)"]
44
+ Pipeline["Transaction Pipeline<br>(6-stage + 8-state)"]
45
+ Infra["Infrastructure<br>(SQLite, Keystore, Config)"]
46
+ end
47
+
48
+ subgraph Blockchain
49
+ Solana["Solana"]
50
+ EVM["EVM Chains"]
51
+ end
52
+
53
+ SDK & MCP & CLI & Admin & Skills & WalletSDK --> API
54
+ API --> Services --> Pipeline --> Infra
55
+ Infra --> Solana & EVM
56
+ ```
57
+
58
+ **12 packages** in a monorepo:
59
+
60
+ - **@waiaas/core** — Shared types, Zod schemas, enums, and interfaces
61
+ - **@waiaas/daemon** — Self-hosted wallet daemon (Hono HTTP server)
62
+ - **@waiaas/adapter-solana** — Solana chain adapter (SPL / Token-2022)
63
+ - **@waiaas/adapter-evm** — EVM chain adapter (ERC-20 via viem)
64
+ - **@waiaas/actions** — DeFi Action Providers (Jupiter, 0x, LI.FI, Lido, Jito)
65
+ - **@waiaas/sdk** — TypeScript client library
66
+ - **@waiaas/mcp** — Model Context Protocol server for AI agents
67
+ - **@waiaas/cli** — Command-line interface
68
+ - **@waiaas/admin** — Preact-based Admin Web UI
69
+ - **@waiaas/wallet-sdk** — Wallet Signing SDK for wallet app integration
70
+ - **@waiaas/push-relay** — Push Relay Server (ntfy → push services)
71
+ - **@waiaas/skills** — Pre-built `.skill.md` instruction files for AI agents
72
+
73
+ See [Architecture](docs/architecture.md) for the full technical deep-dive.
74
+
28
75
  ## Quick Start
29
76
 
30
77
  ```bash
31
78
  npm install -g @waiaas/cli
32
79
  waiaas init # Create data directory + config.toml
33
80
  waiaas start # Start daemon (sets master password on first run)
34
- waiaas quickset --mode testnet # Create wallets + MCP sessions in one step
81
+ waiaas quickset --mode mainnet # Create wallets + MCP sessions in one step
35
82
  ```
36
83
 
37
84
  The `quickset` command does everything you need to get started:
38
85
 
39
- 1. Creates **Solana Devnet + EVM Sepolia** wallets automatically
86
+ 1. Creates **Solana Mainnet + EVM Ethereum Mainnet** wallets automatically
40
87
  2. Issues **MCP session tokens** for each wallet
41
88
  3. Outputs a **Claude Desktop MCP config** snippet -- just copy and paste
42
89
 
43
- > Starting with mainnet? Use `waiaas quickset --mode mainnet` to create Solana Mainnet + EVM Ethereum Mainnet wallets instead. Mainnet mode recommends configuring spending limits and registering an owner wallet for high-value transaction approval.
90
+ > We recommend configuring spending limits and registering an owner wallet for high-value transaction approval. For testing, use `waiaas quickset --mode testnet` to create Solana Devnet + EVM Sepolia wallets instead.
44
91
 
45
92
  ### Admin UI
46
93
 
@@ -143,6 +190,7 @@ Enabled by default (`admin_ui = true` in config.toml).
143
190
 
144
191
  | Document | Description |
145
192
  |----------|-------------|
193
+ | [Architecture](docs/architecture.md) | System overview, package structure, pipeline, chain adapters |
146
194
  | [Security Model](docs/security-model.md) | Authentication, policy engine, Kill Switch, AutoStop |
147
195
  | [Deployment Guide](docs/deployment.md) | Docker, npm, configuration reference |
148
196
  | [API Reference](docs/api-reference.md) | REST API endpoints and authentication |
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/api/routes/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAGhE,OAAO,KAAK,EAA2C,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,KAAK,MAAM,MAAM,yCAAyC,CAAC;AAYvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AAYzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,EAAE,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AA8FD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAoP/D"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/api/routes/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAGhE,OAAO,KAAK,EAA2C,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,KAAK,MAAM,MAAM,yCAAyC,CAAC;AAavE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AAYzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,EAAE,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAmGD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CA4R/D"}
@@ -18,7 +18,7 @@ import { eq } from 'drizzle-orm';
18
18
  import { WAIaaSError } from '@waiaas/core';
19
19
  import { resolveRpcUrl } from '../../infrastructure/adapter-pool.js';
20
20
  import { wallets, transactions } from '../../infrastructure/database/schema.js';
21
- import { stage1Validate, stage2Auth, stage3Policy, stage4Wait, stage5Execute, stage6Confirm, } from '../../pipeline/stages.js';
21
+ import { stage1Validate, stage2Auth, stage3Policy, stage3_5GasCondition, stage4Wait, stage5Execute, stage6Confirm, } from '../../pipeline/stages.js';
22
22
  import { resolveNetwork } from '../../pipeline/network-resolver.js';
23
23
  import { TxSendResponseSchema, buildErrorResponses, openApiValidationHook, } from './openapi-schemas.js';
24
24
  import { resolveWalletId } from '../helpers/resolve-wallet-id.js';
@@ -52,6 +52,11 @@ const ActionExecuteRequestSchema = z
52
52
  params: z.record(z.unknown()).optional().default({}),
53
53
  network: z.string().optional(),
54
54
  walletId: z.string().uuid().optional().describe('Target wallet ID (optional -- defaults to session default wallet)'),
55
+ gasCondition: z.object({
56
+ maxGasPrice: z.string().optional(),
57
+ maxPriorityFee: z.string().optional(),
58
+ timeout: z.number().int().min(60).max(86400).optional(),
59
+ }).optional(),
55
60
  })
56
61
  .openapi('ActionExecuteRequest');
57
62
  // ---------------------------------------------------------------------------
@@ -238,6 +243,10 @@ export function actionRoutes(deps) {
238
243
  };
239
244
  const pipelineResults = [];
240
245
  for (const contractCall of contractCalls) {
246
+ // Inject gasCondition into the pipeline request if provided
247
+ const requestWithGas = body.gasCondition
248
+ ? { ...contractCall, gasCondition: body.gasCondition }
249
+ : contractCall;
241
250
  // Build PipelineContext for this specific ContractCallRequest
242
251
  const ctx = {
243
252
  db: deps.db,
@@ -248,7 +257,7 @@ export function actionRoutes(deps) {
248
257
  walletId,
249
258
  wallet: walletData,
250
259
  resolvedNetwork,
251
- request: contractCall, // Single ContractCallRequest with type: 'CONTRACT_CALL'
260
+ request: requestWithGas, // ContractCallRequest with optional gasCondition
252
261
  txId: '', // stage1Validate will assign
253
262
  sessionId,
254
263
  sqlite: deps.sqlite,
@@ -261,15 +270,47 @@ export function actionRoutes(deps) {
261
270
  };
262
271
  // Stage 1: Validate + DB INSERT (synchronous -- assigns ctx.txId)
263
272
  await stage1Validate(ctx);
273
+ // GAP-2 fix: Persist action provider metadata for staking position queries
274
+ // (GET /v1/wallet/staking uses metadata LIKE '%providerKey%' to find staking txs)
275
+ await deps.db
276
+ .update(transactions)
277
+ .set({
278
+ metadata: JSON.stringify({ provider, action }),
279
+ })
280
+ .where(eq(transactions.id, ctx.txId));
264
281
  pipelineResults.push({ id: ctx.txId, status: 'PENDING' });
265
282
  // Stages 2-6 run asynchronously (fire-and-forget)
266
283
  void (async () => {
267
284
  try {
268
285
  await stage2Auth(ctx);
269
286
  await stage3Policy(ctx);
287
+ await stage3_5GasCondition(ctx);
270
288
  await stage4Wait(ctx);
271
289
  await stage5Execute(ctx);
272
290
  await stage6Confirm(ctx);
291
+ // GAP-1 fix: Enroll staking unstake transactions in async tracking
292
+ // Lido unstake -> lido-withdrawal tracker, Jito unstake -> jito-epoch tracker
293
+ // AsyncPollingService.pollAll() picks up bridge_status='PENDING' transactions
294
+ if (action === 'unstake') {
295
+ const trackerMap = {
296
+ 'lido_staking': 'lido-withdrawal',
297
+ 'jito_staking': 'jito-epoch',
298
+ };
299
+ const trackerName = trackerMap[provider];
300
+ if (trackerName) {
301
+ await deps.db
302
+ .update(transactions)
303
+ .set({
304
+ bridgeStatus: 'PENDING',
305
+ bridgeMetadata: JSON.stringify({
306
+ tracker: trackerName,
307
+ notificationEvent: 'STAKING_UNSTAKE_TIMEOUT',
308
+ enrolledAt: Date.now(),
309
+ }),
310
+ })
311
+ .where(eq(transactions.id, ctx.txId));
312
+ }
313
+ }
273
314
  }
274
315
  catch (error) {
275
316
  // PIPELINE_HALTED is intentional -- transaction is QUEUED
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/api/routes/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/api/routes/actions.ts"],"names":[],"mappings":"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"}
@@ -80,35 +80,5 @@ export interface AdminRouteDeps {
80
80
  delayQueue?: DelayQueue;
81
81
  approvalWorkflow?: ApprovalWorkflow;
82
82
  }
83
- /**
84
- * Create admin route sub-router.
85
- *
86
- * GET /admin/status - Daemon health info (masterAuth)
87
- * POST /admin/kill-switch - Activate kill switch (masterAuth)
88
- * GET /admin/kill-switch - Get kill switch state (public)
89
- * POST /admin/recover - Deactivate kill switch (masterAuth)
90
- * POST /admin/shutdown - Graceful shutdown (masterAuth)
91
- * POST /admin/rotate-secret - Rotate JWT secret (masterAuth)
92
- * GET /admin/notifications/status - Notification channel status (masterAuth)
93
- * POST /admin/notifications/test - Send test notification (masterAuth)
94
- * GET /admin/notifications/log - Query notification logs (masterAuth)
95
- * GET /admin/settings - Get all settings (masterAuth)
96
- * PUT /admin/settings - Update settings (masterAuth)
97
- * POST /admin/settings/test-rpc - Test RPC connectivity (masterAuth)
98
- * GET /admin/oracle-status - Oracle cache/source/cross-validation status (masterAuth)
99
- * GET /admin/api-keys - List Action Provider API key status (masterAuth)
100
- * PUT /admin/api-keys/:provider - Set or update API key (masterAuth)
101
- * DELETE /admin/api-keys/:provider - Delete API key (masterAuth)
102
- * GET /admin/forex/rates - Forex exchange rates (masterAuth)
103
- * GET /admin/wallets/:id/balance - Wallet native+token balance (masterAuth)
104
- * GET /admin/wallets/:id/transactions - Wallet transaction history (masterAuth)
105
- * GET /admin/telegram-users - List Telegram bot users (masterAuth)
106
- * PUT /admin/telegram-users/:chatId - Update Telegram user role (masterAuth)
107
- * DELETE /admin/telegram-users/:chatId - Delete Telegram user (masterAuth)
108
- * GET /admin/transactions - Cross-wallet transaction list (masterAuth)
109
- * GET /admin/incoming - Cross-wallet incoming tx list (masterAuth)
110
- * POST /admin/transactions/:id/cancel - Cancel delayed transaction (masterAuth)
111
- * POST /admin/transactions/:id/reject - Reject pending approval transaction (masterAuth)
112
- */
113
83
  export declare function adminRoutes(deps: AdminRouteDeps): OpenAPIHono;
114
84
  //# 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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"}
@@ -32,14 +32,14 @@
32
32
  import { OpenAPIHono, createRoute, z } from '@hono/zod-openapi';
33
33
  import { sql, desc, eq, and, isNull, gt, gte, lte, count as drizzleCount } from 'drizzle-orm';
34
34
  import { createHash } from 'node:crypto';
35
- import { WAIaaSError, getDefaultNetwork, getNetworksForEnvironment } from '@waiaas/core';
35
+ import { WAIaaSError, getDefaultNetwork, getNetworksForEnvironment, formatAmount } from '@waiaas/core';
36
36
  import { CurrencyCodeSchema, formatRatePreview } from '@waiaas/core';
37
- import { wallets, sessions, sessionWallets, notificationLogs, policies, transactions, incomingTransactions } from '../../infrastructure/database/schema.js';
37
+ import { wallets, sessions, sessionWallets, notificationLogs, policies, transactions, incomingTransactions, tokenRegistry } from '../../infrastructure/database/schema.js';
38
38
  import { generateId } from '../../infrastructure/database/id.js';
39
39
  import { buildConnectInfoPrompt } from './connect-info.js';
40
40
  import { getSettingDefinition } from '../../infrastructure/settings/index.js';
41
41
  import { resolveRpcUrl } from '../../infrastructure/adapter-pool.js';
42
- import { AdminStatusResponseSchema, KillSwitchResponseSchema, KillSwitchActivateResponseSchema, KillSwitchEscalateResponseSchema, RecoverResponseSchema, KillSwitchRecoverRequestSchema, ShutdownResponseSchema, RotateSecretResponseSchema, NotificationStatusResponseSchema, NotificationTestRequestSchema, NotificationTestResponseSchema, NotificationLogResponseSchema, SettingsResponseSchema, SettingsUpdateRequestSchema, SettingsUpdateResponseSchema, TestRpcRequestSchema, TestRpcResponseSchema, OracleStatusResponseSchema, AgentPromptRequestSchema, AgentPromptResponseSchema, SessionReissueResponseSchema, buildErrorResponses, openApiValidationHook, } from './openapi-schemas.js';
42
+ import { AdminStatusResponseSchema, KillSwitchResponseSchema, KillSwitchActivateResponseSchema, KillSwitchEscalateResponseSchema, RecoverResponseSchema, KillSwitchRecoverRequestSchema, ShutdownResponseSchema, RotateSecretResponseSchema, NotificationStatusResponseSchema, NotificationTestRequestSchema, NotificationTestResponseSchema, NotificationLogResponseSchema, SettingsResponseSchema, SettingsUpdateRequestSchema, SettingsUpdateResponseSchema, TestRpcRequestSchema, TestRpcResponseSchema, OracleStatusResponseSchema, AgentPromptRequestSchema, AgentPromptResponseSchema, SessionReissueResponseSchema, StakingPositionsResponseSchema, buildErrorResponses, openApiValidationHook, } from './openapi-schemas.js';
43
43
  // ---------------------------------------------------------------------------
44
44
  // Route definitions
45
45
  // ---------------------------------------------------------------------------
@@ -391,6 +391,8 @@ const adminWalletTransactionsRoute = createRoute({
391
391
  status: z.string(),
392
392
  toAddress: z.string().nullable(),
393
393
  amount: z.string().nullable(),
394
+ formattedAmount: z.string().nullable(),
395
+ amountUsd: z.number().nullable(),
394
396
  network: z.string().nullable(),
395
397
  txHash: z.string().nullable(),
396
398
  createdAt: z.number().nullable(),
@@ -441,6 +443,23 @@ const adminWalletBalanceRoute = createRoute({
441
443
  ...buildErrorResponses(['WALLET_NOT_FOUND']),
442
444
  },
443
445
  });
446
+ const adminWalletStakingRoute = createRoute({
447
+ method: 'get',
448
+ path: '/admin/wallets/{id}/staking',
449
+ tags: ['Admin'],
450
+ summary: 'Get wallet staking positions',
451
+ description: 'Returns staking positions (Lido stETH, Jito JitoSOL) for a specific wallet with balance, APY, pending unstake status.',
452
+ request: {
453
+ params: z.object({ id: z.string().uuid() }),
454
+ },
455
+ responses: {
456
+ 200: {
457
+ description: 'Staking positions for the wallet',
458
+ content: { 'application/json': { schema: StakingPositionsResponseSchema } },
459
+ },
460
+ ...buildErrorResponses(['WALLET_NOT_FOUND']),
461
+ },
462
+ });
444
463
  // ---------------------------------------------------------------------------
445
464
  // Telegram Users route definitions
446
465
  // ---------------------------------------------------------------------------
@@ -656,6 +675,40 @@ const adminIncomingRoute = createRoute({
656
675
  * POST /admin/transactions/:id/cancel - Cancel delayed transaction (masterAuth)
657
676
  * POST /admin/transactions/:id/reject - Reject pending approval transaction (masterAuth)
658
677
  */
678
+ // ---------------------------------------------------------------------------
679
+ // Amount formatting helpers (#168)
680
+ // ---------------------------------------------------------------------------
681
+ const NATIVE_DECIMALS = { solana: 9, ethereum: 18 };
682
+ const NATIVE_SYMBOLS = { solana: 'SOL', ethereum: 'ETH' };
683
+ /**
684
+ * Format raw blockchain amount to human-readable string with token symbol.
685
+ * Returns null if formatting is not possible (unknown token, null amount, etc).
686
+ */
687
+ function formatTxAmount(amount, chain, network, tokenAddress, db) {
688
+ if (!amount || amount === '0')
689
+ return amount;
690
+ try {
691
+ if (tokenAddress) {
692
+ // Token transfer: look up decimals/symbol from token_registry
693
+ const token = db
694
+ .select({ symbol: tokenRegistry.symbol, decimals: tokenRegistry.decimals })
695
+ .from(tokenRegistry)
696
+ .where(and(eq(tokenRegistry.address, tokenAddress), network ? eq(tokenRegistry.network, network) : undefined))
697
+ .limit(1)
698
+ .get();
699
+ if (!token)
700
+ return null; // unknown token → caller falls back to raw
701
+ return `${formatAmount(BigInt(amount), token.decimals)} ${token.symbol}`;
702
+ }
703
+ // Native transfer
704
+ const decimals = NATIVE_DECIMALS[chain] ?? 18;
705
+ const symbol = NATIVE_SYMBOLS[chain] ?? chain.toUpperCase();
706
+ return `${formatAmount(BigInt(amount), decimals)} ${symbol}`;
707
+ }
708
+ catch {
709
+ return null;
710
+ }
711
+ }
659
712
  export function adminRoutes(deps) {
660
713
  const router = new OpenAPIHono({ defaultHook: openApiValidationHook });
661
714
  // ---------------------------------------------------------------------------
@@ -1068,6 +1121,7 @@ export function adminRoutes(deps) {
1068
1121
  monitoring: emptyCategory,
1069
1122
  telegram: emptyCategory,
1070
1123
  signing_sdk: emptyCategory,
1124
+ gas_condition: emptyCategory,
1071
1125
  }, 200);
1072
1126
  }
1073
1127
  const masked = deps.settingsService.getAllMasked();
@@ -1300,19 +1354,23 @@ export function adminRoutes(deps) {
1300
1354
  .where(eq(transactions.walletId, id))
1301
1355
  .get();
1302
1356
  const total = totalResult?.count ?? 0;
1303
- const items = rows.map((tx) => ({
1304
- id: tx.id,
1305
- type: tx.type,
1306
- status: tx.status,
1307
- toAddress: tx.toAddress ?? null,
1308
- amount: tx.amount ?? null,
1309
- amountUsd: tx.amountUsd ?? null,
1310
- network: tx.network ?? null,
1311
- txHash: tx.txHash ?? null,
1312
- createdAt: tx.createdAt instanceof Date
1313
- ? Math.floor(tx.createdAt.getTime() / 1000)
1314
- : (typeof tx.createdAt === 'number' ? tx.createdAt : null),
1315
- }));
1357
+ const items = rows.map((tx) => {
1358
+ const tokenAddr = tx.tokenMint ?? tx.contractAddress ?? null;
1359
+ return {
1360
+ id: tx.id,
1361
+ type: tx.type,
1362
+ status: tx.status,
1363
+ toAddress: tx.toAddress ?? null,
1364
+ amount: tx.amount ?? null,
1365
+ formattedAmount: formatTxAmount(tx.amount ?? null, tx.chain, tx.network ?? null, tokenAddr, deps.db),
1366
+ amountUsd: tx.amountUsd ?? null,
1367
+ network: tx.network ?? null,
1368
+ txHash: tx.txHash ?? null,
1369
+ createdAt: tx.createdAt instanceof Date
1370
+ ? Math.floor(tx.createdAt.getTime() / 1000)
1371
+ : (typeof tx.createdAt === 'number' ? tx.createdAt : null),
1372
+ };
1373
+ });
1316
1374
  return c.json({ items, total }, 200);
1317
1375
  });
1318
1376
  // ---------------------------------------------------------------------------
@@ -1377,6 +1435,101 @@ export function adminRoutes(deps) {
1377
1435
  return c.json({ balances }, 200);
1378
1436
  });
1379
1437
  // ---------------------------------------------------------------------------
1438
+ // GET /admin/wallets/:id/staking
1439
+ // ---------------------------------------------------------------------------
1440
+ router.openapi(adminWalletStakingRoute, async (c) => {
1441
+ const { id } = c.req.valid('param');
1442
+ // Verify wallet exists
1443
+ const wallet = deps.db.select().from(wallets).where(eq(wallets.id, id)).get();
1444
+ if (!wallet) {
1445
+ throw new WAIaaSError('WALLET_NOT_FOUND');
1446
+ }
1447
+ const positions = [];
1448
+ if (!deps.sqlite) {
1449
+ return c.json({ walletId: id, positions }, 200);
1450
+ }
1451
+ const LIDO_APY = '~3.5%';
1452
+ const JITO_APY = '~7.5%';
1453
+ // Reuse aggregation logic inline (same as staking.ts)
1454
+ function aggregateProvider(walletId, providerKey) {
1455
+ const stakeRows = deps.sqlite.prepare(`SELECT amount, bridge_status, created_at, metadata
1456
+ FROM transactions
1457
+ WHERE wallet_id = ? AND status IN ('CONFIRMED', 'COMPLETED')
1458
+ AND metadata LIKE ?
1459
+ ORDER BY created_at ASC`).all(walletId, `%${providerKey}%`);
1460
+ let totalStaked = 0n;
1461
+ let totalUnstaked = 0n;
1462
+ for (const row of stakeRows) {
1463
+ if (!row.amount)
1464
+ continue;
1465
+ let isUnstake = false;
1466
+ if (row.metadata) {
1467
+ try {
1468
+ const meta = JSON.parse(row.metadata);
1469
+ if (meta.action === 'unstake' || meta.actionName === 'unstake')
1470
+ isUnstake = true;
1471
+ }
1472
+ catch { /* ignore */ }
1473
+ }
1474
+ try {
1475
+ const amountBig = BigInt(row.amount);
1476
+ if (isUnstake)
1477
+ totalUnstaked += amountBig;
1478
+ else
1479
+ totalStaked += amountBig;
1480
+ }
1481
+ catch { /* skip */ }
1482
+ }
1483
+ const pendingRow = deps.sqlite.prepare(`SELECT amount, bridge_status, created_at
1484
+ FROM transactions
1485
+ WHERE wallet_id = ? AND bridge_status = 'PENDING'
1486
+ AND metadata LIKE ?
1487
+ ORDER BY created_at DESC
1488
+ LIMIT 1`).get(walletId, `%${providerKey}%`);
1489
+ let pendingUnstake = null;
1490
+ if (pendingRow?.amount) {
1491
+ pendingUnstake = {
1492
+ amount: pendingRow.amount,
1493
+ status: (pendingRow.bridge_status ?? 'PENDING'),
1494
+ requestedAt: pendingRow.created_at ?? null,
1495
+ };
1496
+ }
1497
+ const balanceWei = totalStaked > totalUnstaked ? totalStaked - totalUnstaked : 0n;
1498
+ return { balanceWei, pendingUnstake };
1499
+ }
1500
+ // Ethereum wallet -> Lido
1501
+ if (wallet.chain === 'ethereum') {
1502
+ const { balanceWei, pendingUnstake } = aggregateProvider(id, 'lido_staking');
1503
+ if (balanceWei > 0n || pendingUnstake) {
1504
+ let balanceUsd = null;
1505
+ if (deps.priceOracle && balanceWei > 0n) {
1506
+ try {
1507
+ const priceInfo = await deps.priceOracle.getNativePrice('ethereum');
1508
+ balanceUsd = (Number(balanceWei) / 1e18 * priceInfo.usdPrice).toFixed(2);
1509
+ }
1510
+ catch { /* price unavailable */ }
1511
+ }
1512
+ positions.push({ protocol: 'lido', chain: 'ethereum', asset: 'stETH', balance: balanceWei.toString(), balanceUsd, apy: LIDO_APY, pendingUnstake });
1513
+ }
1514
+ }
1515
+ // Solana wallet -> Jito
1516
+ if (wallet.chain === 'solana') {
1517
+ const { balanceWei: balanceLamports, pendingUnstake } = aggregateProvider(id, 'jito_staking');
1518
+ if (balanceLamports > 0n || pendingUnstake) {
1519
+ let balanceUsd = null;
1520
+ if (deps.priceOracle && balanceLamports > 0n) {
1521
+ try {
1522
+ const priceInfo = await deps.priceOracle.getNativePrice('solana');
1523
+ balanceUsd = (Number(balanceLamports) / 1e9 * priceInfo.usdPrice).toFixed(2);
1524
+ }
1525
+ catch { /* price unavailable */ }
1526
+ }
1527
+ positions.push({ protocol: 'jito', chain: 'solana', asset: 'JitoSOL', balance: balanceLamports.toString(), balanceUsd, apy: JITO_APY, pendingUnstake });
1528
+ }
1529
+ }
1530
+ return c.json({ walletId: id, positions }, 200);
1531
+ });
1532
+ // ---------------------------------------------------------------------------
1380
1533
  // GET /admin/telegram-users
1381
1534
  // ---------------------------------------------------------------------------
1382
1535
  router.openapi(telegramUsersListRoute, async (c) => {
@@ -1485,6 +1638,8 @@ export function adminRoutes(deps) {
1485
1638
  txHash: transactions.txHash,
1486
1639
  chain: transactions.chain,
1487
1640
  createdAt: transactions.createdAt,
1641
+ tokenMint: transactions.tokenMint,
1642
+ contractAddress: transactions.contractAddress,
1488
1643
  })
1489
1644
  .from(transactions)
1490
1645
  .leftJoin(wallets, eq(transactions.walletId, wallets.id))
@@ -1493,23 +1648,27 @@ export function adminRoutes(deps) {
1493
1648
  .offset(offset)
1494
1649
  .limit(limit)
1495
1650
  .all();
1496
- const items = rows.map((row) => ({
1497
- id: row.id,
1498
- walletId: row.walletId,
1499
- walletName: row.walletName ?? null,
1500
- type: row.type,
1501
- status: row.status,
1502
- tier: row.tier ?? null,
1503
- toAddress: row.toAddress ?? null,
1504
- amount: row.amount ?? null,
1505
- amountUsd: row.amountUsd ?? null,
1506
- network: row.network ?? null,
1507
- txHash: row.txHash ?? null,
1508
- chain: row.chain,
1509
- createdAt: row.createdAt instanceof Date
1510
- ? Math.floor(row.createdAt.getTime() / 1000)
1511
- : (typeof row.createdAt === 'number' ? row.createdAt : null),
1512
- }));
1651
+ const items = rows.map((row) => {
1652
+ const tokenAddr = row.tokenMint ?? row.contractAddress ?? null;
1653
+ return {
1654
+ id: row.id,
1655
+ walletId: row.walletId,
1656
+ walletName: row.walletName ?? null,
1657
+ type: row.type,
1658
+ status: row.status,
1659
+ tier: row.tier ?? null,
1660
+ toAddress: row.toAddress ?? null,
1661
+ amount: row.amount ?? null,
1662
+ formattedAmount: formatTxAmount(row.amount ?? null, row.chain, row.network ?? null, tokenAddr, deps.db),
1663
+ amountUsd: row.amountUsd ?? null,
1664
+ network: row.network ?? null,
1665
+ txHash: row.txHash ?? null,
1666
+ chain: row.chain,
1667
+ createdAt: row.createdAt instanceof Date
1668
+ ? Math.floor(row.createdAt.getTime() / 1000)
1669
+ : (typeof row.createdAt === 'number' ? row.createdAt : null),
1670
+ };
1671
+ });
1513
1672
  return c.json({ items, total, offset, limit }, 200);
1514
1673
  });
1515
1674
  // ---------------------------------------------------------------------------
@@ -1573,6 +1732,7 @@ export function adminRoutes(deps) {
1573
1732
  walletName: row.walletName ?? null,
1574
1733
  fromAddress: row.fromAddress,
1575
1734
  amount: row.amount,
1735
+ formattedAmount: formatTxAmount(row.amount, row.chain, row.network, row.tokenAddress ?? null, deps.db),
1576
1736
  tokenAddress: row.tokenAddress ?? null,
1577
1737
  chain: row.chain,
1578
1738
  network: row.network,
@@ -1758,6 +1918,13 @@ export function adminRoutes(deps) {
1758
1918
  if (config.x402?.enabled === true) {
1759
1919
  capabilities.push('x402');
1760
1920
  }
1921
+ // Read default-deny toggles
1922
+ const defaultDeny = {
1923
+ tokenTransfers: deps.settingsService?.get('policy.default_deny_tokens') !== 'false',
1924
+ contractCalls: deps.settingsService?.get('policy.default_deny_contracts') !== 'false',
1925
+ tokenApprovals: deps.settingsService?.get('policy.default_deny_spenders') !== 'false',
1926
+ x402Domains: deps.settingsService?.get('policy.default_deny_x402_domains') !== 'false',
1927
+ };
1761
1928
  // Build prompt using shared prompt builder
1762
1929
  const host = c.req.header('Host') ?? 'localhost:3100';
1763
1930
  const protocol = c.req.header('X-Forwarded-Proto') ?? 'http';
@@ -1765,6 +1932,7 @@ export function adminRoutes(deps) {
1765
1932
  const prompt = buildConnectInfoPrompt({
1766
1933
  wallets: promptWallets,
1767
1934
  capabilities,
1935
+ defaultDeny,
1768
1936
  baseUrl,
1769
1937
  version: deps.version,
1770
1938
  });