@waiaas/daemon 2.4.0-rc.8 → 2.4.0
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/helpers/resolve-wallet-id.d.ts +38 -0
- package/dist/api/helpers/resolve-wallet-id.d.ts.map +1 -0
- package/dist/api/helpers/resolve-wallet-id.js +71 -0
- package/dist/api/helpers/resolve-wallet-id.js.map +1 -0
- package/dist/api/middleware/owner-auth.js +2 -2
- package/dist/api/middleware/owner-auth.js.map +1 -1
- package/dist/api/middleware/session-auth.d.ts +3 -1
- package/dist/api/middleware/session-auth.d.ts.map +1 -1
- package/dist/api/middleware/session-auth.js +5 -3
- package/dist/api/middleware/session-auth.js.map +1 -1
- package/dist/api/routes/actions.d.ts.map +1 -1
- package/dist/api/routes/actions.js +4 -2
- package/dist/api/routes/actions.js.map +1 -1
- package/dist/api/routes/admin.d.ts.map +1 -1
- package/dist/api/routes/admin.js +91 -41
- package/dist/api/routes/admin.js.map +1 -1
- package/dist/api/routes/connect-info.d.ts +54 -0
- package/dist/api/routes/connect-info.d.ts.map +1 -0
- package/dist/api/routes/connect-info.js +211 -0
- package/dist/api/routes/connect-info.js.map +1 -0
- package/dist/api/routes/index.d.ts +1 -0
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +1 -0
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/mcp.d.ts.map +1 -1
- package/dist/api/routes/mcp.js +11 -4
- package/dist/api/routes/mcp.js.map +1 -1
- package/dist/api/routes/openapi-schemas.d.ts +266 -14
- package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
- package/dist/api/routes/openapi-schemas.js +69 -3
- package/dist/api/routes/openapi-schemas.js.map +1 -1
- package/dist/api/routes/sessions.d.ts +15 -5
- package/dist/api/routes/sessions.d.ts.map +1 -1
- package/dist/api/routes/sessions.js +384 -63
- package/dist/api/routes/sessions.js.map +1 -1
- package/dist/api/routes/transactions.d.ts.map +1 -1
- package/dist/api/routes/transactions.js +15 -17
- package/dist/api/routes/transactions.js.map +1 -1
- package/dist/api/routes/wallet.d.ts.map +1 -1
- package/dist/api/routes/wallet.js +5 -4
- package/dist/api/routes/wallet.js.map +1 -1
- package/dist/api/routes/wallets.d.ts.map +1 -1
- package/dist/api/routes/wallets.js +60 -12
- package/dist/api/routes/wallets.js.map +1 -1
- package/dist/api/routes/wc.d.ts.map +1 -1
- package/dist/api/routes/wc.js +3 -5
- package/dist/api/routes/wc.js.map +1 -1
- package/dist/api/routes/x402.d.ts.map +1 -1
- package/dist/api/routes/x402.js +5 -4
- package/dist/api/routes/x402.js.map +1 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +15 -0
- package/dist/api/server.js.map +1 -1
- package/dist/infrastructure/database/index.d.ts +1 -1
- package/dist/infrastructure/database/index.d.ts.map +1 -1
- package/dist/infrastructure/database/index.js +1 -1
- package/dist/infrastructure/database/index.js.map +1 -1
- package/dist/infrastructure/database/migrate.d.ts +2 -2
- package/dist/infrastructure/database/migrate.d.ts.map +1 -1
- package/dist/infrastructure/database/migrate.js +149 -8
- package/dist/infrastructure/database/migrate.js.map +1 -1
- package/dist/infrastructure/database/schema.d.ts +82 -20
- package/dist/infrastructure/database/schema.d.ts.map +1 -1
- package/dist/infrastructure/database/schema.js +20 -5
- package/dist/infrastructure/database/schema.js.map +1 -1
- package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -1
- package/dist/infrastructure/telegram/telegram-bot-service.js +8 -4
- package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -1
- package/dist/services/autostop-service.d.ts.map +1 -1
- package/dist/services/autostop-service.js +2 -1
- package/dist/services/autostop-service.js.map +1 -1
- package/package.json +4 -4
- package/public/admin/assets/index-i7xhksGh.js +1 -0
- package/public/admin/index.html +1 -1
- package/public/admin/assets/index-_4M4gzVz.js +0 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet ID resolution helper: resolves walletId from request parameters with 3-priority fallback.
|
|
3
|
+
*
|
|
4
|
+
* Priority order:
|
|
5
|
+
* 1. bodyWalletId (explicit POST/PUT body parameter)
|
|
6
|
+
* 2. c.req.query('walletId') (GET/DELETE query parameter)
|
|
7
|
+
* 3. c.get('defaultWalletId') (session-auth middleware default wallet)
|
|
8
|
+
*
|
|
9
|
+
* After resolution, validates that the session has access to the wallet
|
|
10
|
+
* by checking session_wallets junction table.
|
|
11
|
+
*
|
|
12
|
+
* @see Phase 211 -- API wallet selection
|
|
13
|
+
*/
|
|
14
|
+
import type { Context } from 'hono';
|
|
15
|
+
import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
16
|
+
/**
|
|
17
|
+
* Resolve wallet ID from request context with 3-priority fallback + session access check.
|
|
18
|
+
*
|
|
19
|
+
* @param c - Hono request context (must have sessionId and defaultWalletId set by sessionAuth)
|
|
20
|
+
* @param db - Drizzle database instance
|
|
21
|
+
* @param bodyWalletId - Optional walletId from request body (highest priority)
|
|
22
|
+
* @returns Resolved wallet ID string
|
|
23
|
+
* @throws WAIaaSError('WALLET_ACCESS_DENIED') if session does not have access to the wallet
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveWalletId(c: Context, db: BetterSQLite3Database<any>, bodyWalletId?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Verify that a session has access to a specific wallet via session_wallets junction table.
|
|
28
|
+
*
|
|
29
|
+
* Used when the walletId comes from a different source (e.g., transaction record)
|
|
30
|
+
* rather than from request parameters.
|
|
31
|
+
*
|
|
32
|
+
* @param sessionId - Session ID to check
|
|
33
|
+
* @param walletId - Wallet ID to verify access for
|
|
34
|
+
* @param db - Drizzle database instance
|
|
35
|
+
* @throws WAIaaSError('WALLET_ACCESS_DENIED') if session does not have access to the wallet
|
|
36
|
+
*/
|
|
37
|
+
export declare function verifyWalletAccess(sessionId: string, walletId: string, db: BetterSQLite3Database<any>): void;
|
|
38
|
+
//# sourceMappingURL=resolve-wallet-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-wallet-id.d.ts","sourceRoot":"","sources":["../../../src/api/helpers/resolve-wallet-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKxE;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,OAAO,EACV,EAAE,EAAE,qBAAqB,CAAC,GAAG,CAAC,EAC9B,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAiCR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAC7B,IAAI,CAeN"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet ID resolution helper: resolves walletId from request parameters with 3-priority fallback.
|
|
3
|
+
*
|
|
4
|
+
* Priority order:
|
|
5
|
+
* 1. bodyWalletId (explicit POST/PUT body parameter)
|
|
6
|
+
* 2. c.req.query('walletId') (GET/DELETE query parameter)
|
|
7
|
+
* 3. c.get('defaultWalletId') (session-auth middleware default wallet)
|
|
8
|
+
*
|
|
9
|
+
* After resolution, validates that the session has access to the wallet
|
|
10
|
+
* by checking session_wallets junction table.
|
|
11
|
+
*
|
|
12
|
+
* @see Phase 211 -- API wallet selection
|
|
13
|
+
*/
|
|
14
|
+
import { eq, and } from 'drizzle-orm';
|
|
15
|
+
import { WAIaaSError } from '@waiaas/core';
|
|
16
|
+
import { sessionWallets } from '../../infrastructure/database/schema.js';
|
|
17
|
+
/**
|
|
18
|
+
* Resolve wallet ID from request context with 3-priority fallback + session access check.
|
|
19
|
+
*
|
|
20
|
+
* @param c - Hono request context (must have sessionId and defaultWalletId set by sessionAuth)
|
|
21
|
+
* @param db - Drizzle database instance
|
|
22
|
+
* @param bodyWalletId - Optional walletId from request body (highest priority)
|
|
23
|
+
* @returns Resolved wallet ID string
|
|
24
|
+
* @throws WAIaaSError('WALLET_ACCESS_DENIED') if session does not have access to the wallet
|
|
25
|
+
*/
|
|
26
|
+
export function resolveWalletId(c, db, bodyWalletId) {
|
|
27
|
+
// Priority 1: explicit body parameter
|
|
28
|
+
// Priority 2: query parameter
|
|
29
|
+
// Priority 3: default wallet from session-auth middleware
|
|
30
|
+
const walletId = bodyWalletId ||
|
|
31
|
+
c.req.query('walletId') ||
|
|
32
|
+
c.get('defaultWalletId');
|
|
33
|
+
if (!walletId) {
|
|
34
|
+
throw new WAIaaSError('WALLET_ACCESS_DENIED', {
|
|
35
|
+
message: 'No wallet ID provided and no default wallet available',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Verify session has access to this wallet via session_wallets junction table
|
|
39
|
+
const sessionId = c.get('sessionId');
|
|
40
|
+
const link = db
|
|
41
|
+
.select()
|
|
42
|
+
.from(sessionWallets)
|
|
43
|
+
.where(and(eq(sessionWallets.sessionId, sessionId), eq(sessionWallets.walletId, walletId)))
|
|
44
|
+
.get();
|
|
45
|
+
if (!link) {
|
|
46
|
+
throw new WAIaaSError('WALLET_ACCESS_DENIED');
|
|
47
|
+
}
|
|
48
|
+
return walletId;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Verify that a session has access to a specific wallet via session_wallets junction table.
|
|
52
|
+
*
|
|
53
|
+
* Used when the walletId comes from a different source (e.g., transaction record)
|
|
54
|
+
* rather than from request parameters.
|
|
55
|
+
*
|
|
56
|
+
* @param sessionId - Session ID to check
|
|
57
|
+
* @param walletId - Wallet ID to verify access for
|
|
58
|
+
* @param db - Drizzle database instance
|
|
59
|
+
* @throws WAIaaSError('WALLET_ACCESS_DENIED') if session does not have access to the wallet
|
|
60
|
+
*/
|
|
61
|
+
export function verifyWalletAccess(sessionId, walletId, db) {
|
|
62
|
+
const link = db
|
|
63
|
+
.select()
|
|
64
|
+
.from(sessionWallets)
|
|
65
|
+
.where(and(eq(sessionWallets.sessionId, sessionId), eq(sessionWallets.walletId, walletId)))
|
|
66
|
+
.get();
|
|
67
|
+
if (!link) {
|
|
68
|
+
throw new WAIaaSError('WALLET_ACCESS_DENIED');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=resolve-wallet-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-wallet-id.js","sourceRoot":"","sources":["../../../src/api/helpers/resolve-wallet-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEzE;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,CAAU,EACV,EAA8B,EAC9B,YAAqB;IAErB,sCAAsC;IACtC,8BAA8B;IAC9B,0DAA0D;IAC1D,MAAM,QAAQ,GACZ,YAAY;QACZ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACtB,CAAC,CAAC,GAAG,CAAC,iBAA0B,CAAwB,CAAC;IAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,WAAW,CAAC,sBAAsB,EAAE;YAC5C,OAAO,EAAE,uDAAuD;SACjE,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAoB,CAAW,CAAC;IACxD,MAAM,IAAI,GAAG,EAAE;SACZ,MAAM,EAAE;SACR,IAAI,CAAC,cAAc,CAAC;SACpB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,EACvC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACtC,CACF;SACA,GAAG,EAAE,CAAC;IAET,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,QAAgB,EAChB,EAA8B;IAE9B,MAAM,IAAI,GAAG,EAAE;SACZ,MAAM,EAAE;SACR,IAAI,CAAC,cAAc,CAAC;SACpB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,EACvC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACtC,CACF;SACA,GAAG,EAAE,CAAC;IAET,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -46,10 +46,10 @@ export function createOwnerAuth(deps) {
|
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
// Look up wallet to verify owner_address match.
|
|
49
|
-
// Prefer
|
|
49
|
+
// Prefer defaultWalletId from sessionAuth context (set on /v1/transactions/* routes)
|
|
50
50
|
// over c.req.param('id') which is the TRANSACTION ID on /v1/transactions/:id/*.
|
|
51
51
|
// For direct wallet routes like /v1/wallets/:id/*, c.req.param('id') IS the wallet ID.
|
|
52
|
-
const walletId = c.get('
|
|
52
|
+
const walletId = c.get('defaultWalletId') || c.req.param('id');
|
|
53
53
|
if (!walletId) {
|
|
54
54
|
throw new WAIaaSError('WALLET_NOT_FOUND', {
|
|
55
55
|
message: 'Wallet ID required for owner authentication',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-auth.js","sourceRoot":"","sources":["../../../src/api/middleware/owner-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,eAAe,CAAiB,CAAC;AAClD,CAAC;AAUD,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,eAAe,CAAC,IAAmB;IACjD,OAAO,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACxC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,IAAI,WAAW,CAAC,mBAAmB,EAAE;gBACzC,OAAO,EAAE,8EAA8E;aACxF,CAAC,CAAC;QACL,CAAC;QAED,gDAAgD;QAChD,
|
|
1
|
+
{"version":3,"file":"owner-auth.js","sourceRoot":"","sources":["../../../src/api/middleware/owner-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* Validates Authorization header format (Bearer wai_sess_...),
|
|
5
5
|
* verifies JWT via JwtSecretManager (supports dual-key rotation),
|
|
6
6
|
* checks session existence and revocation in SQLite,
|
|
7
|
-
* and sets sessionId/
|
|
7
|
+
* and sets sessionId/defaultWalletId on Hono context.
|
|
8
|
+
*
|
|
9
|
+
* v26.4: defaultWalletId만 설정. walletId는 resolveWalletId()로 결정.
|
|
8
10
|
*
|
|
9
11
|
* Factory pattern: createSessionAuth(deps) returns middleware.
|
|
10
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-auth.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/session-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-auth.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/session-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,KAAK,MAAM,MAAM,yCAAyC,CAAC;AAOvE,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,EAAE,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;CAC1C;AAMD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,+DAoCtD"}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* Validates Authorization header format (Bearer wai_sess_...),
|
|
5
5
|
* verifies JWT via JwtSecretManager (supports dual-key rotation),
|
|
6
6
|
* checks session existence and revocation in SQLite,
|
|
7
|
-
* and sets sessionId/
|
|
7
|
+
* and sets sessionId/defaultWalletId on Hono context.
|
|
8
|
+
*
|
|
9
|
+
* v26.4: defaultWalletId만 설정. walletId는 resolveWalletId()로 결정.
|
|
8
10
|
*
|
|
9
11
|
* Factory pattern: createSessionAuth(deps) returns middleware.
|
|
10
12
|
*
|
|
@@ -42,9 +44,9 @@ export function createSessionAuth(deps) {
|
|
|
42
44
|
if (session.revokedAt !== null) {
|
|
43
45
|
throw new WAIaaSError('SESSION_REVOKED');
|
|
44
46
|
}
|
|
45
|
-
// 5. Set context variables
|
|
47
|
+
// 5. Set context variables (defaultWalletId only; walletId resolved via resolveWalletId)
|
|
46
48
|
c.set('sessionId', payload.sub);
|
|
47
|
-
c.set('
|
|
49
|
+
c.set('defaultWalletId', payload.wlt);
|
|
48
50
|
await next();
|
|
49
51
|
});
|
|
50
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-auth.js","sourceRoot":"","sources":["../../../src/api/middleware/session-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-auth.js","sourceRoot":"","sources":["../../../src/api/middleware/session-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAWnE,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,OAAO,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACxC,kCAAkC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,WAAW,CAAC,eAAe,EAAE;gBACrC,OAAO,EAAE,4EAA4E;aACtF,CAAC,CAAC;QACL,CAAC;QAED,yDAAyD;QACzD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEjD,iEAAiE;QACjE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE/D,+CAA+C;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE;aACpB,MAAM,EAAE;aACR,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;aACnC,GAAG,EAAE,CAAC;QAET,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC3C,CAAC;QAED,yFAAyF;QACzF,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAEtC,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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;
|
|
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,CAwN/D"}
|
|
@@ -21,6 +21,7 @@ import { wallets, transactions } from '../../infrastructure/database/schema.js';
|
|
|
21
21
|
import { stage1Validate, stage2Auth, stage3Policy, 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
|
+
import { resolveWalletId } from '../helpers/resolve-wallet-id.js';
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
25
26
|
// OpenAPI Response Schemas
|
|
26
27
|
// ---------------------------------------------------------------------------
|
|
@@ -50,6 +51,7 @@ const ActionExecuteRequestSchema = z
|
|
|
50
51
|
.object({
|
|
51
52
|
params: z.record(z.unknown()).optional().default({}),
|
|
52
53
|
network: z.string().optional(),
|
|
54
|
+
walletId: z.string().uuid().optional().describe('Target wallet ID (optional -- defaults to session default wallet)'),
|
|
53
55
|
})
|
|
54
56
|
.openapi('ActionExecuteRequest');
|
|
55
57
|
// ---------------------------------------------------------------------------
|
|
@@ -160,8 +162,8 @@ export function actionRoutes(deps) {
|
|
|
160
162
|
});
|
|
161
163
|
}
|
|
162
164
|
}
|
|
163
|
-
// 3.
|
|
164
|
-
const walletId = c.
|
|
165
|
+
// 3. Resolve walletId from body.walletId > query > defaultWalletId
|
|
166
|
+
const walletId = resolveWalletId(c, deps.db, body.walletId);
|
|
165
167
|
const sessionId = c.get('sessionId');
|
|
166
168
|
// 4. Look up wallet
|
|
167
169
|
const wallet = await deps.db.select().from(wallets).where(eq(wallets.id, walletId)).get();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/api/routes/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAIrE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,GACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAOpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/api/routes/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/api/routes/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;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;AAKjE,OAAO,KAAK,EAAyE,YAAY,EAAE,iBAAiB,EAAgB,MAAM,cAAc,CAAC;AAEzJ,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/api/routes/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;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;AAKjE,OAAO,KAAK,EAAyE,YAAY,EAAE,iBAAiB,EAAgB,MAAM,cAAc,CAAC;AAEzJ,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,gDAAgD,CAAC;AAInG,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;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,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;AA8BjG,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,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,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,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;CAClD;AAkmBD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CA0wC7D"}
|
package/dist/api/routes/admin.js
CHANGED
|
@@ -32,8 +32,9 @@ import { writeFile, rename, mkdir } from 'node:fs/promises';
|
|
|
32
32
|
import { join, dirname } from 'node:path';
|
|
33
33
|
import { WAIaaSError, getDefaultNetwork, getNetworksForEnvironment } from '@waiaas/core';
|
|
34
34
|
import { CurrencyCodeSchema, formatRatePreview } from '@waiaas/core';
|
|
35
|
-
import { wallets, sessions, notificationLogs, policies, transactions } from '../../infrastructure/database/schema.js';
|
|
35
|
+
import { wallets, sessions, sessionWallets, notificationLogs, policies, transactions } from '../../infrastructure/database/schema.js';
|
|
36
36
|
import { generateId } from '../../infrastructure/database/id.js';
|
|
37
|
+
import { buildConnectInfoPrompt } from './connect-info.js';
|
|
37
38
|
import { getSettingDefinition } from '../../infrastructure/settings/index.js';
|
|
38
39
|
import { resolveRpcUrl } from '../../infrastructure/adapter-pool.js';
|
|
39
40
|
import { AdminStatusResponseSchema, KillSwitchResponseSchema, KillSwitchActivateResponseSchema, KillSwitchEscalateResponseSchema, RecoverResponseSchema, KillSwitchRecoverRequestSchema, ShutdownResponseSchema, RotateSecretResponseSchema, NotificationStatusResponseSchema, NotificationTestRequestSchema, NotificationTestResponseSchema, NotificationLogResponseSchema, SettingsResponseSchema, SettingsUpdateRequestSchema, SettingsUpdateResponseSchema, TestRpcRequestSchema, TestRpcResponseSchema, OracleStatusResponseSchema, AgentPromptRequestSchema, AgentPromptResponseSchema, buildErrorResponses, openApiValidationHook, } from './openapi-schemas.js';
|
|
@@ -1421,13 +1422,16 @@ export function adminRoutes(deps) {
|
|
|
1421
1422
|
const token = await deps.jwtSecretManager.signToken(jwtPayload);
|
|
1422
1423
|
const tokenHash = createHash('sha256').update(token).digest('hex');
|
|
1423
1424
|
deps.db.insert(sessions).values({
|
|
1424
|
-
id: sessionId,
|
|
1425
|
+
id: sessionId, tokenHash,
|
|
1425
1426
|
expiresAt: new Date(expiresAt * 1000),
|
|
1426
1427
|
absoluteExpiresAt: new Date(absoluteExpiresAt * 1000),
|
|
1427
1428
|
createdAt: new Date(nowSec * 1000),
|
|
1428
1429
|
renewalCount: 0, maxRenewals: config.security.session_max_renewals,
|
|
1429
1430
|
constraints: null, source: 'api',
|
|
1430
1431
|
}).run();
|
|
1432
|
+
deps.db.insert(sessionWallets).values({
|
|
1433
|
+
sessionId, walletId, isDefault: true, createdAt: new Date(nowSec * 1000),
|
|
1434
|
+
}).run();
|
|
1431
1435
|
void deps.notificationService?.notify('SESSION_CREATED', walletId, { sessionId });
|
|
1432
1436
|
results.push({ walletId, walletName: wallet.name, sessionId, token });
|
|
1433
1437
|
}
|
|
@@ -1475,13 +1479,16 @@ export function adminRoutes(deps) {
|
|
|
1475
1479
|
const token = await deps.jwtSecretManager.signToken(jwtPayload);
|
|
1476
1480
|
const tokenHash = createHash('sha256').update(token).digest('hex');
|
|
1477
1481
|
deps.db.insert(sessions).values({
|
|
1478
|
-
id: sessionId,
|
|
1482
|
+
id: sessionId, tokenHash,
|
|
1479
1483
|
expiresAt: new Date(expiresAt * 1000),
|
|
1480
1484
|
absoluteExpiresAt: new Date(absoluteExpiresAt * 1000),
|
|
1481
1485
|
createdAt: new Date(nowSec * 1000),
|
|
1482
1486
|
renewalCount: 0, maxRenewals: config.security.session_max_renewals,
|
|
1483
1487
|
constraints: null, source: 'mcp',
|
|
1484
1488
|
}).run();
|
|
1489
|
+
deps.db.insert(sessionWallets).values({
|
|
1490
|
+
sessionId, walletId, isDefault: true, createdAt: new Date(nowSec * 1000),
|
|
1491
|
+
}).run();
|
|
1485
1492
|
// Write token file
|
|
1486
1493
|
const tokenPath = join(deps.dataDir, 'mcp-tokens', walletId);
|
|
1487
1494
|
const tmpPath = `${tokenPath}.tmp`;
|
|
@@ -1542,13 +1549,13 @@ export function adminRoutes(deps) {
|
|
|
1542
1549
|
const ttl = body.ttl ?? 86400;
|
|
1543
1550
|
const expiresAt = nowSec + ttl;
|
|
1544
1551
|
const absoluteExpiresAt = nowSec + config.security.session_absolute_lifetime;
|
|
1545
|
-
// Get target wallets
|
|
1552
|
+
// Get target wallets (with environment for prompt builder)
|
|
1546
1553
|
let targetWallets;
|
|
1547
1554
|
if (body.walletIds && body.walletIds.length > 0) {
|
|
1548
1555
|
targetWallets = body.walletIds
|
|
1549
1556
|
.map((wid) => deps.db.select().from(wallets).where(eq(wallets.id, wid)).get())
|
|
1550
1557
|
.filter((w) => w != null && w.status === 'ACTIVE')
|
|
1551
|
-
.map((w) => ({ id: w.id, name: w.name, chain: w.chain, defaultNetwork: w.defaultNetwork }));
|
|
1558
|
+
.map((w) => ({ id: w.id, name: w.name, chain: w.chain, environment: w.environment, publicKey: w.publicKey, defaultNetwork: w.defaultNetwork }));
|
|
1552
1559
|
}
|
|
1553
1560
|
else {
|
|
1554
1561
|
targetWallets = deps.db
|
|
@@ -1556,54 +1563,97 @@ export function adminRoutes(deps) {
|
|
|
1556
1563
|
.from(wallets)
|
|
1557
1564
|
.where(eq(wallets.status, 'ACTIVE'))
|
|
1558
1565
|
.all()
|
|
1559
|
-
.map((w) => ({ id: w.id, name: w.name, chain: w.chain, defaultNetwork: w.defaultNetwork }));
|
|
1566
|
+
.map((w) => ({ id: w.id, name: w.name, chain: w.chain, environment: w.environment, publicKey: w.publicKey, defaultNetwork: w.defaultNetwork }));
|
|
1560
1567
|
}
|
|
1561
1568
|
if (targetWallets.length === 0) {
|
|
1562
1569
|
return c.json({ prompt: '', walletCount: 0, sessionsCreated: 0, expiresAt }, 201);
|
|
1563
1570
|
}
|
|
1564
|
-
// Create
|
|
1565
|
-
const
|
|
1566
|
-
const
|
|
1567
|
-
const
|
|
1568
|
-
const
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1571
|
+
// Create a single multi-wallet session (one sessionId, one token)
|
|
1572
|
+
const defaultWallet = targetWallets[0];
|
|
1573
|
+
const sessionId = generateId();
|
|
1574
|
+
const jwtPayload = { sub: sessionId, wlt: defaultWallet.id, iat: nowSec, exp: expiresAt };
|
|
1575
|
+
const token = await deps.jwtSecretManager.signToken(jwtPayload);
|
|
1576
|
+
const tokenHash = createHash('sha256').update(token).digest('hex');
|
|
1577
|
+
deps.db.insert(sessions).values({
|
|
1578
|
+
id: sessionId,
|
|
1579
|
+
tokenHash,
|
|
1580
|
+
expiresAt: new Date(expiresAt * 1000),
|
|
1581
|
+
absoluteExpiresAt: new Date(absoluteExpiresAt * 1000),
|
|
1582
|
+
createdAt: new Date(nowSec * 1000),
|
|
1583
|
+
renewalCount: 0,
|
|
1584
|
+
maxRenewals: config.security.session_max_renewals,
|
|
1585
|
+
constraints: null,
|
|
1586
|
+
source: 'api',
|
|
1587
|
+
}).run();
|
|
1588
|
+
// Insert N rows into session_wallets (first wallet is default)
|
|
1574
1589
|
for (let i = 0; i < targetWallets.length; i++) {
|
|
1575
1590
|
const w = targetWallets[i];
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
const token = await deps.jwtSecretManager.signToken(jwtPayload);
|
|
1579
|
-
const tokenHash = createHash('sha256').update(token).digest('hex');
|
|
1580
|
-
deps.db.insert(sessions).values({
|
|
1581
|
-
id: sessionId,
|
|
1591
|
+
deps.db.insert(sessionWallets).values({
|
|
1592
|
+
sessionId,
|
|
1582
1593
|
walletId: w.id,
|
|
1583
|
-
|
|
1584
|
-
expiresAt: new Date(expiresAt * 1000),
|
|
1585
|
-
absoluteExpiresAt: new Date(absoluteExpiresAt * 1000),
|
|
1594
|
+
isDefault: i === 0,
|
|
1586
1595
|
createdAt: new Date(nowSec * 1000),
|
|
1587
|
-
renewalCount: 0,
|
|
1588
|
-
maxRenewals: config.security.session_max_renewals,
|
|
1589
|
-
constraints: null,
|
|
1590
|
-
source: 'api',
|
|
1591
1596
|
}).run();
|
|
1592
|
-
void deps.notificationService?.notify('SESSION_CREATED', w.id, { sessionId });
|
|
1593
|
-
sessionsCreated++;
|
|
1594
|
-
const network = w.defaultNetwork ?? w.chain;
|
|
1595
|
-
lines.push(`${i + 1}. ${w.name} (${w.id}) \u2014 ${network}`);
|
|
1596
|
-
lines.push(` Session: ${token}`);
|
|
1597
1597
|
}
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1598
|
+
void deps.notificationService?.notify('SESSION_CREATED', defaultWallet.id, { sessionId });
|
|
1599
|
+
// Query per-wallet policies for prompt builder
|
|
1600
|
+
const promptWallets = targetWallets.map((w) => {
|
|
1601
|
+
const walletPolicies = deps.db
|
|
1602
|
+
.select({ type: policies.type })
|
|
1603
|
+
.from(policies)
|
|
1604
|
+
.where(and(eq(policies.walletId, w.id), eq(policies.enabled, true)))
|
|
1605
|
+
.all();
|
|
1606
|
+
return {
|
|
1607
|
+
name: w.name,
|
|
1608
|
+
chain: w.chain,
|
|
1609
|
+
environment: w.environment,
|
|
1610
|
+
address: w.publicKey,
|
|
1611
|
+
defaultNetwork: w.defaultNetwork,
|
|
1612
|
+
policies: walletPolicies,
|
|
1613
|
+
};
|
|
1614
|
+
});
|
|
1615
|
+
// Compute capabilities dynamically (same logic as connect-info)
|
|
1616
|
+
const capabilities = ['transfer', 'token_transfer', 'balance', 'assets'];
|
|
1617
|
+
if (deps.settingsService) {
|
|
1618
|
+
try {
|
|
1619
|
+
if (deps.settingsService.get('signing_sdk.enabled') === 'true') {
|
|
1620
|
+
capabilities.push('sign');
|
|
1621
|
+
}
|
|
1622
|
+
}
|
|
1623
|
+
catch {
|
|
1624
|
+
// Setting key not found -- signing not available
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
if (deps.apiKeyStore) {
|
|
1628
|
+
try {
|
|
1629
|
+
const keys = deps.apiKeyStore.listAll();
|
|
1630
|
+
if (keys.some((k) => k.hasKey)) {
|
|
1631
|
+
capabilities.push('actions');
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
catch {
|
|
1635
|
+
// API key store not available
|
|
1636
|
+
}
|
|
1637
|
+
}
|
|
1638
|
+
if (config.x402?.enabled === true) {
|
|
1639
|
+
capabilities.push('x402');
|
|
1640
|
+
}
|
|
1641
|
+
// Build prompt using shared prompt builder
|
|
1642
|
+
const host = c.req.header('Host') ?? 'localhost:3100';
|
|
1643
|
+
const protocol = c.req.header('X-Forwarded-Proto') ?? 'http';
|
|
1644
|
+
const baseUrl = `${protocol}://${host}`;
|
|
1645
|
+
const prompt = buildConnectInfoPrompt({
|
|
1646
|
+
wallets: promptWallets,
|
|
1647
|
+
capabilities,
|
|
1648
|
+
baseUrl,
|
|
1649
|
+
version: deps.version,
|
|
1650
|
+
});
|
|
1651
|
+
// Append session token so the agent can start using it immediately
|
|
1652
|
+
const fullPrompt = `${prompt}\n\nSession Token: ${token}\nSession ID: ${sessionId}`;
|
|
1603
1653
|
return c.json({
|
|
1604
|
-
prompt:
|
|
1654
|
+
prompt: fullPrompt,
|
|
1605
1655
|
walletCount: targetWallets.length,
|
|
1606
|
-
sessionsCreated,
|
|
1656
|
+
sessionsCreated: 1,
|
|
1607
1657
|
expiresAt,
|
|
1608
1658
|
}, 201);
|
|
1609
1659
|
});
|