@agentsbank/sdk 1.0.10 → 1.0.13
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/CHANGELOG.md +39 -0
- package/dist/index.d.ts +172 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +336 -0
- package/dist/index.js.map +1 -0
- package/dist/security-config.d.ts +105 -0
- package/dist/security-config.d.ts.map +1 -0
- package/dist/security-config.js +229 -0
- package/dist/security-config.js.map +1 -0
- package/package.json +7 -1
- package/.env +0 -38
- package/.env.example +0 -53
- package/SKILL.md +0 -250
- package/security-config.ts +0 -268
- package/tsconfig.json +0 -16
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,45 @@ All notable changes to the AgentsBank SDK are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.12] - 2026-02-14
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **CRITICAL**: Fixed MODULE_NOT_FOUND error by ensuring dist/ folder is built before publishing
|
|
12
|
+
- Proper TypeScript compilation and dist/ folder generation in NPM package
|
|
13
|
+
- Package now correctly includes compiled index.js and type definitions
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Updated tsconfig.json to properly compile SDK source files
|
|
17
|
+
- Reorganized package build process
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## [1.0.11] - 2026-02-14
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- **Autonomous Mode Support**: Added optional `autonomousMode` config flag for trusted agents
|
|
25
|
+
- Allows financial transactions without `UserApprovalContext` when explicitly enabled
|
|
26
|
+
- Maintains security by requiring guardrails (spending limits, audit logging, whitelisting)
|
|
27
|
+
- Still generates audit trail with synthetic approval context for compliance
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- Updated all domain references from `agentsbank.ai` to `agentsbank.online`
|
|
31
|
+
- Improved security documentation to reflect default-secure-but-flexible approach
|
|
32
|
+
- Enhanced README with Autonomous Mode best practices section
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- Type definitions now support `'autonomous'` approval method
|
|
36
|
+
- Response error interceptor provides better error messages
|
|
37
|
+
- Network connectivity detection with helpful guidance
|
|
38
|
+
|
|
39
|
+
### Documentation
|
|
40
|
+
- Updated all API endpoint examples to use `api.agentsbank.online`
|
|
41
|
+
- Added comprehensive Autonomous Mode setup guide
|
|
42
|
+
- Enhanced security requirements section with dual-mode explanation
|
|
43
|
+
- Updated all support links to `agentsbank.online`
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
8
47
|
## [1.0.10] - 2026-02-14
|
|
9
48
|
|
|
10
49
|
### Added
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔒 AgentsBank.ai SDK for Agents - FINANCIAL OPERATIONS
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ SECURITY CONSTRAINTS:
|
|
5
|
+
* - Requires explicit API credentials (apiUrl + apiKey or agent credentials)
|
|
6
|
+
* - Financial operations (sendTransaction) require UserApprovalContext
|
|
7
|
+
* - NOT autonomously invocable - requires human approval
|
|
8
|
+
* - All operations logged with audit trail
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* import { AgentsBankSDK } from '@agentsbank/sdk';
|
|
12
|
+
*
|
|
13
|
+
* const bank = new AgentsBankSDK({
|
|
14
|
+
* apiUrl: process.env.AGENTSBANK_API_URL!,
|
|
15
|
+
* apiKey: process.env.AGENTSBANK_API_KEY!,
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Read-only operations (no approval needed)
|
|
19
|
+
* const wallet = await bank.getWallet(walletId);
|
|
20
|
+
*
|
|
21
|
+
* // Financial operations (REQUIRES USER APPROVAL)
|
|
22
|
+
* const tx = await bank.sendTransaction(
|
|
23
|
+
* walletId,
|
|
24
|
+
* toAddress,
|
|
25
|
+
* amount,
|
|
26
|
+
* { userId: 'user_123', approvedAt: new Date(), reason: 'User confirmed on UI' }
|
|
27
|
+
* );
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* ⚠️ REQUIRED: User approval context for financial operations
|
|
31
|
+
* Prevents autonomous execution of transactions
|
|
32
|
+
*/
|
|
33
|
+
export interface UserApprovalContext {
|
|
34
|
+
userId: string;
|
|
35
|
+
approvedAt: Date;
|
|
36
|
+
reason?: string;
|
|
37
|
+
approvalMethod?: 'ui' | 'api' | '2fa' | 'autonomous';
|
|
38
|
+
}
|
|
39
|
+
export interface SDKConfig {
|
|
40
|
+
apiUrl: string;
|
|
41
|
+
agentUsername?: string;
|
|
42
|
+
agentPassword?: string;
|
|
43
|
+
apiKey?: string;
|
|
44
|
+
token?: string;
|
|
45
|
+
auditLogger?: (event: AuditEvent) => void;
|
|
46
|
+
/**
|
|
47
|
+
* ⚠️ AUTONOMOUS MODE (RISKY)
|
|
48
|
+
* If true, allows financial operations without UserApprovalContext
|
|
49
|
+
* Use only for trusted autonomous agents with guardrails enabled
|
|
50
|
+
* Default: false (requires human approval)
|
|
51
|
+
*/
|
|
52
|
+
autonomousMode?: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface AuditEvent {
|
|
55
|
+
timestamp: Date;
|
|
56
|
+
operation: 'wallet_create' | 'wallet_list' | 'balance_query' | 'transaction_send' | 'auth_login' | 'token_refresh';
|
|
57
|
+
walletId?: string;
|
|
58
|
+
txId?: string;
|
|
59
|
+
userId?: string;
|
|
60
|
+
amount?: string;
|
|
61
|
+
toAddress?: string;
|
|
62
|
+
status: 'initiated' | 'success' | 'failed';
|
|
63
|
+
error?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface WalletInfo {
|
|
66
|
+
wallet_id: string;
|
|
67
|
+
agent_id: string;
|
|
68
|
+
chain: string;
|
|
69
|
+
address: string;
|
|
70
|
+
type: 'custodial' | 'non-custodial';
|
|
71
|
+
balance: Record<string, string>;
|
|
72
|
+
created_at: string;
|
|
73
|
+
}
|
|
74
|
+
export interface TransactionInfo {
|
|
75
|
+
tx_id: string;
|
|
76
|
+
wallet_id: string;
|
|
77
|
+
type: string;
|
|
78
|
+
amount: string;
|
|
79
|
+
currency: string;
|
|
80
|
+
from_address: string;
|
|
81
|
+
to_address: string;
|
|
82
|
+
tx_hash?: string;
|
|
83
|
+
status: 'pending' | 'confirmed' | 'failed';
|
|
84
|
+
fee: string;
|
|
85
|
+
timestamp: string;
|
|
86
|
+
}
|
|
87
|
+
export declare class AgentsBankSDK {
|
|
88
|
+
private client;
|
|
89
|
+
private config;
|
|
90
|
+
private token?;
|
|
91
|
+
private auditLogger;
|
|
92
|
+
constructor(config: SDKConfig);
|
|
93
|
+
/**
|
|
94
|
+
* Default audit logger - logs to console (override with custom logger)
|
|
95
|
+
*/
|
|
96
|
+
private defaultAuditLogger;
|
|
97
|
+
/**
|
|
98
|
+
* Internal audit logging
|
|
99
|
+
*/
|
|
100
|
+
private logAudit;
|
|
101
|
+
/**
|
|
102
|
+
* Login with agent credentials
|
|
103
|
+
*/
|
|
104
|
+
login(): Promise<string>;
|
|
105
|
+
/**
|
|
106
|
+
* Create a new wallet
|
|
107
|
+
*/
|
|
108
|
+
createWallet(chain: 'ethereum' | 'bsc' | 'solana', type?: 'custodial' | 'non-custodial'): Promise<WalletInfo>;
|
|
109
|
+
/**
|
|
110
|
+
* Get wallet details
|
|
111
|
+
*/
|
|
112
|
+
getWallet(walletId: string): Promise<WalletInfo>;
|
|
113
|
+
/**
|
|
114
|
+
* List all wallets for agent
|
|
115
|
+
*/
|
|
116
|
+
listWallets(): Promise<WalletInfo[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Get wallet balance
|
|
119
|
+
*/
|
|
120
|
+
getBalance(walletId: string): Promise<Record<string, string>>;
|
|
121
|
+
/**
|
|
122
|
+
* Estimate gas for transaction
|
|
123
|
+
*/
|
|
124
|
+
estimateGas(walletId: string, toAddress: string, amount: string): Promise<{
|
|
125
|
+
estimated_gas: string;
|
|
126
|
+
}>;
|
|
127
|
+
/**
|
|
128
|
+
* ⚠️ FINANCIAL OPERATION: Send transaction
|
|
129
|
+
*
|
|
130
|
+
* DEFAULT: Requires UserApprovalContext with human approval evidence
|
|
131
|
+
* - Prevents autonomous execution by default
|
|
132
|
+
* - Requires userId of approver and approval timestamp
|
|
133
|
+
* - All transactions logged in audit trail
|
|
134
|
+
*
|
|
135
|
+
* AUTONOMOUS MODE: If enabled in SDKConfig, can run without approval
|
|
136
|
+
* - Use only for trusted autonomous agents with guardrails
|
|
137
|
+
* - Still requires audit logging and guardrails validation
|
|
138
|
+
*
|
|
139
|
+
* @param walletId Source wallet ID
|
|
140
|
+
* @param toAddress Recipient blockchain address
|
|
141
|
+
* @param amount Transaction amount
|
|
142
|
+
* @param approval User approval context (OPTIONAL if autonomousMode enabled)
|
|
143
|
+
* @param currency Asset to transfer (default: ETH)
|
|
144
|
+
*/
|
|
145
|
+
sendTransaction(walletId: string, toAddress: string, amount: string, approval?: UserApprovalContext, currency?: string): Promise<TransactionInfo>;
|
|
146
|
+
/**
|
|
147
|
+
* Get transaction details
|
|
148
|
+
*/
|
|
149
|
+
getTransaction(txId: string): Promise<TransactionInfo>;
|
|
150
|
+
/**
|
|
151
|
+
* Get transaction history for wallet
|
|
152
|
+
*/
|
|
153
|
+
getTransactionHistory(walletId: string, limit?: number): Promise<TransactionInfo[]>;
|
|
154
|
+
/**
|
|
155
|
+
* Get transaction statistics
|
|
156
|
+
*/
|
|
157
|
+
getStats(walletId: string, days?: number): Promise<any>;
|
|
158
|
+
/**
|
|
159
|
+
* Wait for transaction to be confirmed
|
|
160
|
+
*/
|
|
161
|
+
waitForConfirmation(txId: string, maxWaitMs?: number, pollIntervalMs?: number): Promise<TransactionInfo>;
|
|
162
|
+
/**
|
|
163
|
+
* Update API key
|
|
164
|
+
*/
|
|
165
|
+
regenerateApiKey(): Promise<string>;
|
|
166
|
+
/**
|
|
167
|
+
* Refresh JWT token
|
|
168
|
+
*/
|
|
169
|
+
refreshToken(): Promise<string>;
|
|
170
|
+
}
|
|
171
|
+
export default AgentsBankSDK;
|
|
172
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔒 AgentsBank.ai SDK for Agents - FINANCIAL OPERATIONS
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ SECURITY CONSTRAINTS:
|
|
5
|
+
* - Requires explicit API credentials (apiUrl + apiKey or agent credentials)
|
|
6
|
+
* - Financial operations (sendTransaction) require UserApprovalContext
|
|
7
|
+
* - NOT autonomously invocable - requires human approval
|
|
8
|
+
* - All operations logged with audit trail
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* import { AgentsBankSDK } from '@agentsbank/sdk';
|
|
12
|
+
*
|
|
13
|
+
* const bank = new AgentsBankSDK({
|
|
14
|
+
* apiUrl: process.env.AGENTSBANK_API_URL!,
|
|
15
|
+
* apiKey: process.env.AGENTSBANK_API_KEY!,
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Read-only operations (no approval needed)
|
|
19
|
+
* const wallet = await bank.getWallet(walletId);
|
|
20
|
+
*
|
|
21
|
+
* // Financial operations (REQUIRES USER APPROVAL)
|
|
22
|
+
* const tx = await bank.sendTransaction(
|
|
23
|
+
* walletId,
|
|
24
|
+
* toAddress,
|
|
25
|
+
* amount,
|
|
26
|
+
* { userId: 'user_123', approvedAt: new Date(), reason: 'User confirmed on UI' }
|
|
27
|
+
* );
|
|
28
|
+
*/
|
|
29
|
+
import axios from 'axios';
|
|
30
|
+
export class AgentsBankSDK {
|
|
31
|
+
constructor(config) {
|
|
32
|
+
// ⚠️ SECURITY: Validate required credentials
|
|
33
|
+
if (!config.apiUrl) {
|
|
34
|
+
throw new Error('SECURITY ERROR: AGENTSBANK_API_URL is required. ' +
|
|
35
|
+
'See SKILL.md for credential requirements.');
|
|
36
|
+
}
|
|
37
|
+
const hasApiKey = !!config.apiKey;
|
|
38
|
+
const hasCredentials = !!(config.agentUsername && config.agentPassword);
|
|
39
|
+
const hasToken = !!config.token;
|
|
40
|
+
if (!hasApiKey && !hasCredentials && !hasToken) {
|
|
41
|
+
throw new Error('SECURITY ERROR: Authentication required. Provide one of: ' +
|
|
42
|
+
'apiKey, (agentUsername + agentPassword), or token. ' +
|
|
43
|
+
'See SKILL.md for setup instructions.');
|
|
44
|
+
}
|
|
45
|
+
if (config.autonomousMode) {
|
|
46
|
+
console.warn('⚠️ WARNING: AgentsBankSDK running in AUTONOMOUS MODE ⚠️\n' +
|
|
47
|
+
'Financial transactions will execute WITHOUT human approval.\n' +
|
|
48
|
+
'Ensure guardrails and spending limits are properly configured.\n' +
|
|
49
|
+
'This mode should only be used for trusted autonomous agents.');
|
|
50
|
+
}
|
|
51
|
+
this.config = config;
|
|
52
|
+
this.token = config.token;
|
|
53
|
+
this.auditLogger = config.auditLogger || this.defaultAuditLogger;
|
|
54
|
+
this.client = axios.create({
|
|
55
|
+
baseURL: config.apiUrl,
|
|
56
|
+
timeout: 10000,
|
|
57
|
+
headers: {
|
|
58
|
+
'Content-Type': 'application/json',
|
|
59
|
+
'User-Agent': 'AgentsBank-SDK/0.1.0',
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
// Add token to all requests
|
|
63
|
+
this.client.interceptors.request.use((conf) => {
|
|
64
|
+
if (this.token) {
|
|
65
|
+
conf.headers.Authorization = `Bearer ${this.token}`;
|
|
66
|
+
}
|
|
67
|
+
if (config.apiKey) {
|
|
68
|
+
conf.headers['X-API-Key'] = config.apiKey;
|
|
69
|
+
}
|
|
70
|
+
return conf;
|
|
71
|
+
});
|
|
72
|
+
// Handle errors with better messages
|
|
73
|
+
this.client.interceptors.response.use((response) => response, (error) => {
|
|
74
|
+
// Improve error messages for debugging
|
|
75
|
+
if (error.response) {
|
|
76
|
+
const status = error.response.status;
|
|
77
|
+
const errorData = error.response.data;
|
|
78
|
+
const message = errorData?.error || errorData?.message || 'API Error';
|
|
79
|
+
const enhancedError = new Error(`API Error ${status}: ${message}\nEndpoint: ${error.config?.url}`);
|
|
80
|
+
enhancedError.name = 'APIError';
|
|
81
|
+
return Promise.reject(enhancedError);
|
|
82
|
+
}
|
|
83
|
+
if (error.request) {
|
|
84
|
+
const enhancedError = new Error(`Network Error: No response from ${error.config?.baseURL}\nMake sure the API is online`);
|
|
85
|
+
enhancedError.name = 'NetworkError';
|
|
86
|
+
return Promise.reject(enhancedError);
|
|
87
|
+
}
|
|
88
|
+
return Promise.reject(error);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Default audit logger - logs to console (override with custom logger)
|
|
93
|
+
*/
|
|
94
|
+
defaultAuditLogger(event) {
|
|
95
|
+
console.log(`[AUDIT] ${event.operation.toUpperCase()} - ${event.status}`, {
|
|
96
|
+
timestamp: event.timestamp.toISOString(),
|
|
97
|
+
userId: event.userId || 'system',
|
|
98
|
+
walletId: event.walletId,
|
|
99
|
+
txId: event.txId,
|
|
100
|
+
...(event.error && { error: event.error }),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Internal audit logging
|
|
105
|
+
*/
|
|
106
|
+
logAudit(event) {
|
|
107
|
+
this.auditLogger(event);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Login with agent credentials
|
|
111
|
+
*/
|
|
112
|
+
async login() {
|
|
113
|
+
if (!this.config.agentUsername || !this.config.agentPassword) {
|
|
114
|
+
throw new Error('agentUsername and agentPassword required for login');
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const { data } = await this.client.post('/api/auth/agent/login', {
|
|
118
|
+
agent_username: this.config.agentUsername,
|
|
119
|
+
agent_password: this.config.agentPassword,
|
|
120
|
+
});
|
|
121
|
+
this.token = data.token;
|
|
122
|
+
this.logAudit({
|
|
123
|
+
timestamp: new Date(),
|
|
124
|
+
operation: 'auth_login',
|
|
125
|
+
status: 'success',
|
|
126
|
+
});
|
|
127
|
+
return data.token;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
131
|
+
this.logAudit({
|
|
132
|
+
timestamp: new Date(),
|
|
133
|
+
operation: 'auth_login',
|
|
134
|
+
status: 'failed',
|
|
135
|
+
error: errorMessage,
|
|
136
|
+
});
|
|
137
|
+
// Re-throw with context
|
|
138
|
+
if (errorMessage.includes('API Error 401')) {
|
|
139
|
+
throw new Error('Authentication failed: Invalid credentials. Check agent_username and agent_password.');
|
|
140
|
+
}
|
|
141
|
+
else if (errorMessage.includes('Network Error')) {
|
|
142
|
+
throw new Error(`Cannot reach API at ${this.config.apiUrl}. API may be offline.`);
|
|
143
|
+
}
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create a new wallet
|
|
149
|
+
*/
|
|
150
|
+
async createWallet(chain, type = 'non-custodial') {
|
|
151
|
+
if (!this.token)
|
|
152
|
+
await this.login();
|
|
153
|
+
const { data } = await this.client.post('/api/wallets', {
|
|
154
|
+
chain,
|
|
155
|
+
type,
|
|
156
|
+
});
|
|
157
|
+
return data;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get wallet details
|
|
161
|
+
*/
|
|
162
|
+
async getWallet(walletId) {
|
|
163
|
+
const { data } = await this.client.get(`/api/wallets/${walletId}`);
|
|
164
|
+
return data;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* List all wallets for agent
|
|
168
|
+
*/
|
|
169
|
+
async listWallets() {
|
|
170
|
+
const { data } = await this.client.get('/api/wallets');
|
|
171
|
+
return data.wallets;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get wallet balance
|
|
175
|
+
*/
|
|
176
|
+
async getBalance(walletId) {
|
|
177
|
+
const { data } = await this.client.get(`/api/wallets/${walletId}/balance`);
|
|
178
|
+
return data.balance;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Estimate gas for transaction
|
|
182
|
+
*/
|
|
183
|
+
async estimateGas(walletId, toAddress, amount) {
|
|
184
|
+
const { data } = await this.client.get(`/api/wallets/${walletId}/estimate-gas`, {
|
|
185
|
+
params: { to_address: toAddress, amount },
|
|
186
|
+
});
|
|
187
|
+
return data;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* ⚠️ FINANCIAL OPERATION: Send transaction
|
|
191
|
+
*
|
|
192
|
+
* DEFAULT: Requires UserApprovalContext with human approval evidence
|
|
193
|
+
* - Prevents autonomous execution by default
|
|
194
|
+
* - Requires userId of approver and approval timestamp
|
|
195
|
+
* - All transactions logged in audit trail
|
|
196
|
+
*
|
|
197
|
+
* AUTONOMOUS MODE: If enabled in SDKConfig, can run without approval
|
|
198
|
+
* - Use only for trusted autonomous agents with guardrails
|
|
199
|
+
* - Still requires audit logging and guardrails validation
|
|
200
|
+
*
|
|
201
|
+
* @param walletId Source wallet ID
|
|
202
|
+
* @param toAddress Recipient blockchain address
|
|
203
|
+
* @param amount Transaction amount
|
|
204
|
+
* @param approval User approval context (OPTIONAL if autonomousMode enabled)
|
|
205
|
+
* @param currency Asset to transfer (default: ETH)
|
|
206
|
+
*/
|
|
207
|
+
async sendTransaction(walletId, toAddress, amount, approval, currency = 'ETH') {
|
|
208
|
+
// ⚠️ SECURITY: Check approval requirement
|
|
209
|
+
if (!this.config.autonomousMode) {
|
|
210
|
+
// Default mode: approval REQUIRED
|
|
211
|
+
if (!approval || !approval.userId || !approval.approvedAt) {
|
|
212
|
+
throw new Error('SECURITY ERROR: User approval context required for transactions. ' +
|
|
213
|
+
'Provide userId and approvedAt timestamp, or enable autonomousMode. ' +
|
|
214
|
+
'This prevents autonomous financial operations by default.');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else if (!approval) {
|
|
218
|
+
// Autonomous mode: generate synthetic approval context
|
|
219
|
+
approval = {
|
|
220
|
+
userId: `agent_autonomous_${this.config.agentUsername || 'system'}`,
|
|
221
|
+
approvedAt: new Date(),
|
|
222
|
+
reason: 'Autonomous agent execution - autonomousMode enabled',
|
|
223
|
+
approvalMethod: 'autonomous',
|
|
224
|
+
};
|
|
225
|
+
this.logAudit({
|
|
226
|
+
timestamp: new Date(),
|
|
227
|
+
operation: 'transaction_send',
|
|
228
|
+
status: 'initiated',
|
|
229
|
+
error: 'AUTONOMOUS_MODE_ENABLED - No human approval provided',
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// Log transaction initiation
|
|
233
|
+
this.logAudit({
|
|
234
|
+
timestamp: new Date(),
|
|
235
|
+
operation: 'transaction_send',
|
|
236
|
+
status: 'initiated',
|
|
237
|
+
walletId,
|
|
238
|
+
userId: approval?.userId,
|
|
239
|
+
amount,
|
|
240
|
+
toAddress,
|
|
241
|
+
});
|
|
242
|
+
try {
|
|
243
|
+
const { data } = await this.client.post('/api/transactions', {
|
|
244
|
+
wallet_id: walletId,
|
|
245
|
+
to_address: toAddress,
|
|
246
|
+
amount,
|
|
247
|
+
currency,
|
|
248
|
+
type: 'transfer',
|
|
249
|
+
// Include approval evidence for audit trail
|
|
250
|
+
approval_user_id: approval.userId,
|
|
251
|
+
approval_timestamp: approval.approvedAt.toISOString(),
|
|
252
|
+
approval_reason: approval.reason,
|
|
253
|
+
approval_method: approval.approvalMethod || 'api',
|
|
254
|
+
});
|
|
255
|
+
// Log success
|
|
256
|
+
this.logAudit({
|
|
257
|
+
timestamp: new Date(),
|
|
258
|
+
operation: 'transaction_send',
|
|
259
|
+
status: 'success',
|
|
260
|
+
txId: data.tx_id,
|
|
261
|
+
walletId,
|
|
262
|
+
userId: approval?.userId,
|
|
263
|
+
amount,
|
|
264
|
+
toAddress,
|
|
265
|
+
});
|
|
266
|
+
return data;
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
// Log failure
|
|
270
|
+
this.logAudit({
|
|
271
|
+
timestamp: new Date(),
|
|
272
|
+
operation: 'transaction_send',
|
|
273
|
+
status: 'failed',
|
|
274
|
+
walletId,
|
|
275
|
+
userId: approval?.userId,
|
|
276
|
+
amount,
|
|
277
|
+
toAddress,
|
|
278
|
+
error: error instanceof Error ? error.message : String(error),
|
|
279
|
+
});
|
|
280
|
+
throw error;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get transaction details
|
|
285
|
+
*/
|
|
286
|
+
async getTransaction(txId) {
|
|
287
|
+
const { data } = await this.client.get(`/api/transactions/${txId}`);
|
|
288
|
+
return data;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get transaction history for wallet
|
|
292
|
+
*/
|
|
293
|
+
async getTransactionHistory(walletId, limit = 50) {
|
|
294
|
+
const { data } = await this.client.get(`/api/transactions/wallet/${walletId}`, { params: { limit } });
|
|
295
|
+
return data.transactions;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get transaction statistics
|
|
299
|
+
*/
|
|
300
|
+
async getStats(walletId, days = 30) {
|
|
301
|
+
const { data } = await this.client.get(`/api/transactions/wallet/${walletId}/stats`, { params: { days } });
|
|
302
|
+
return data;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Wait for transaction to be confirmed
|
|
306
|
+
*/
|
|
307
|
+
async waitForConfirmation(txId, maxWaitMs = 300000, pollIntervalMs = 5000) {
|
|
308
|
+
const startTime = Date.now();
|
|
309
|
+
while (Date.now() - startTime < maxWaitMs) {
|
|
310
|
+
const tx = await this.getTransaction(txId);
|
|
311
|
+
if (tx.status !== 'pending') {
|
|
312
|
+
return tx;
|
|
313
|
+
}
|
|
314
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
315
|
+
}
|
|
316
|
+
throw new Error('Transaction confirmation timeout');
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Update API key
|
|
320
|
+
*/
|
|
321
|
+
async regenerateApiKey() {
|
|
322
|
+
const { data } = await this.client.post('/api/auth/agent/regenerate-key');
|
|
323
|
+
return data.api_key;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Refresh JWT token
|
|
327
|
+
*/
|
|
328
|
+
async refreshToken() {
|
|
329
|
+
const { data } = await this.client.post('/api/auth/refresh');
|
|
330
|
+
this.token = data.token;
|
|
331
|
+
return data.token;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Export for convenience
|
|
335
|
+
export default AgentsBankSDK;
|
|
336
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentsBank SDK Security Configuration
|
|
3
|
+
*
|
|
4
|
+
* Defines security constraints and validation rules for the SDK
|
|
5
|
+
* To be used during development and deployment validation
|
|
6
|
+
*/
|
|
7
|
+
export declare const SDK_SECURITY_CONFIG: {
|
|
8
|
+
readonly requiredCredentials: readonly ["AGENTSBANK_API_URL", "AGENTSBANK_API_KEY | (AGENTSBANK_AGENT_USERNAME + AGENTSBANK_AGENT_PASSWORD)"];
|
|
9
|
+
readonly riskLevel: "HIGH";
|
|
10
|
+
readonly financialOperations: true;
|
|
11
|
+
readonly autonomousExecutionAllowed: false;
|
|
12
|
+
readonly autonomousModeSupportedButOptional: true;
|
|
13
|
+
readonly defaultRequiresApproval: true;
|
|
14
|
+
readonly credentialScopes: {
|
|
15
|
+
readonly AGENTSBANK_API_URL: {
|
|
16
|
+
readonly required: true;
|
|
17
|
+
readonly type: "url";
|
|
18
|
+
readonly description: "Base URL of AgentsBank API";
|
|
19
|
+
readonly example: "https://api.agentsbank.ai";
|
|
20
|
+
readonly defaultIfMissing: null;
|
|
21
|
+
};
|
|
22
|
+
readonly AGENTSBANK_API_KEY: {
|
|
23
|
+
readonly required: false;
|
|
24
|
+
readonly type: "secret";
|
|
25
|
+
readonly description: "API Key for authentication (recommended)";
|
|
26
|
+
readonly example: "sk_live_...";
|
|
27
|
+
readonly rotationInterval: number;
|
|
28
|
+
readonly defaultIfMissing: null;
|
|
29
|
+
};
|
|
30
|
+
readonly AGENTSBANK_AGENT_USERNAME: {
|
|
31
|
+
readonly required: false;
|
|
32
|
+
readonly type: "string";
|
|
33
|
+
readonly description: "Agent username (alternative auth method)";
|
|
34
|
+
readonly example: "agent_123";
|
|
35
|
+
readonly defaultIfMissing: null;
|
|
36
|
+
};
|
|
37
|
+
readonly AGENTSBANK_AGENT_PASSWORD: {
|
|
38
|
+
readonly required: false;
|
|
39
|
+
readonly type: "secret";
|
|
40
|
+
readonly description: "Agent password (alternative auth method)";
|
|
41
|
+
readonly example: "secret_password";
|
|
42
|
+
readonly defaultIfMissing: null;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
readonly financialOperationConstraints: {
|
|
46
|
+
readonly sendTransaction: {
|
|
47
|
+
readonly requiresUserApprovalContext: true;
|
|
48
|
+
readonly canBypassApprovalInAutonomousMode: true;
|
|
49
|
+
readonly requiresUserId: true;
|
|
50
|
+
readonly requiresApprovalTimestamp: true;
|
|
51
|
+
readonly auditLoggingRequired: true;
|
|
52
|
+
readonly atomicity: "required";
|
|
53
|
+
readonly rollbackOnFailure: true;
|
|
54
|
+
readonly warningIfAutonomous: "Executing financial transaction WITHOUT human approval";
|
|
55
|
+
};
|
|
56
|
+
readonly createWallet: {
|
|
57
|
+
readonly requiresUserApprovalContext: false;
|
|
58
|
+
readonly auditLoggingRequired: true;
|
|
59
|
+
readonly typeValidation: readonly ["custodial", "non-custodial"];
|
|
60
|
+
};
|
|
61
|
+
readonly estimateGas: {
|
|
62
|
+
readonly requiresUserApprovalContext: false;
|
|
63
|
+
readonly auditLoggingRequired: false;
|
|
64
|
+
readonly cacheable: true;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
readonly auditRequirements: {
|
|
68
|
+
readonly requiredFields: readonly ["timestamp", "operation", "status", "userId", "walletId"];
|
|
69
|
+
readonly retention: {
|
|
70
|
+
readonly production: number;
|
|
71
|
+
readonly development: number;
|
|
72
|
+
};
|
|
73
|
+
readonly sensitiveOperations: readonly ["transaction_send", "auth_login", "token_refresh", "wallet_create"];
|
|
74
|
+
};
|
|
75
|
+
readonly deploymentConstraints: {
|
|
76
|
+
readonly allowedEnvironments: readonly ["development", "staging", "production"];
|
|
77
|
+
readonly productionRequirements: readonly ["Credentials stored in secrets manager", "Custom audit logger configured", "Rate limiting enabled", "Error monitoring (Sentry, DataDog, etc.)", "Credential rotation scheduled"];
|
|
78
|
+
readonly forbiddenPatternsInCode: readonly ["sk_live_", "sk_sandbox_", "password:", "secret:", "token:"];
|
|
79
|
+
};
|
|
80
|
+
readonly rateLimiting: {
|
|
81
|
+
readonly transactionsPerMinute: 5;
|
|
82
|
+
readonly maxAmountPerTransaction: "1000";
|
|
83
|
+
readonly maxDailyAmount: "10000";
|
|
84
|
+
};
|
|
85
|
+
readonly validators: {
|
|
86
|
+
readonly isValidApiUrl: (url: string | undefined) => boolean;
|
|
87
|
+
readonly isValidApiKey: (key: string | undefined) => boolean;
|
|
88
|
+
readonly isValidEthereumAddress: (address: string) => boolean;
|
|
89
|
+
readonly isValidAmount: (amount: string) => boolean;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Validates SDK configuration before use
|
|
94
|
+
* Throws error if validation fails
|
|
95
|
+
*/
|
|
96
|
+
export declare function validateSDKConfiguration(config: Record<string, any>): void;
|
|
97
|
+
/**
|
|
98
|
+
* Validates user approval context for financial operations
|
|
99
|
+
*/
|
|
100
|
+
export declare function validateUserApprovalContext(approval: any): void;
|
|
101
|
+
/**
|
|
102
|
+
* Validates financial operation parameters
|
|
103
|
+
*/
|
|
104
|
+
export declare function validateFinancialOperationParams(walletId: string, toAddress: string, amount: string): void;
|
|
105
|
+
//# sourceMappingURL=security-config.d.ts.map
|