@dominusnode/pi-extension 1.2.0 → 1.5.2

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 CHANGED
@@ -3,6 +3,7 @@
3
3
  ## [1.0.0] - 2026-03-02
4
4
 
5
5
  ### Added
6
+
6
7
  - Initial release of `@dominusnode/pi-extension`
7
8
  - 26 tools covering the full Dominus Node feature suite:
8
9
  - Proxied fetch (HTTP/HTTPS via DC + residential pools with geo-targeting)
package/README.md CHANGED
@@ -15,6 +15,7 @@ npm install @dominusnode/pi-extension
15
15
  ```
16
16
 
17
17
  Declare in your project's `package.json`:
18
+
18
19
  ```json
19
20
  {
20
21
  "pi": {
@@ -26,6 +27,7 @@ Declare in your project's `package.json`:
26
27
  ### Manual Extension
27
28
 
28
29
  Copy or symlink the `dist/` folder into your Pi extensions directory:
30
+
29
31
  ```bash
30
32
  ~/.pi/agent/extensions/dominusnode/ # global
31
33
  .pi/extensions/dominusnode/ # project-local
@@ -41,61 +43,61 @@ Get your API key at [dominusnode.com](https://dominusnode.com) → Dashboard →
41
43
 
42
44
  ## Available Tools (53 total)
43
45
 
44
- | Tool | Description |
45
- |------|-------------|
46
- | `dominusnode_proxied_fetch` | Fetch a URL through rotating IPs (DC or residential) |
47
- | `dominusnode_check_balance` | Get wallet balance |
48
- | `dominusnode_check_usage` | Bandwidth usage stats |
49
- | `dominusnode_get_proxy_config` | Proxy endpoint details |
50
- | `dominusnode_list_sessions` | Active proxy sessions |
51
- | `dominusnode_create_agentic_wallet` | Create agent sub-wallet |
52
- | `dominusnode_fund_agentic_wallet` | Fund agent sub-wallet |
53
- | `dominusnode_check_agentic_balance` | Sub-wallet balance |
54
- | `dominusnode_list_agentic_wallets` | All sub-wallets |
55
- | `dominusnode_agentic_transactions` | Sub-wallet transaction history |
56
- | `dominusnode_freeze_agentic_wallet` | Freeze sub-wallet |
57
- | `dominusnode_unfreeze_agentic_wallet` | Unfreeze sub-wallet |
58
- | `dominusnode_delete_agentic_wallet` | Delete sub-wallet |
59
- | `dominusnode_create_team` | Create team with shared wallet |
60
- | `dominusnode_list_teams` | List teams |
61
- | `dominusnode_team_details` | Team details and balance |
62
- | `dominusnode_team_fund` | Fund team wallet |
63
- | `dominusnode_team_create_api_key` | Create team API key |
64
- | `dominusnode_team_usage` | Team bandwidth stats |
65
- | `dominusnode_update_team` | Update team settings |
66
- | `dominusnode_update_team_member_role` | Change member role |
67
- | `dominusnode_topup_paypal` | Top up via PayPal |
68
- | `dominusnode_topup_stripe` | Top up via Stripe |
69
- | `dominusnode_topup_crypto` | Top up via crypto (BTC/ETH/USDC/...) |
70
- | `dominusnode_x402_info` | x402 micropayment config |
71
- | `dominusnode_update_wallet_policy` | Set spending limits/domain restrictions |
72
- | `dominusnode_get_proxy_status` | Proxy gateway status and pool health |
73
- | `dominusnode_get_transactions` | Wallet transaction history |
74
- | `dominusnode_get_forecast` | Spending forecast and projected costs |
75
- | `dominusnode_check_payment` | Check crypto payment status by invoice ID |
76
- | `dominusnode_get_daily_usage` | Daily bandwidth usage breakdown |
77
- | `dominusnode_get_top_hosts` | Top hosts by bandwidth usage |
78
- | `dominusnode_register` | Register a new account |
79
- | `dominusnode_login` | Log in to an existing account |
80
- | `dominusnode_get_account_info` | Get account profile information |
81
- | `dominusnode_verify_email` | Verify email with token |
82
- | `dominusnode_resend_verification` | Resend email verification link |
83
- | `dominusnode_update_password` | Change account password |
84
- | `dominusnode_list_keys` | List personal API keys |
85
- | `dominusnode_create_key` | Create a new personal API key |
86
- | `dominusnode_revoke_key` | Revoke a personal API key |
87
- | `dominusnode_get_plan` | Get current subscription plan |
88
- | `dominusnode_list_plans` | List available plans |
89
- | `dominusnode_change_plan` | Change subscription plan |
90
- | `dominusnode_team_delete` | Delete a team |
91
- | `dominusnode_team_revoke_key` | Revoke a team API key |
92
- | `dominusnode_team_list_keys` | List team API keys |
93
- | `dominusnode_team_list_members` | List team members |
94
- | `dominusnode_team_add_member` | Add a member to a team |
95
- | `dominusnode_team_remove_member` | Remove a member from a team |
96
- | `dominusnode_team_invite_member` | Invite a user to a team by email |
97
- | `dominusnode_team_list_invites` | List pending team invitations |
98
- | `dominusnode_team_cancel_invite` | Cancel a pending team invitation |
46
+ | Tool | Description |
47
+ | ------------------------------------- | ---------------------------------------------------- |
48
+ | `dominusnode_proxied_fetch` | Fetch a URL through rotating IPs (DC or residential) |
49
+ | `dominusnode_check_balance` | Get wallet balance |
50
+ | `dominusnode_check_usage` | Bandwidth usage stats |
51
+ | `dominusnode_get_proxy_config` | Proxy endpoint details |
52
+ | `dominusnode_list_sessions` | Active proxy sessions |
53
+ | `dominusnode_create_agentic_wallet` | Create agent sub-wallet |
54
+ | `dominusnode_fund_agentic_wallet` | Fund agent sub-wallet |
55
+ | `dominusnode_check_agentic_balance` | Sub-wallet balance |
56
+ | `dominusnode_list_agentic_wallets` | All sub-wallets |
57
+ | `dominusnode_agentic_transactions` | Sub-wallet transaction history |
58
+ | `dominusnode_freeze_agentic_wallet` | Freeze sub-wallet |
59
+ | `dominusnode_unfreeze_agentic_wallet` | Unfreeze sub-wallet |
60
+ | `dominusnode_delete_agentic_wallet` | Delete sub-wallet |
61
+ | `dominusnode_create_team` | Create team with shared wallet |
62
+ | `dominusnode_list_teams` | List teams |
63
+ | `dominusnode_team_details` | Team details and balance |
64
+ | `dominusnode_team_fund` | Fund team wallet |
65
+ | `dominusnode_team_create_api_key` | Create team API key |
66
+ | `dominusnode_team_usage` | Team bandwidth stats |
67
+ | `dominusnode_update_team` | Update team settings |
68
+ | `dominusnode_update_team_member_role` | Change member role |
69
+ | `dominusnode_topup_paypal` | Top up via PayPal |
70
+ | `dominusnode_topup_stripe` | Top up via Stripe |
71
+ | `dominusnode_topup_crypto` | Top up via crypto (BTC/ETH/USDC/...) |
72
+ | `dominusnode_x402_info` | x402 micropayment config |
73
+ | `dominusnode_update_wallet_policy` | Set spending limits/domain restrictions |
74
+ | `dominusnode_get_proxy_status` | Proxy gateway status and pool health |
75
+ | `dominusnode_get_transactions` | Wallet transaction history |
76
+ | `dominusnode_get_forecast` | Spending forecast and projected costs |
77
+ | `dominusnode_check_payment` | Check crypto payment status by invoice ID |
78
+ | `dominusnode_get_daily_usage` | Daily bandwidth usage breakdown |
79
+ | `dominusnode_get_top_hosts` | Top hosts by bandwidth usage |
80
+ | `dominusnode_register` | Register a new account |
81
+ | `dominusnode_login` | Log in to an existing account |
82
+ | `dominusnode_get_account_info` | Get account profile information |
83
+ | `dominusnode_verify_email` | Verify email with token |
84
+ | `dominusnode_resend_verification` | Resend email verification link |
85
+ | `dominusnode_update_password` | Change account password |
86
+ | `dominusnode_list_keys` | List personal API keys |
87
+ | `dominusnode_create_key` | Create a new personal API key |
88
+ | `dominusnode_revoke_key` | Revoke a personal API key |
89
+ | `dominusnode_get_plan` | Get current subscription plan |
90
+ | `dominusnode_list_plans` | List available plans |
91
+ | `dominusnode_change_plan` | Change subscription plan |
92
+ | `dominusnode_team_delete` | Delete a team |
93
+ | `dominusnode_team_revoke_key` | Revoke a team API key |
94
+ | `dominusnode_team_list_keys` | List team API keys |
95
+ | `dominusnode_team_list_members` | List team members |
96
+ | `dominusnode_team_add_member` | Add a member to a team |
97
+ | `dominusnode_team_remove_member` | Remove a member from a team |
98
+ | `dominusnode_team_invite_member` | Invite a user to a team by email |
99
+ | `dominusnode_team_list_invites` | List pending team invitations |
100
+ | `dominusnode_team_cancel_invite` | Cancel a pending team invitation |
99
101
 
100
102
  ## Proxy Usage
101
103
 
@@ -135,9 +137,9 @@ Give each sub-agent its own wallet with a spending cap:
135
137
 
136
138
  ## Pricing
137
139
 
138
- | Pool | Price | Best for |
139
- |------|-------|----------|
140
- | Datacenter | $3.00/GB | Fast scraping, APIs, speed-sensitive tasks |
140
+ | Pool | Price | Best for |
141
+ | ----------- | -------- | -------------------------------------------- |
142
+ | Datacenter | $3.00/GB | Fast scraping, APIs, speed-sensitive tasks |
141
143
  | Residential | $5.00/GB | Bypassing geo-blocks, appearing as real user |
142
144
 
143
145
  ## License
package/dist/index.js CHANGED
@@ -49,14 +49,20 @@ function dominusNodeExtension(pi) {
49
49
  "Use for web scraping, bypassing geo-restrictions, or rotating IPs. " +
50
50
  "Only GET, HEAD, and OPTIONS are permitted. Private/internal URLs are blocked.",
51
51
  parameters: typebox_1.Type.Object({
52
- url: typebox_1.Type.String({ description: "Target URL to fetch (http or https only)" }),
53
- method: typebox_1.Type.Optional(typebox_1.Type.Union([
54
- typebox_1.Type.Literal("GET"), typebox_1.Type.Literal("HEAD"), typebox_1.Type.Literal("OPTIONS"),
55
- ], { description: "HTTP method (default: GET)" })),
56
- country: typebox_1.Type.Optional(typebox_1.Type.String({ description: "ISO 3166-1 two-letter country code for geo-targeting (e.g. US, GB, DE)" })),
52
+ url: typebox_1.Type.String({
53
+ description: "Target URL to fetch (http or https only)",
54
+ }),
55
+ method: typebox_1.Type.Optional(typebox_1.Type.Union([typebox_1.Type.Literal("GET"), typebox_1.Type.Literal("HEAD"), typebox_1.Type.Literal("OPTIONS")], { description: "HTTP method (default: GET)" })),
56
+ country: typebox_1.Type.Optional(typebox_1.Type.String({
57
+ description: "ISO 3166-1 two-letter country code for geo-targeting (e.g. US, GB, DE)",
58
+ })),
57
59
  proxyType: typebox_1.Type.Optional(typebox_1.Type.Union([
58
- typebox_1.Type.Literal("dc"), typebox_1.Type.Literal("residential"), typebox_1.Type.Literal("auto"),
59
- ], { description: "Proxy pool: 'dc' (datacenter, $3/GB), 'residential' ($5/GB), or 'auto' (default: dc)" })),
60
+ typebox_1.Type.Literal("dc"),
61
+ typebox_1.Type.Literal("residential"),
62
+ typebox_1.Type.Literal("auto"),
63
+ ], {
64
+ description: "Proxy pool: 'dc' (datacenter, $3/GB), 'residential' ($5/GB), or 'auto' (default: dc)",
65
+ })),
60
66
  }),
61
67
  async execute(_id, params, _signal, _onUpdate, _ctx) {
62
68
  return toolkit.proxiedFetch(String(params.url ?? ""), String(params.method ?? "GET"), params.country ? String(params.country) : undefined, String(params.proxyType ?? "dc"));
@@ -78,7 +84,11 @@ function dominusNodeExtension(pi) {
78
84
  label: "DominusNode: Check Bandwidth Usage",
79
85
  description: "Get bandwidth usage statistics for the past N days (1–365). Shows bytes consumed by datacenter and residential proxy pools.",
80
86
  parameters: typebox_1.Type.Object({
81
- days: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Number of days to look back (default: 30, max: 365)", minimum: 1, maximum: 365 })),
87
+ days: typebox_1.Type.Optional(typebox_1.Type.Number({
88
+ description: "Number of days to look back (default: 30, max: 365)",
89
+ minimum: 1,
90
+ maximum: 365,
91
+ })),
82
92
  }),
83
93
  async execute(_id, params, _signal, _onUpdate, _ctx) {
84
94
  return toolkit.checkUsage(params.days !== undefined ? Number(params.days) : 30);
@@ -111,11 +121,19 @@ function dominusNodeExtension(pi) {
111
121
  description: "Create a server-side sub-wallet for an AI agent with an optional per-transaction spending limit. " +
112
122
  "Useful for giving sub-agents controlled budgets. Wallets are funded from the main wallet.",
113
123
  parameters: typebox_1.Type.Object({
114
- label: typebox_1.Type.String({ description: "Human-readable name for this wallet (e.g. 'research-agent-1')" }),
115
- spendingLimitCents: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Maximum spend per transaction in cents (e.g. 500 = $5.00)", minimum: 1, maximum: 1000000 })),
124
+ label: typebox_1.Type.String({
125
+ description: "Human-readable name for this wallet (e.g. 'research-agent-1')",
126
+ }),
127
+ spendingLimitCents: typebox_1.Type.Optional(typebox_1.Type.Number({
128
+ description: "Maximum spend per transaction in cents (e.g. 500 = $5.00)",
129
+ minimum: 1,
130
+ maximum: 1000000,
131
+ })),
116
132
  }),
117
133
  async execute(_id, params, _signal, _onUpdate, _ctx) {
118
- return toolkit.createAgenticWallet(String(params.label ?? ""), params.spendingLimitCents !== undefined ? Number(params.spendingLimitCents) : undefined);
134
+ return toolkit.createAgenticWallet(String(params.label ?? ""), params.spendingLimitCents !== undefined
135
+ ? Number(params.spendingLimitCents)
136
+ : undefined);
119
137
  },
120
138
  });
121
139
  // ── Tool 7: fund_agentic_wallet ──────────────────────────────────────────
@@ -124,8 +142,13 @@ function dominusNodeExtension(pi) {
124
142
  label: "DominusNode: Fund Agentic Wallet",
125
143
  description: "Transfer funds from the main wallet to an agentic sub-wallet. Amount in cents (e.g. 1000 = $10.00).",
126
144
  parameters: typebox_1.Type.Object({
127
- walletId: typebox_1.Type.String({ description: "UUID of the agentic wallet to fund" }),
128
- amountCents: typebox_1.Type.Number({ description: "Amount to transfer in cents (e.g. 1000 = $10.00)", minimum: 1 }),
145
+ walletId: typebox_1.Type.String({
146
+ description: "UUID of the agentic wallet to fund",
147
+ }),
148
+ amountCents: typebox_1.Type.Number({
149
+ description: "Amount to transfer in cents (e.g. 1000 = $10.00)",
150
+ minimum: 1,
151
+ }),
129
152
  }),
130
153
  async execute(_id, params, _signal, _onUpdate, _ctx) {
131
154
  return toolkit.fundAgenticWallet(String(params.walletId ?? ""), Number(params.amountCents));
@@ -160,7 +183,11 @@ function dominusNodeExtension(pi) {
160
183
  description: "List recent transactions for an agentic sub-wallet.",
161
184
  parameters: typebox_1.Type.Object({
162
185
  walletId: typebox_1.Type.String({ description: "UUID of the agentic wallet" }),
163
- limit: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Number of transactions to return (default: 20, max: 100)", minimum: 1, maximum: 100 })),
186
+ limit: typebox_1.Type.Optional(typebox_1.Type.Number({
187
+ description: "Number of transactions to return (default: 20, max: 100)",
188
+ minimum: 1,
189
+ maximum: 100,
190
+ })),
164
191
  }),
165
192
  async execute(_id, params, _signal, _onUpdate, _ctx) {
166
193
  return toolkit.agenticTransactions(String(params.walletId ?? ""), params.limit !== undefined ? Number(params.limit) : 20);
@@ -172,7 +199,9 @@ function dominusNodeExtension(pi) {
172
199
  label: "DominusNode: Freeze Agentic Wallet",
173
200
  description: "Freeze an agentic sub-wallet to prevent further spending. The wallet must be unfrozen before it can be deleted.",
174
201
  parameters: typebox_1.Type.Object({
175
- walletId: typebox_1.Type.String({ description: "UUID of the agentic wallet to freeze" }),
202
+ walletId: typebox_1.Type.String({
203
+ description: "UUID of the agentic wallet to freeze",
204
+ }),
176
205
  }),
177
206
  async execute(_id, params, _signal, _onUpdate, _ctx) {
178
207
  return toolkit.freezeAgenticWallet(String(params.walletId ?? ""));
@@ -184,7 +213,9 @@ function dominusNodeExtension(pi) {
184
213
  label: "DominusNode: Unfreeze Agentic Wallet",
185
214
  description: "Unfreeze a previously frozen agentic sub-wallet to resume spending.",
186
215
  parameters: typebox_1.Type.Object({
187
- walletId: typebox_1.Type.String({ description: "UUID of the agentic wallet to unfreeze" }),
216
+ walletId: typebox_1.Type.String({
217
+ description: "UUID of the agentic wallet to unfreeze",
218
+ }),
188
219
  }),
189
220
  async execute(_id, params, _signal, _onUpdate, _ctx) {
190
221
  return toolkit.unfreezeAgenticWallet(String(params.walletId ?? ""));
@@ -196,7 +227,9 @@ function dominusNodeExtension(pi) {
196
227
  label: "DominusNode: Delete Agentic Wallet",
197
228
  description: "Permanently delete an agentic sub-wallet. Any remaining balance is returned to the main wallet. The wallet must be frozen first.",
198
229
  parameters: typebox_1.Type.Object({
199
- walletId: typebox_1.Type.String({ description: "UUID of the agentic wallet to delete (must be frozen first)" }),
230
+ walletId: typebox_1.Type.String({
231
+ description: "UUID of the agentic wallet to delete (must be frozen first)",
232
+ }),
200
233
  }),
201
234
  async execute(_id, params, _signal, _onUpdate, _ctx) {
202
235
  return toolkit.deleteAgenticWallet(String(params.walletId ?? ""));
@@ -209,7 +242,11 @@ function dominusNodeExtension(pi) {
209
242
  description: "Create a new team with a shared wallet. Teams allow multiple users or agents to share bandwidth and billing.",
210
243
  parameters: typebox_1.Type.Object({
211
244
  name: typebox_1.Type.String({ description: "Team name" }),
212
- maxMembers: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Maximum number of members (default: 10, max: 100)", minimum: 1, maximum: 100 })),
245
+ maxMembers: typebox_1.Type.Optional(typebox_1.Type.Number({
246
+ description: "Maximum number of members (default: 10, max: 100)",
247
+ minimum: 1,
248
+ maximum: 100,
249
+ })),
213
250
  }),
214
251
  async execute(_id, params, _signal, _onUpdate, _ctx) {
215
252
  return toolkit.createTeam(String(params.name ?? ""), params.maxMembers !== undefined ? Number(params.maxMembers) : 10);
@@ -221,7 +258,11 @@ function dominusNodeExtension(pi) {
221
258
  label: "DominusNode: List Teams",
222
259
  description: "List all teams the current account belongs to.",
223
260
  parameters: typebox_1.Type.Object({
224
- limit: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Number of teams to return (default: 20, max: 100)", minimum: 1, maximum: 100 })),
261
+ limit: typebox_1.Type.Optional(typebox_1.Type.Number({
262
+ description: "Number of teams to return (default: 20, max: 100)",
263
+ minimum: 1,
264
+ maximum: 100,
265
+ })),
225
266
  }),
226
267
  async execute(_id, params, _signal, _onUpdate, _ctx) {
227
268
  return toolkit.listTeams(params.limit !== undefined ? Number(params.limit) : 20);
@@ -246,7 +287,10 @@ function dominusNodeExtension(pi) {
246
287
  description: "Transfer funds from the main wallet to a team's shared wallet. Amount in cents.",
247
288
  parameters: typebox_1.Type.Object({
248
289
  teamId: typebox_1.Type.String({ description: "UUID of the team" }),
249
- amountCents: typebox_1.Type.Number({ description: "Amount to transfer in cents (e.g. 1000 = $10.00)", minimum: 1 }),
290
+ amountCents: typebox_1.Type.Number({
291
+ description: "Amount to transfer in cents (e.g. 1000 = $10.00)",
292
+ minimum: 1,
293
+ }),
250
294
  }),
251
295
  async execute(_id, params, _signal, _onUpdate, _ctx) {
252
296
  return toolkit.teamFund(String(params.teamId ?? ""), Number(params.amountCents));
@@ -259,7 +303,9 @@ function dominusNodeExtension(pi) {
259
303
  description: "Generate a new API key scoped to a team. Traffic through this key bills to the team wallet. The key is shown only once.",
260
304
  parameters: typebox_1.Type.Object({
261
305
  teamId: typebox_1.Type.String({ description: "UUID of the team" }),
262
- label: typebox_1.Type.String({ description: "Label for the API key (e.g. 'research-agent')" }),
306
+ label: typebox_1.Type.String({
307
+ description: "Label for the API key (e.g. 'research-agent')",
308
+ }),
263
309
  }),
264
310
  async execute(_id, params, _signal, _onUpdate, _ctx) {
265
311
  return toolkit.teamCreateApiKey(String(params.teamId ?? ""), String(params.label ?? ""));
@@ -272,7 +318,11 @@ function dominusNodeExtension(pi) {
272
318
  description: "Get bandwidth usage statistics for a team over the past N days.",
273
319
  parameters: typebox_1.Type.Object({
274
320
  teamId: typebox_1.Type.String({ description: "UUID of the team" }),
275
- days: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Number of days to look back (default: 30, max: 365)", minimum: 1, maximum: 365 })),
321
+ days: typebox_1.Type.Optional(typebox_1.Type.Number({
322
+ description: "Number of days to look back (default: 30, max: 365)",
323
+ minimum: 1,
324
+ maximum: 365,
325
+ })),
276
326
  }),
277
327
  async execute(_id, params, _signal, _onUpdate, _ctx) {
278
328
  return toolkit.teamUsage(String(params.teamId ?? ""), params.days !== undefined ? Number(params.days) : 30);
@@ -286,7 +336,11 @@ function dominusNodeExtension(pi) {
286
336
  parameters: typebox_1.Type.Object({
287
337
  teamId: typebox_1.Type.String({ description: "UUID of the team" }),
288
338
  name: typebox_1.Type.Optional(typebox_1.Type.String({ description: "New team name" })),
289
- maxMembers: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "New maximum member count (1–100)", minimum: 1, maximum: 100 })),
339
+ maxMembers: typebox_1.Type.Optional(typebox_1.Type.Number({
340
+ description: "New maximum member count (1–100)",
341
+ minimum: 1,
342
+ maximum: 100,
343
+ })),
290
344
  }),
291
345
  async execute(_id, params, _signal, _onUpdate, _ctx) {
292
346
  return toolkit.updateTeam(String(params.teamId ?? ""), params.name !== undefined ? String(params.name) : undefined, params.maxMembers !== undefined ? Number(params.maxMembers) : undefined);
@@ -300,7 +354,9 @@ function dominusNodeExtension(pi) {
300
354
  parameters: typebox_1.Type.Object({
301
355
  teamId: typebox_1.Type.String({ description: "UUID of the team" }),
302
356
  userId: typebox_1.Type.String({ description: "UUID of the user to update" }),
303
- role: typebox_1.Type.Union([typebox_1.Type.Literal("admin"), typebox_1.Type.Literal("member")], { description: "New role: 'admin' or 'member'" }),
357
+ role: typebox_1.Type.Union([typebox_1.Type.Literal("admin"), typebox_1.Type.Literal("member")], {
358
+ description: "New role: 'admin' or 'member'",
359
+ }),
304
360
  }),
305
361
  async execute(_id, params, _signal, _onUpdate, _ctx) {
306
362
  return toolkit.updateTeamMemberRole(String(params.teamId ?? ""), String(params.userId ?? ""), String(params.role ?? ""));
@@ -312,7 +368,11 @@ function dominusNodeExtension(pi) {
312
368
  label: "DominusNode: Top Up Wallet via PayPal",
313
369
  description: "Create a PayPal checkout session to add funds to the Dominus Node wallet. Returns a payment URL to redirect the user to.",
314
370
  parameters: typebox_1.Type.Object({
315
- amountCents: typebox_1.Type.Number({ description: "Amount to add in cents (min: 500 = $5.00, max: 1,000,000 = $10,000.00)", minimum: 500, maximum: 1000000 }),
371
+ amountCents: typebox_1.Type.Number({
372
+ description: "Amount to add in cents (min: 500 = $5.00, max: 1,000,000 = $10,000.00)",
373
+ minimum: 500,
374
+ maximum: 1000000,
375
+ }),
316
376
  }),
317
377
  async execute(_id, params, _signal, _onUpdate, _ctx) {
318
378
  return toolkit.topupPaypal(Number(params.amountCents));
@@ -324,7 +384,11 @@ function dominusNodeExtension(pi) {
324
384
  label: "DominusNode: Top Up Wallet via Stripe",
325
385
  description: "Create a Stripe checkout session to add funds to the Dominus Node wallet. Supports cards and Link. Returns a payment URL.",
326
386
  parameters: typebox_1.Type.Object({
327
- amountCents: typebox_1.Type.Number({ description: "Amount to add in cents (min: 500 = $5.00, max: 1,000,000 = $10,000.00)", minimum: 500, maximum: 1000000 }),
387
+ amountCents: typebox_1.Type.Number({
388
+ description: "Amount to add in cents (min: 500 = $5.00, max: 1,000,000 = $10,000.00)",
389
+ minimum: 500,
390
+ maximum: 1000000,
391
+ }),
328
392
  }),
329
393
  async execute(_id, params, _signal, _onUpdate, _ctx) {
330
394
  return toolkit.topupStripe(Number(params.amountCents));
@@ -338,8 +402,14 @@ function dominusNodeExtension(pi) {
338
402
  "Supported currencies: BTC, ETH, LTC, XMR, ZEC, USDC, SOL, USDT, DAI, BNB, LINK. " +
339
403
  "Returns a payment address and invoice details.",
340
404
  parameters: typebox_1.Type.Object({
341
- amountUsd: typebox_1.Type.Number({ description: "Amount in USD (min: $5, max: $10,000)", minimum: 5, maximum: 10000 }),
342
- currency: typebox_1.Type.String({ description: "Crypto currency code: BTC, ETH, LTC, XMR, ZEC, USDC, SOL, USDT, DAI, BNB, or LINK" }),
405
+ amountUsd: typebox_1.Type.Number({
406
+ description: "Amount in USD (min: $5, max: $10,000)",
407
+ minimum: 5,
408
+ maximum: 10000,
409
+ }),
410
+ currency: typebox_1.Type.String({
411
+ description: "Crypto currency code: BTC, ETH, LTC, XMR, ZEC, USDC, SOL, USDT, DAI, BNB, or LINK",
412
+ }),
343
413
  }),
344
414
  async execute(_id, params, _signal, _onUpdate, _ctx) {
345
415
  return toolkit.topupCrypto(Number(params.amountUsd), String(params.currency ?? ""));
@@ -363,11 +433,21 @@ function dominusNodeExtension(pi) {
363
433
  description: "Update spending policy for an agentic sub-wallet: set a daily spending limit or restrict it to allowed domains.",
364
434
  parameters: typebox_1.Type.Object({
365
435
  walletId: typebox_1.Type.String({ description: "UUID of the agentic wallet" }),
366
- dailyLimitCents: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Daily spending limit in cents (0 = no limit)", minimum: 0, maximum: 1000000 })),
367
- allowedDomains: typebox_1.Type.Optional(typebox_1.Type.Array(typebox_1.Type.String(), { description: "List of domains this wallet is permitted to make requests to (e.g. ['example.com', 'api.service.io'])" })),
436
+ dailyLimitCents: typebox_1.Type.Optional(typebox_1.Type.Number({
437
+ description: "Daily spending limit in cents (0 = no limit)",
438
+ minimum: 0,
439
+ maximum: 1000000,
440
+ })),
441
+ allowedDomains: typebox_1.Type.Optional(typebox_1.Type.Array(typebox_1.Type.String(), {
442
+ description: "List of domains this wallet is permitted to make requests to (e.g. ['example.com', 'api.service.io'])",
443
+ })),
368
444
  }),
369
445
  async execute(_id, params, _signal, _onUpdate, _ctx) {
370
- return toolkit.updateWalletPolicy(String(params.walletId ?? ""), params.dailyLimitCents !== undefined ? Number(params.dailyLimitCents) : undefined, params.allowedDomains !== undefined ? params.allowedDomains : undefined);
446
+ return toolkit.updateWalletPolicy(String(params.walletId ?? ""), params.dailyLimitCents !== undefined
447
+ ? Number(params.dailyLimitCents)
448
+ : undefined, params.allowedDomains !== undefined
449
+ ? params.allowedDomains
450
+ : undefined);
371
451
  },
372
452
  });
373
453
  // ── Tool 27: get_proxy_status ───────────────────────────────────────────
@@ -386,7 +466,11 @@ function dominusNodeExtension(pi) {
386
466
  label: "DominusNode: Get Wallet Transactions",
387
467
  description: "Get wallet transaction history showing top-ups, charges, and refunds.",
388
468
  parameters: typebox_1.Type.Object({
389
- limit: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Number of transactions to return (default: 20, max: 100)", minimum: 1, maximum: 100 })),
469
+ limit: typebox_1.Type.Optional(typebox_1.Type.Number({
470
+ description: "Number of transactions to return (default: 20, max: 100)",
471
+ minimum: 1,
472
+ maximum: 100,
473
+ })),
390
474
  }),
391
475
  async execute(_id, params, _signal, _onUpdate, _ctx) {
392
476
  return toolkit.getTransactions(params.limit !== undefined ? Number(params.limit) : 20);
@@ -410,7 +494,9 @@ function dominusNodeExtension(pi) {
410
494
  description: "Check the status of a crypto top-up payment by invoice ID. " +
411
495
  "Returns payment status (pending, confirming, completed, expired).",
412
496
  parameters: typebox_1.Type.Object({
413
- invoiceId: typebox_1.Type.String({ description: "Crypto invoice ID (UUID) returned from topup_crypto" }),
497
+ invoiceId: typebox_1.Type.String({
498
+ description: "Crypto invoice ID (UUID) returned from topup_crypto",
499
+ }),
414
500
  }),
415
501
  async execute(_id, params, _signal, _onUpdate, _ctx) {
416
502
  return toolkit.checkPayment(String(params.invoiceId ?? ""));
@@ -423,7 +509,11 @@ function dominusNodeExtension(pi) {
423
509
  description: "Get daily bandwidth usage breakdown for the specified number of days. " +
424
510
  "Returns per-day bytes transferred and cost.",
425
511
  parameters: typebox_1.Type.Object({
426
- days: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Number of days to look back (default: 7, max: 365)", minimum: 1, maximum: 365 })),
512
+ days: typebox_1.Type.Optional(typebox_1.Type.Number({
513
+ description: "Number of days to look back (default: 7, max: 365)",
514
+ minimum: 1,
515
+ maximum: 365,
516
+ })),
427
517
  }),
428
518
  async execute(_id, params, _signal, _onUpdate, _ctx) {
429
519
  return toolkit.getDailyUsage(params.days !== undefined ? Number(params.days) : 7);
@@ -435,7 +525,11 @@ function dominusNodeExtension(pi) {
435
525
  label: "DominusNode: Get Top Hosts by Usage",
436
526
  description: "Get the top hosts by bandwidth usage. Shows which domains consume the most proxy traffic.",
437
527
  parameters: typebox_1.Type.Object({
438
- limit: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Number of top hosts to return (default: 10, max: 100)", minimum: 1, maximum: 100 })),
528
+ limit: typebox_1.Type.Optional(typebox_1.Type.Number({
529
+ description: "Number of top hosts to return (default: 10, max: 100)",
530
+ minimum: 1,
531
+ maximum: 100,
532
+ })),
439
533
  }),
440
534
  async execute(_id, params, _signal, _onUpdate, _ctx) {
441
535
  return toolkit.getTopHosts(params.limit !== undefined ? Number(params.limit) : 10);
@@ -486,7 +580,9 @@ function dominusNodeExtension(pi) {
486
580
  description: "Verify an email address using the verification token sent to the user's email. " +
487
581
  "Does not require authentication.",
488
582
  parameters: typebox_1.Type.Object({
489
- token: typebox_1.Type.String({ description: "Email verification token from the verification email" }),
583
+ token: typebox_1.Type.String({
584
+ description: "Email verification token from the verification email",
585
+ }),
490
586
  }),
491
587
  async execute(_id, params, _signal, _onUpdate, _ctx) {
492
588
  return toolkit.verifyEmail(String(params.token ?? ""));
@@ -509,7 +605,9 @@ function dominusNodeExtension(pi) {
509
605
  description: "Change your account password. Requires current password for verification.",
510
606
  parameters: typebox_1.Type.Object({
511
607
  currentPassword: typebox_1.Type.String({ description: "Current account password" }),
512
- newPassword: typebox_1.Type.String({ description: "New password (8-128 characters)" }),
608
+ newPassword: typebox_1.Type.String({
609
+ description: "New password (8-128 characters)",
610
+ }),
513
611
  }),
514
612
  async execute(_id, params, _signal, _onUpdate, _ctx) {
515
613
  return toolkit.updatePassword(String(params.currentPassword ?? ""), String(params.newPassword ?? ""));
@@ -532,7 +630,9 @@ function dominusNodeExtension(pi) {
532
630
  description: "Create a new personal API key. The key is shown only once -- save it immediately. " +
533
631
  "Usage is billed against your personal wallet.",
534
632
  parameters: typebox_1.Type.Object({
535
- label: typebox_1.Type.String({ description: "Label for the API key (e.g. 'production', 'dev-testing')" }),
633
+ label: typebox_1.Type.String({
634
+ description: "Label for the API key (e.g. 'production', 'dev-testing')",
635
+ }),
536
636
  }),
537
637
  async execute(_id, params, _signal, _onUpdate, _ctx) {
538
638
  return toolkit.createKey(String(params.label ?? ""));
@@ -643,7 +743,9 @@ function dominusNodeExtension(pi) {
643
743
  parameters: typebox_1.Type.Object({
644
744
  teamId: typebox_1.Type.String({ description: "Team ID (UUID)" }),
645
745
  userId: typebox_1.Type.String({ description: "User ID (UUID) of the user to add" }),
646
- role: typebox_1.Type.Optional(typebox_1.Type.Union([typebox_1.Type.Literal("member"), typebox_1.Type.Literal("admin")], { description: "Role for the new member (default: 'member')" })),
746
+ role: typebox_1.Type.Optional(typebox_1.Type.Union([typebox_1.Type.Literal("member"), typebox_1.Type.Literal("admin")], {
747
+ description: "Role for the new member (default: 'member')",
748
+ })),
647
749
  }),
648
750
  async execute(_id, params, _signal, _onUpdate, _ctx) {
649
751
  return toolkit.teamAddMember(String(params.teamId ?? ""), String(params.userId ?? ""), params.role !== undefined ? String(params.role) : "member");
@@ -656,7 +758,9 @@ function dominusNodeExtension(pi) {
656
758
  description: "Remove a member from a team. Only owners and admins can remove members.",
657
759
  parameters: typebox_1.Type.Object({
658
760
  teamId: typebox_1.Type.String({ description: "Team ID (UUID)" }),
659
- userId: typebox_1.Type.String({ description: "User ID (UUID) of the member to remove" }),
761
+ userId: typebox_1.Type.String({
762
+ description: "User ID (UUID) of the member to remove",
763
+ }),
660
764
  }),
661
765
  async execute(_id, params, _signal, _onUpdate, _ctx) {
662
766
  return toolkit.teamRemoveMember(String(params.teamId ?? ""), String(params.userId ?? ""));
@@ -669,8 +773,12 @@ function dominusNodeExtension(pi) {
669
773
  description: "Invite a user to join a team by email address. The user will receive an invitation email.",
670
774
  parameters: typebox_1.Type.Object({
671
775
  teamId: typebox_1.Type.String({ description: "Team ID (UUID)" }),
672
- email: typebox_1.Type.String({ description: "Email address of the user to invite" }),
673
- role: typebox_1.Type.Optional(typebox_1.Type.Union([typebox_1.Type.Literal("member"), typebox_1.Type.Literal("admin")], { description: "Role for the invited member (default: 'member')" })),
776
+ email: typebox_1.Type.String({
777
+ description: "Email address of the user to invite",
778
+ }),
779
+ role: typebox_1.Type.Optional(typebox_1.Type.Union([typebox_1.Type.Literal("member"), typebox_1.Type.Literal("admin")], {
780
+ description: "Role for the invited member (default: 'member')",
781
+ })),
674
782
  }),
675
783
  async execute(_id, params, _signal, _onUpdate, _ctx) {
676
784
  return toolkit.teamInviteMember(String(params.teamId ?? ""), String(params.email ?? ""), params.role !== undefined ? String(params.role) : "member");
package/dist/toolkit.d.ts CHANGED
@@ -64,6 +64,8 @@ export declare class DominusNodeToolkit {
64
64
  private tokenExpiresAt;
65
65
  private _authPromise;
66
66
  constructor(options?: DominusNodeToolkitOptions);
67
+ private static _countLeadingZeroBits;
68
+ private _solvePoW;
67
69
  private _authenticate;
68
70
  private _ensureAuth;
69
71
  private _apiRequest;
@@ -125,4 +127,8 @@ export declare class DominusNodeToolkit {
125
127
  teamInviteMember(teamId: string, email: string, role?: string): Promise<PiToolResult>;
126
128
  teamListInvites(teamId: string): Promise<PiToolResult>;
127
129
  teamCancelInvite(teamId: string, inviteId: string): Promise<PiToolResult>;
130
+ mppInfo(): Promise<PiToolResult>;
131
+ payMpp(amountCents: number, method: string): Promise<PiToolResult>;
132
+ mppSessionOpen(maxDepositCents: number, method: string, poolType?: string): Promise<PiToolResult>;
133
+ mppSessionClose(channelId: string): Promise<PiToolResult>;
128
134
  }