@dominusnode/flowise-tools 1.0.1 → 1.3.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/CHANGELOG.md +30 -0
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/toolkit.d.ts +37 -2
- package/dist/toolkit.d.ts.map +1 -1
- package/dist/toolkit.js +1265 -177
- package/dist/toolkit.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Stripe checkout top-up tool (`dominusnode_topup_stripe`) — create Stripe Checkout sessions ($5–$1,000)
|
|
7
|
+
- Crypto top-up tool (`dominusnode_topup_crypto`) — NOWPayments invoices for BTC, ETH, LTC, XMR, ZEC, USDC, SOL, USDT, DAI, BNB, LINK ($5–$1,000)
|
|
8
|
+
- `dominusnode_update_wallet_policy` tool — update daily limits and domain allowlists for agentic wallets
|
|
9
|
+
- Comprehensive test suite: 168 tests covering SSRF protection (incl. DNS rebinding), input validation, credential scrubbing, payment response fields, and all 26 tools
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- `topupCrypto`: use `Number.isFinite()` instead of `isNaN()` to correctly reject `NaN` and `Infinity` inputs
|
|
13
|
+
- Payment response field alignment: `topupStripe` uses `sessionId`/`url`, `topupCrypto` uses `invoiceId`/`invoiceUrl`/`payCurrency`/`priceAmount`
|
|
14
|
+
|
|
15
|
+
## 1.0.1
|
|
16
|
+
|
|
17
|
+
- Fix branding: replace "DomiNode" with "Dominus Node" throughout
|
|
18
|
+
|
|
19
|
+
## 1.0.0
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Initial release with 23 Flowise-compatible tools for Dominus Node proxy service
|
|
24
|
+
- Proxied fetch with full SSRF protection, DNS rebinding, OFAC blocking, and credential scrubbing
|
|
25
|
+
- Wallet balance and usage monitoring tools
|
|
26
|
+
- Proxy configuration and active session listing
|
|
27
|
+
- Agentic wallet management: create, fund, balance, list, transactions, freeze, unfreeze, delete
|
|
28
|
+
- Team management: create, list, details, fund, create key, usage, update, update member role
|
|
29
|
+
- PayPal top-up and x402 micropayment info tools
|
|
30
|
+
- Full security suite: DNS rebinding protection, Teredo/6to4 IPv6 tunnel detection, IPv4-mapped/compatible IPv6 handling, hex/octal/decimal IP normalization, prototype pollution prevention
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dominus Node
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# @dominusnode/flowise-tools
|
|
2
|
+
|
|
3
|
+
Dominus Node rotating proxy tools for [Flowise](https://flowiseai.com) AI workflows.
|
|
4
|
+
|
|
5
|
+
Provides 26 LangChain-compatible `DynamicStructuredTool` instances for interacting with Dominus Node's rotating proxy-as-a-service platform inside Flowise nodes.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @dominusnode/flowise-tools
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { DominusNodeToolkit } from "@dominusnode/flowise-tools";
|
|
17
|
+
|
|
18
|
+
const toolkit = new DominusNodeToolkit({
|
|
19
|
+
apiKey: process.env.DOMINUSNODE_API_KEY!, // dn_live_... or dn_test_...
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Get all tools for your Flowise workflow
|
|
23
|
+
const tools = toolkit.getTools(); // DynamicStructuredTool[]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Configuration
|
|
27
|
+
|
|
28
|
+
| Environment Variable | Description | Default |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `DOMINUSNODE_API_KEY` | API key (required) | -- |
|
|
31
|
+
| `DOMINUSNODE_BASE_URL` | REST API base URL | `https://api.dominusnode.com` |
|
|
32
|
+
| `DOMINUSNODE_PROXY_HOST` | Proxy gateway host | `proxy.dominusnode.com` |
|
|
33
|
+
| `DOMINUSNODE_PROXY_PORT` | Proxy gateway port | `8080` |
|
|
34
|
+
|
|
35
|
+
## Available Tools (26)
|
|
36
|
+
|
|
37
|
+
### Proxy Operations
|
|
38
|
+
- `dominusnode_proxied_fetch` - Fetch a URL through the rotating proxy with geo-targeting
|
|
39
|
+
- `dominusnode_check_balance` - Check wallet balance and remaining bandwidth
|
|
40
|
+
- `dominusnode_check_usage` - View bandwidth usage statistics
|
|
41
|
+
- `dominusnode_get_proxy_config` - Get proxy pools, pricing, and endpoints
|
|
42
|
+
- `dominusnode_list_sessions` - List active proxy sessions
|
|
43
|
+
|
|
44
|
+
### Agentic Wallet Management
|
|
45
|
+
- `dominusnode_create_agentic_wallet` - Create a custodial sub-wallet with spending limits
|
|
46
|
+
- `dominusnode_fund_agentic_wallet` - Transfer funds to an agentic wallet
|
|
47
|
+
- `dominusnode_agentic_wallet_balance` - Check agentic wallet balance
|
|
48
|
+
- `dominusnode_list_agentic_wallets` - List all agentic wallets
|
|
49
|
+
- `dominusnode_agentic_transactions` - Get agentic wallet transaction history
|
|
50
|
+
- `dominusnode_freeze_agentic_wallet` - Freeze an agentic wallet
|
|
51
|
+
- `dominusnode_unfreeze_agentic_wallet` - Unfreeze an agentic wallet
|
|
52
|
+
- `dominusnode_delete_agentic_wallet` - Delete an agentic wallet
|
|
53
|
+
- `dominusnode_update_wallet_policy` - Update daily limits and domain restrictions
|
|
54
|
+
|
|
55
|
+
### Team Management
|
|
56
|
+
- `dominusnode_create_team` - Create a team with shared wallet
|
|
57
|
+
- `dominusnode_list_teams` - List all teams
|
|
58
|
+
- `dominusnode_team_details` - Get team details and member list
|
|
59
|
+
- `dominusnode_team_fund` - Fund a team wallet
|
|
60
|
+
- `dominusnode_team_create_key` - Create a team API key
|
|
61
|
+
- `dominusnode_team_usage` - Get team transaction history
|
|
62
|
+
- `dominusnode_update_team` - Update team settings
|
|
63
|
+
- `dominusnode_update_team_member_role` - Change a member's role
|
|
64
|
+
|
|
65
|
+
### Payments
|
|
66
|
+
- `dominusnode_topup_paypal` - Top up wallet via PayPal ($5–$1,000)
|
|
67
|
+
- `dominusnode_topup_stripe` - Top up wallet via Stripe ($5–$1,000)
|
|
68
|
+
- `dominusnode_topup_crypto` - Top up wallet via crypto (BTC/ETH/LTC/XMR/ZEC/USDC/SOL/USDT/DAI/BNB/LINK)
|
|
69
|
+
- `dominusnode_x402_info` - Get x402 micropayment protocol info
|
|
70
|
+
|
|
71
|
+
## Security
|
|
72
|
+
|
|
73
|
+
- Full SSRF protection (private IP blocking, DNS rebinding, Teredo/6to4, hex/octal/decimal normalization)
|
|
74
|
+
- OFAC sanctioned country blocking (CU, IR, KP, RU, SY)
|
|
75
|
+
- Credential scrubbing in all error messages
|
|
76
|
+
- Prototype pollution prevention on all parsed JSON (recursive)
|
|
77
|
+
- HTTP method restriction (GET/HEAD/OPTIONS only for proxied fetch)
|
|
78
|
+
- 10 MB response cap, 4000 char truncation, 30s timeout
|
|
79
|
+
- Redirect following disabled
|
|
80
|
+
|
|
81
|
+
## License
|
|
82
|
+
|
|
83
|
+
MIT
|
package/dist/toolkit.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Dominus Node Flowise Toolkit
|
|
3
3
|
*
|
|
4
|
-
* Provides
|
|
4
|
+
* Provides 53 LangChain-compatible DynamicStructuredTool instances for use
|
|
5
5
|
* inside Flowise AI workflows. Covers proxied fetching, wallet management,
|
|
6
|
-
* agentic wallets, teams, PayPal top-up,
|
|
6
|
+
* agentic wallets, teams, Stripe/PayPal/crypto top-up, x402 micropayment info,
|
|
7
|
+
* account management, API key management, plans, sessions, and usage analytics.
|
|
7
8
|
*
|
|
8
9
|
* Security:
|
|
9
10
|
* - Full SSRF protection (private IP blocking, DNS rebinding, Teredo/6to4,
|
|
@@ -57,6 +58,8 @@ export interface DominusNodeToolkitOptions {
|
|
|
57
58
|
proxyHost?: string;
|
|
58
59
|
proxyPort?: number;
|
|
59
60
|
timeout?: number;
|
|
61
|
+
/** Optional agent secret for MCP agent auto-verification (bypasses reCAPTCHA). */
|
|
62
|
+
agentSecret?: string;
|
|
60
63
|
}
|
|
61
64
|
export declare class DominusNodeToolkit {
|
|
62
65
|
private apiKey;
|
|
@@ -64,6 +67,7 @@ export declare class DominusNodeToolkit {
|
|
|
64
67
|
private proxyHost;
|
|
65
68
|
private proxyPort;
|
|
66
69
|
private timeout;
|
|
70
|
+
private agentSecret?;
|
|
67
71
|
private token;
|
|
68
72
|
private tokenExpiresAt;
|
|
69
73
|
constructor(options?: DominusNodeToolkitOptions);
|
|
@@ -71,6 +75,7 @@ export declare class DominusNodeToolkit {
|
|
|
71
75
|
private _ensureAuth;
|
|
72
76
|
private _apiRequest;
|
|
73
77
|
private _requestWithRetry;
|
|
78
|
+
private _unauthenticatedRequest;
|
|
74
79
|
proxiedFetch(url: string, method?: string, country?: string, proxyType?: string): Promise<string>;
|
|
75
80
|
checkBalance(): Promise<string>;
|
|
76
81
|
checkUsage(days?: number): Promise<string>;
|
|
@@ -94,7 +99,37 @@ export declare class DominusNodeToolkit {
|
|
|
94
99
|
updateTeam(teamId: string, name?: string, maxMembers?: number): Promise<string>;
|
|
95
100
|
updateTeamMemberRole(teamId: string, userId: string, role: string): Promise<string>;
|
|
96
101
|
topupPaypal(amountCents: number): Promise<string>;
|
|
102
|
+
topupStripe(amountCents: number): Promise<string>;
|
|
103
|
+
private static readonly VALID_CRYPTO_CURRENCIES;
|
|
104
|
+
topupCrypto(amountUsd: number, currency: string): Promise<string>;
|
|
97
105
|
x402Info(): Promise<string>;
|
|
106
|
+
getProxyStatus(): Promise<string>;
|
|
107
|
+
getTransactions(limit?: number): Promise<string>;
|
|
108
|
+
getForecast(): Promise<string>;
|
|
109
|
+
checkPayment(invoiceId: string): Promise<string>;
|
|
110
|
+
getDailyUsage(days?: number): Promise<string>;
|
|
111
|
+
getTopHosts(limit?: number): Promise<string>;
|
|
112
|
+
register(email: string, password: string): Promise<string>;
|
|
113
|
+
login(email: string, password: string): Promise<string>;
|
|
114
|
+
getAccountInfo(): Promise<string>;
|
|
115
|
+
verifyEmail(token: string): Promise<string>;
|
|
116
|
+
resendVerification(): Promise<string>;
|
|
117
|
+
updatePassword(currentPassword: string, newPassword: string): Promise<string>;
|
|
118
|
+
listKeys(): Promise<string>;
|
|
119
|
+
createKey(label?: string): Promise<string>;
|
|
120
|
+
revokeKey(keyId: string): Promise<string>;
|
|
121
|
+
getPlan(): Promise<string>;
|
|
122
|
+
listPlans(): Promise<string>;
|
|
123
|
+
changePlan(planId: string): Promise<string>;
|
|
124
|
+
teamDelete(teamId: string): Promise<string>;
|
|
125
|
+
teamRevokeKey(teamId: string, keyId: string): Promise<string>;
|
|
126
|
+
teamListKeys(teamId: string): Promise<string>;
|
|
127
|
+
teamListMembers(teamId: string): Promise<string>;
|
|
128
|
+
teamAddMember(teamId: string, email: string, role?: string): Promise<string>;
|
|
129
|
+
teamRemoveMember(teamId: string, userId: string): Promise<string>;
|
|
130
|
+
teamInviteMember(teamId: string, email: string, role?: string): Promise<string>;
|
|
131
|
+
teamListInvites(teamId: string): Promise<string>;
|
|
132
|
+
teamCancelInvite(teamId: string, inviteId: string): Promise<string>;
|
|
98
133
|
getTools(): DynamicStructuredTool[];
|
|
99
134
|
}
|
|
100
135
|
//# sourceMappingURL=toolkit.d.ts.map
|
package/dist/toolkit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolkit.d.ts","sourceRoot":"","sources":["../src/toolkit.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toolkit.d.ts","sourceRoot":"","sources":["../src/toolkit.ts"],"names":[],"mappings":"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"}
|