payment-skill 1.0.1 → 1.1.1

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.
@@ -77,13 +77,108 @@ class PaymentSkillServer {
77
77
  config_1.configManager.deactivateEmergencyStop();
78
78
  res.json({ success: true, message: 'Emergency stop deactivated' });
79
79
  });
80
- // Get limits
80
+ // Get all limits and controls
81
81
  this.app.get('/api/limits', (req, res) => {
82
82
  res.json({
83
83
  limits: config_1.configManager.getLimits(),
84
- timeWindow: config_1.configManager.getTimeWindow()
84
+ timeWindow: config_1.configManager.getTimeWindow(),
85
+ cumulativeBudgets: config_1.configManager.getCumulativeBudgets(),
86
+ domainControls: config_1.configManager.getDomainControls(),
87
+ geographyControls: config_1.configManager.getGeographyControls(),
88
+ categoryControls: config_1.configManager.getCategoryControls()
85
89
  });
86
90
  });
91
+ // Update basic limits
92
+ this.app.post('/api/limits', (req, res) => {
93
+ const { perTransaction, daily, weekly, monthly, maxTransactionsPerHour } = req.body;
94
+ config_1.configManager.setLimits({ perTransaction, daily, weekly, monthly, maxTransactionsPerHour });
95
+ res.json({ success: true, message: 'Limits updated' });
96
+ });
97
+ // Cumulative Budgets
98
+ this.app.get('/api/limits/budgets', (req, res) => {
99
+ res.json(config_1.configManager.getCumulativeBudgets());
100
+ });
101
+ this.app.post('/api/limits/budgets', (req, res) => {
102
+ config_1.configManager.addCumulativeBudget(req.body);
103
+ res.json({ success: true, message: 'Budget added' });
104
+ });
105
+ this.app.delete('/api/limits/budgets/:index', (req, res) => {
106
+ config_1.configManager.removeCumulativeBudget(parseInt(req.params.index));
107
+ res.json({ success: true, message: 'Budget removed' });
108
+ });
109
+ // Domain Controls
110
+ this.app.get('/api/limits/domains', (req, res) => {
111
+ res.json(config_1.configManager.getDomainControls());
112
+ });
113
+ this.app.post('/api/limits/domains', (req, res) => {
114
+ const { mode, domain } = req.body;
115
+ if (mode) {
116
+ const controls = config_1.configManager.getDomainControls();
117
+ controls.mode = mode;
118
+ config_1.configManager.setDomainControls(controls);
119
+ }
120
+ if (domain) {
121
+ config_1.configManager.addDomain(domain);
122
+ }
123
+ res.json({ success: true, message: 'Domain controls updated' });
124
+ });
125
+ this.app.delete('/api/limits/domains/:domain', (req, res) => {
126
+ config_1.configManager.removeDomain(req.params.domain);
127
+ res.json({ success: true, message: 'Domain removed' });
128
+ });
129
+ // Time Window
130
+ this.app.get('/api/limits/time-window', (req, res) => {
131
+ res.json(config_1.configManager.getTimeWindow());
132
+ });
133
+ this.app.post('/api/limits/time-window', (req, res) => {
134
+ config_1.configManager.setTimeWindow(req.body);
135
+ res.json({ success: true, message: 'Time window updated' });
136
+ });
137
+ // Geography Controls
138
+ this.app.get('/api/limits/geo', (req, res) => {
139
+ res.json(config_1.configManager.getGeographyControls());
140
+ });
141
+ this.app.post('/api/limits/geo', (req, res) => {
142
+ const { enabled, mode, country } = req.body;
143
+ const controls = config_1.configManager.getGeographyControls();
144
+ if (enabled !== undefined)
145
+ controls.enabled = enabled;
146
+ if (mode)
147
+ controls.mode = mode;
148
+ if (country) {
149
+ if (!controls.countries.includes(country)) {
150
+ controls.countries.push(country);
151
+ }
152
+ }
153
+ config_1.configManager.setGeographyControls(controls);
154
+ res.json({ success: true, message: 'Geography controls updated' });
155
+ });
156
+ this.app.delete('/api/limits/geo/:country', (req, res) => {
157
+ const controls = config_1.configManager.getGeographyControls();
158
+ controls.countries = controls.countries.filter((c) => c !== req.params.country);
159
+ config_1.configManager.setGeographyControls(controls);
160
+ res.json({ success: true, message: 'Country removed' });
161
+ });
162
+ // Category Controls
163
+ this.app.get('/api/limits/categories', (req, res) => {
164
+ res.json(config_1.configManager.getCategoryControls());
165
+ });
166
+ this.app.post('/api/limits/categories/block', (req, res) => {
167
+ config_1.configManager.addBlockedCategory(req.body.category);
168
+ res.json({ success: true, message: 'Category blocked' });
169
+ });
170
+ this.app.post('/api/limits/categories/unblock', (req, res) => {
171
+ config_1.configManager.removeBlockedCategory(req.body.category);
172
+ res.json({ success: true, message: 'Category unblocked' });
173
+ });
174
+ this.app.post('/api/limits/categories/allow', (req, res) => {
175
+ config_1.configManager.addAllowedCategory(req.body.category);
176
+ res.json({ success: true, message: 'Category added to allowed list' });
177
+ });
178
+ this.app.post('/api/limits/categories/disallow', (req, res) => {
179
+ config_1.configManager.removeAllowedCategory(req.body.category);
180
+ res.json({ success: true, message: 'Category removed from allowed list' });
181
+ });
87
182
  // Webhook endpoints
88
183
  this.app.post('/webhooks/wise', (req, res) => {
89
184
  console.log('Wise webhook received:', req.body);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
@@ -106,6 +106,32 @@ export interface TimeWindowConfig {
106
106
  timezone: string;
107
107
  blockedDays?: string[];
108
108
  }
109
+ export interface CumulativeBudget {
110
+ enabled: boolean;
111
+ amount: number;
112
+ period: 'daily' | 'weekly' | 'monthly';
113
+ resetDay?: number;
114
+ resetDayOfWeek?: number;
115
+ }
116
+ export interface DomainControl {
117
+ mode: 'whitelist' | 'blacklist';
118
+ domains: string[];
119
+ }
120
+ export interface GeographyControl {
121
+ enabled: boolean;
122
+ mode: 'allow' | 'block';
123
+ countries: string[];
124
+ }
125
+ export interface CategoryControl {
126
+ blockedCategories: string[];
127
+ allowedCategories?: string[];
128
+ }
129
+ export interface AdvancedLimits {
130
+ cumulativeBudgets: CumulativeBudget[];
131
+ domainControls: DomainControl;
132
+ geographyControls: GeographyControl;
133
+ categoryControls: CategoryControl;
134
+ }
109
135
  export interface EmergencyStopState {
110
136
  active: boolean;
111
137
  activatedAt?: Date;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payment-skill",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "Self-hosted payment orchestration app for OpenClaw - pay from your bank account to merchants via API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,5 +1,13 @@
1
1
  /**
2
2
  * Payment Skill - Limit Commands
3
+ *
4
+ * Manage payment limits and controls including:
5
+ * - Account Limits (per transaction, daily, weekly, monthly)
6
+ * - Cumulative Budgets (rolling budgets with auto-reset)
7
+ * - Domain Controls (whitelist/blacklist merchant domains)
8
+ * - Time Window Controls
9
+ * - Geography Controls (allow/block by country)
10
+ * - Category Controls (block/allow spending categories)
3
11
  */
4
12
 
5
13
  import { Command } from 'commander';
@@ -9,22 +17,55 @@ import { configManager } from '../core/config';
9
17
  export const limitCommands = new Command('limits')
10
18
  .description('Manage payment limits and controls');
11
19
 
20
+ // Account Limits
12
21
  limitCommands
13
22
  .command('get')
14
- .description('Get current limits')
23
+ .description('Get all limits and controls')
15
24
  .action(() => {
25
+ console.log(chalk.blue('=== ACCOUNT LIMITS ==='));
16
26
  const limits = configManager.getLimits();
17
- console.log(chalk.blue('Current Limits:'));
18
27
  console.log(` Per Transaction: ${limits.perTransaction}`);
19
28
  console.log(` Daily: ${limits.daily}`);
20
29
  console.log(` Weekly: ${limits.weekly}`);
21
30
  console.log(` Monthly: ${limits.monthly}`);
22
31
  console.log(` Max per Hour: ${limits.maxTransactionsPerHour}`);
32
+
33
+ console.log(chalk.blue('\n=== CUMULATIVE BUDGETS ==='));
34
+ const budgets = configManager.getCumulativeBudgets();
35
+ if (budgets.length === 0) {
36
+ console.log(' No budgets configured');
37
+ } else {
38
+ budgets.forEach((b, i) => {
39
+ console.log(` ${i + 1}. ${b.amount} ${b.currency || ''} per ${b.period}`);
40
+ });
41
+ }
42
+
43
+ console.log(chalk.blue('\n=== DOMAIN CONTROLS ==='));
44
+ const domainControls = configManager.getDomainControls();
45
+ console.log(` Mode: ${domainControls.mode}`);
46
+ console.log(` Domains: ${domainControls.domains.length > 0 ? domainControls.domains.join(', ') : 'None'}`);
47
+
48
+ console.log(chalk.blue('\n=== TIME WINDOW ==='));
49
+ const tw = configManager.getTimeWindow();
50
+ console.log(` Enabled: ${tw.enabled ? 'Yes' : 'No'}`);
51
+ console.log(` Hours: ${tw.start} - ${tw.end}`);
52
+ console.log(` Timezone: ${tw.timezone}`);
53
+
54
+ console.log(chalk.blue('\n=== GEOGRAPHY CONTROLS ==='));
55
+ const geoControls = configManager.getGeographyControls();
56
+ console.log(` Enabled: ${geoControls.enabled ? 'Yes' : 'No'}`);
57
+ console.log(` Mode: ${geoControls.mode}`);
58
+ console.log(` Countries: ${geoControls.countries.length > 0 ? geoControls.countries.join(', ') : 'None'}`);
59
+
60
+ console.log(chalk.blue('\n=== CATEGORY CONTROLS ==='));
61
+ const catControls = configManager.getCategoryControls();
62
+ console.log(` Blocked: ${catControls.blockedCategories.join(', ') || 'None'}`);
63
+ console.log(` Allowed (whitelist): ${catControls.allowedCategories?.join(', ') || 'None (all except blocked)'}`);
23
64
  });
24
65
 
25
66
  limitCommands
26
67
  .command('set')
27
- .description('Set limits')
68
+ .description('Set basic account limits')
28
69
  .option('--per-transaction <amount>', 'Per transaction limit')
29
70
  .option('--daily <amount>', 'Daily limit')
30
71
  .option('--weekly <amount>', 'Weekly limit')
@@ -39,9 +80,114 @@ limitCommands
39
80
  if (options.maxPerHour) limits.maxTransactionsPerHour = parseInt(options.maxPerHour);
40
81
 
41
82
  configManager.setLimits(limits);
42
- console.log(chalk.green('✓ Limits updated'));
83
+ console.log(chalk.green('✓ Account limits updated'));
43
84
  });
44
85
 
86
+ // Cumulative Budgets
87
+ const budgetCommands = new Command('budget')
88
+ .description('Cumulative budget management');
89
+
90
+ budgetCommands
91
+ .command('add')
92
+ .description('Add a cumulative budget')
93
+ .requiredOption('--amount <amount>', 'Budget amount')
94
+ .option('--currency <currency>', 'Currency', 'EUR')
95
+ .requiredOption('--period <period>', 'Period: daily, weekly, monthly')
96
+ .option('--reset-day <day>', 'For monthly: day of month (1-31)')
97
+ .option('--reset-day-of-week <day>', 'For weekly: day of week (0=Sun, 6=Sat)')
98
+ .action((options) => {
99
+ const budget = {
100
+ enabled: true,
101
+ amount: parseFloat(options.amount),
102
+ currency: options.currency,
103
+ period: options.period,
104
+ resetDay: options.resetDay ? parseInt(options.resetDay) : undefined,
105
+ resetDayOfWeek: options.resetDayOfWeek ? parseInt(options.resetDayOfWeek) : undefined
106
+ };
107
+ configManager.addCumulativeBudget(budget);
108
+ console.log(chalk.green(`✓ Budget added: ${budget.amount} ${budget.currency} per ${budget.period}`));
109
+ });
110
+
111
+ budgetCommands
112
+ .command('list')
113
+ .description('List all budgets')
114
+ .action(() => {
115
+ const budgets = configManager.getCumulativeBudgets();
116
+ if (budgets.length === 0) {
117
+ console.log(chalk.yellow('No budgets configured'));
118
+ } else {
119
+ console.log(chalk.blue('Cumulative Budgets:'));
120
+ budgets.forEach((b, i) => {
121
+ console.log(` ${i}. ${b.amount} ${b.currency || ''} per ${b.period} ${b.enabled ? '' : '(disabled)'}`);
122
+ });
123
+ }
124
+ });
125
+
126
+ budgetCommands
127
+ .command('remove')
128
+ .description('Remove a budget')
129
+ .argument('<index>', 'Budget index')
130
+ .action((index) => {
131
+ configManager.removeCumulativeBudget(parseInt(index));
132
+ console.log(chalk.green('✓ Budget removed'));
133
+ });
134
+
135
+ limitCommands.addCommand(budgetCommands);
136
+
137
+ // Domain Controls
138
+ const domainCommands = new Command('domain')
139
+ .description('Domain controls (whitelist/blacklist merchant domains)');
140
+
141
+ domainCommands
142
+ .command('set-mode')
143
+ .description('Set domain control mode')
144
+ .argument('<mode>', 'Mode: whitelist or blacklist')
145
+ .action((mode) => {
146
+ if (mode !== 'whitelist' && mode !== 'blacklist') {
147
+ console.log(chalk.red('Mode must be "whitelist" or "blacklist"'));
148
+ return;
149
+ }
150
+ const controls = configManager.getDomainControls();
151
+ controls.mode = mode;
152
+ configManager.setDomainControls(controls);
153
+ console.log(chalk.green(`✓ Domain control mode set to: ${mode}`));
154
+ });
155
+
156
+ domainCommands
157
+ .command('add')
158
+ .description('Add a domain to the list')
159
+ .argument('<domain>', 'Domain (e.g., example.com)')
160
+ .action((domain) => {
161
+ configManager.addDomain(domain);
162
+ console.log(chalk.green(`✓ Domain added: ${domain}`));
163
+ });
164
+
165
+ domainCommands
166
+ .command('remove')
167
+ .description('Remove a domain from the list')
168
+ .argument('<domain>', 'Domain to remove')
169
+ .action((domain) => {
170
+ configManager.removeDomain(domain);
171
+ console.log(chalk.green(`✓ Domain removed: ${domain}`));
172
+ });
173
+
174
+ domainCommands
175
+ .command('list')
176
+ .description('List all domains')
177
+ .action(() => {
178
+ const controls = configManager.getDomainControls();
179
+ console.log(chalk.blue(`Mode: ${controls.mode}`));
180
+ console.log(chalk.blue('Domains:'));
181
+ if (controls.domains.length === 0) {
182
+ console.log(' None');
183
+ } else {
184
+ controls.domains.forEach((d: string) => console.log(` - ${d}`));
185
+ }
186
+ });
187
+
188
+ limitCommands.addCommand(domainCommands);
189
+
190
+ // Time Window Controls
45
191
  const timeWindowCommands = new Command('time-window')
46
192
  .description('Time window controls');
47
193
 
@@ -51,7 +197,7 @@ timeWindowCommands
51
197
  .action(() => {
52
198
  const tw = configManager.getTimeWindow();
53
199
  console.log(chalk.blue('Time Window:'));
54
- console.log(` Enabled: ${tw.enabled}`);
200
+ console.log(` Enabled: ${tw.enabled ? 'Yes' : 'No'}`);
55
201
  console.log(` Start: ${tw.start}`);
56
202
  console.log(` End: ${tw.end}`);
57
203
  console.log(` Timezone: ${tw.timezone}`);
@@ -62,7 +208,7 @@ timeWindowCommands
62
208
  .description('Set time window')
63
209
  .option('--start <time>', 'Start time (HH:MM)')
64
210
  .option('--end <time>', 'End time (HH:MM)')
65
- .option('--timezone <tz>', 'Timezone')
211
+ .option('--timezone <tz>', 'Timezone (e.g., Europe/Bucharest)')
66
212
  .action((options) => {
67
213
  const tw: any = {};
68
214
  if (options.start) tw.start = options.start;
@@ -91,36 +237,145 @@ timeWindowCommands
91
237
 
92
238
  limitCommands.addCommand(timeWindowCommands);
93
239
 
94
- limitCommands
95
- .command('block')
96
- .description('Block a merchant')
97
- .argument('<merchant-id>', 'Merchant ID')
98
- .action((merchantId) => {
99
- console.log(chalk.yellow(`Merchant blocking not yet implemented for ${merchantId}`));
240
+ // Geography Controls
241
+ const geoCommands = new Command('geo')
242
+ .description('Geography controls (allow/block by country)');
243
+
244
+ geoCommands
245
+ .command('enable')
246
+ .description('Enable geography controls')
247
+ .action(() => {
248
+ const controls = configManager.getGeographyControls();
249
+ controls.enabled = true;
250
+ configManager.setGeographyControls(controls);
251
+ console.log(chalk.green('✓ Geography controls enabled'));
100
252
  });
101
253
 
102
- limitCommands
103
- .command('unblock')
104
- .description('Unblock a merchant')
105
- .argument('<merchant-id>', 'Merchant ID')
106
- .action((merchantId) => {
107
- console.log(chalk.yellow(`Merchant unblocking not yet implemented for ${merchantId}`));
254
+ geoCommands
255
+ .command('disable')
256
+ .description('Disable geography controls')
257
+ .action(() => {
258
+ const controls = configManager.getGeographyControls();
259
+ controls.enabled = false;
260
+ configManager.setGeographyControls(controls);
261
+ console.log(chalk.green('✓ Geography controls disabled'));
108
262
  });
109
263
 
110
- limitCommands
111
- .command('block-category')
264
+ geoCommands
265
+ .command('set-mode')
266
+ .description('Set geography mode')
267
+ .argument('<mode>', 'Mode: allow or block')
268
+ .action((mode) => {
269
+ if (mode !== 'allow' && mode !== 'block') {
270
+ console.log(chalk.red('Mode must be "allow" or "block"'));
271
+ return;
272
+ }
273
+ const controls = configManager.getGeographyControls();
274
+ controls.mode = mode;
275
+ configManager.setGeographyControls(controls);
276
+ console.log(chalk.green(`✓ Geography mode set to: ${mode}`));
277
+ });
278
+
279
+ geoCommands
280
+ .command('add')
281
+ .description('Add a country (ISO code)')
282
+ .argument('<country>', 'Country code (e.g., US, DE, RO)')
283
+ .action((country) => {
284
+ const controls = configManager.getGeographyControls();
285
+ if (!controls.countries.includes(country.toUpperCase())) {
286
+ controls.countries.push(country.toUpperCase());
287
+ configManager.setGeographyControls(controls);
288
+ console.log(chalk.green(`✓ Country added: ${country.toUpperCase()}`));
289
+ } else {
290
+ console.log(chalk.yellow('Country already in list'));
291
+ }
292
+ });
293
+
294
+ geoCommands
295
+ .command('remove')
296
+ .description('Remove a country')
297
+ .argument('<country>', 'Country code to remove')
298
+ .action((country) => {
299
+ const controls = configManager.getGeographyControls();
300
+ controls.countries = controls.countries.filter((c: string) => c !== country.toUpperCase());
301
+ configManager.setGeographyControls(controls);
302
+ console.log(chalk.green(`✓ Country removed: ${country.toUpperCase()}`));
303
+ });
304
+
305
+ geoCommands
306
+ .command('list')
307
+ .description('List all countries')
308
+ .action(() => {
309
+ const controls = configManager.getGeographyControls();
310
+ console.log(chalk.blue(`Enabled: ${controls.enabled ? 'Yes' : 'No'}`));
311
+ console.log(chalk.blue(`Mode: ${controls.mode}`));
312
+ console.log(chalk.blue('Countries:'));
313
+ if (controls.countries.length === 0) {
314
+ console.log(' None');
315
+ } else {
316
+ controls.countries.forEach((c: string) => console.log(` - ${c}`));
317
+ }
318
+ });
319
+
320
+ limitCommands.addCommand(geoCommands);
321
+
322
+ // Category Controls
323
+ const categoryCommands = new Command('category')
324
+ .description('Category controls (block/allow spending categories)');
325
+
326
+ categoryCommands
327
+ .command('block')
112
328
  .description('Block a category')
113
329
  .argument('<category>', 'Category name')
114
330
  .action((category) => {
115
331
  configManager.addBlockedCategory(category);
116
- console.log(chalk.green(`✓ Category '${category}' blocked`));
332
+ console.log(chalk.green(`✓ Category blocked: ${category}`));
117
333
  });
118
334
 
119
- limitCommands
120
- .command('unblock-category')
335
+ categoryCommands
336
+ .command('unblock')
121
337
  .description('Unblock a category')
122
338
  .argument('<category>', 'Category name')
123
339
  .action((category) => {
124
340
  configManager.removeBlockedCategory(category);
125
- console.log(chalk.green(`✓ Category '${category}' unblocked`));
126
- });
341
+ console.log(chalk.green(`✓ Category unblocked: ${category}`));
342
+ });
343
+
344
+ categoryCommands
345
+ .command('allow')
346
+ .description('Add to allowed categories (whitelist mode)')
347
+ .argument('<category>', 'Category name')
348
+ .action((category) => {
349
+ configManager.addAllowedCategory(category);
350
+ console.log(chalk.green(`✓ Category added to allowed list: ${category}`));
351
+ });
352
+
353
+ categoryCommands
354
+ .command('disallow')
355
+ .description('Remove from allowed categories')
356
+ .argument('<category>', 'Category name')
357
+ .action((category) => {
358
+ configManager.removeAllowedCategory(category);
359
+ console.log(chalk.green(`✓ Category removed from allowed list: ${category}`));
360
+ });
361
+
362
+ categoryCommands
363
+ .command('list')
364
+ .description('List category controls')
365
+ .action(() => {
366
+ const controls = configManager.getCategoryControls();
367
+ console.log(chalk.blue('Blocked Categories:'));
368
+ if (controls.blockedCategories.length === 0) {
369
+ console.log(' None');
370
+ } else {
371
+ controls.blockedCategories.forEach((c: string) => console.log(` - ${c}`));
372
+ }
373
+ console.log(chalk.blue('\nAllowed Categories (whitelist):'));
374
+ if (!controls.allowedCategories || controls.allowedCategories.length === 0) {
375
+ console.log(' None (all categories allowed except blocked)');
376
+ } else {
377
+ controls.allowedCategories.forEach((c: string) => console.log(` - ${c}`));
378
+ }
379
+ });
380
+
381
+ limitCommands.addCommand(categoryCommands);