payment-skill 1.0.0 → 1.1.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.
@@ -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
  import { Command } from 'commander';
5
13
  export declare const limitCommands: Command;
@@ -1 +1 @@
1
- {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/commands/limits.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAC0B,CAAC"}
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/commands/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAC0B,CAAC"}
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Payment Skill - Limit Commands
4
+ *
5
+ * Manage payment limits and controls including:
6
+ * - Account Limits (per transaction, daily, weekly, monthly)
7
+ * - Cumulative Budgets (rolling budgets with auto-reset)
8
+ * - Domain Controls (whitelist/blacklist merchant domains)
9
+ * - Time Window Controls
10
+ * - Geography Controls (allow/block by country)
11
+ * - Category Controls (block/allow spending categories)
4
12
  */
5
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
6
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -12,21 +20,50 @@ const chalk_1 = __importDefault(require("chalk"));
12
20
  const config_1 = require("../core/config");
13
21
  exports.limitCommands = new commander_1.Command('limits')
14
22
  .description('Manage payment limits and controls');
23
+ // Account Limits
15
24
  exports.limitCommands
16
25
  .command('get')
17
- .description('Get current limits')
26
+ .description('Get all limits and controls')
18
27
  .action(() => {
28
+ console.log(chalk_1.default.blue('=== ACCOUNT LIMITS ==='));
19
29
  const limits = config_1.configManager.getLimits();
20
- console.log(chalk_1.default.blue('Current Limits:'));
21
30
  console.log(` Per Transaction: ${limits.perTransaction}`);
22
31
  console.log(` Daily: ${limits.daily}`);
23
32
  console.log(` Weekly: ${limits.weekly}`);
24
33
  console.log(` Monthly: ${limits.monthly}`);
25
34
  console.log(` Max per Hour: ${limits.maxTransactionsPerHour}`);
35
+ console.log(chalk_1.default.blue('\n=== CUMULATIVE BUDGETS ==='));
36
+ const budgets = config_1.configManager.getCumulativeBudgets();
37
+ if (budgets.length === 0) {
38
+ console.log(' No budgets configured');
39
+ }
40
+ else {
41
+ budgets.forEach((b, i) => {
42
+ console.log(` ${i + 1}. ${b.amount} ${b.currency || ''} per ${b.period}`);
43
+ });
44
+ }
45
+ console.log(chalk_1.default.blue('\n=== DOMAIN CONTROLS ==='));
46
+ const domainControls = config_1.configManager.getDomainControls();
47
+ console.log(` Mode: ${domainControls.mode}`);
48
+ console.log(` Domains: ${domainControls.domains.length > 0 ? domainControls.domains.join(', ') : 'None'}`);
49
+ console.log(chalk_1.default.blue('\n=== TIME WINDOW ==='));
50
+ const tw = config_1.configManager.getTimeWindow();
51
+ console.log(` Enabled: ${tw.enabled ? 'Yes' : 'No'}`);
52
+ console.log(` Hours: ${tw.start} - ${tw.end}`);
53
+ console.log(` Timezone: ${tw.timezone}`);
54
+ console.log(chalk_1.default.blue('\n=== GEOGRAPHY CONTROLS ==='));
55
+ const geoControls = config_1.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
+ console.log(chalk_1.default.blue('\n=== CATEGORY CONTROLS ==='));
60
+ const catControls = config_1.configManager.getCategoryControls();
61
+ console.log(` Blocked: ${catControls.blockedCategories.join(', ') || 'None'}`);
62
+ console.log(` Allowed (whitelist): ${catControls.allowedCategories?.join(', ') || 'None (all except blocked)'}`);
26
63
  });
27
64
  exports.limitCommands
28
65
  .command('set')
29
- .description('Set limits')
66
+ .description('Set basic account limits')
30
67
  .option('--per-transaction <amount>', 'Per transaction limit')
31
68
  .option('--daily <amount>', 'Daily limit')
32
69
  .option('--weekly <amount>', 'Weekly limit')
@@ -45,8 +82,104 @@ exports.limitCommands
45
82
  if (options.maxPerHour)
46
83
  limits.maxTransactionsPerHour = parseInt(options.maxPerHour);
47
84
  config_1.configManager.setLimits(limits);
48
- console.log(chalk_1.default.green('✓ Limits updated'));
85
+ console.log(chalk_1.default.green('✓ Account limits updated'));
86
+ });
87
+ // Cumulative Budgets
88
+ const budgetCommands = new commander_1.Command('budget')
89
+ .description('Cumulative budget management');
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
+ config_1.configManager.addCumulativeBudget(budget);
108
+ console.log(chalk_1.default.green(`✓ Budget added: ${budget.amount} ${budget.currency} per ${budget.period}`));
109
+ });
110
+ budgetCommands
111
+ .command('list')
112
+ .description('List all budgets')
113
+ .action(() => {
114
+ const budgets = config_1.configManager.getCumulativeBudgets();
115
+ if (budgets.length === 0) {
116
+ console.log(chalk_1.default.yellow('No budgets configured'));
117
+ }
118
+ else {
119
+ console.log(chalk_1.default.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
+ budgetCommands
126
+ .command('remove')
127
+ .description('Remove a budget')
128
+ .argument('<index>', 'Budget index')
129
+ .action((index) => {
130
+ config_1.configManager.removeCumulativeBudget(parseInt(index));
131
+ console.log(chalk_1.default.green('✓ Budget removed'));
132
+ });
133
+ exports.limitCommands.addCommand(budgetCommands);
134
+ // Domain Controls
135
+ const domainCommands = new commander_1.Command('domain')
136
+ .description('Domain controls (whitelist/blacklist merchant domains)');
137
+ domainCommands
138
+ .command('set-mode')
139
+ .description('Set domain control mode')
140
+ .argument('<mode>', 'Mode: whitelist or blacklist')
141
+ .action((mode) => {
142
+ if (mode !== 'whitelist' && mode !== 'blacklist') {
143
+ console.log(chalk_1.default.red('Mode must be "whitelist" or "blacklist"'));
144
+ return;
145
+ }
146
+ const controls = config_1.configManager.getDomainControls();
147
+ controls.mode = mode;
148
+ config_1.configManager.setDomainControls(controls);
149
+ console.log(chalk_1.default.green(`✓ Domain control mode set to: ${mode}`));
150
+ });
151
+ domainCommands
152
+ .command('add')
153
+ .description('Add a domain to the list')
154
+ .argument('<domain>', 'Domain (e.g., example.com)')
155
+ .action((domain) => {
156
+ config_1.configManager.addDomain(domain);
157
+ console.log(chalk_1.default.green(`✓ Domain added: ${domain}`));
158
+ });
159
+ domainCommands
160
+ .command('remove')
161
+ .description('Remove a domain from the list')
162
+ .argument('<domain>', 'Domain to remove')
163
+ .action((domain) => {
164
+ config_1.configManager.removeDomain(domain);
165
+ console.log(chalk_1.default.green(`✓ Domain removed: ${domain}`));
49
166
  });
167
+ domainCommands
168
+ .command('list')
169
+ .description('List all domains')
170
+ .action(() => {
171
+ const controls = config_1.configManager.getDomainControls();
172
+ console.log(chalk_1.default.blue(`Mode: ${controls.mode}`));
173
+ console.log(chalk_1.default.blue('Domains:'));
174
+ if (controls.domains.length === 0) {
175
+ console.log(' None');
176
+ }
177
+ else {
178
+ controls.domains.forEach((d) => console.log(` - ${d}`));
179
+ }
180
+ });
181
+ exports.limitCommands.addCommand(domainCommands);
182
+ // Time Window Controls
50
183
  const timeWindowCommands = new commander_1.Command('time-window')
51
184
  .description('Time window controls');
52
185
  timeWindowCommands
@@ -55,7 +188,7 @@ timeWindowCommands
55
188
  .action(() => {
56
189
  const tw = config_1.configManager.getTimeWindow();
57
190
  console.log(chalk_1.default.blue('Time Window:'));
58
- console.log(` Enabled: ${tw.enabled}`);
191
+ console.log(` Enabled: ${tw.enabled ? 'Yes' : 'No'}`);
59
192
  console.log(` Start: ${tw.start}`);
60
193
  console.log(` End: ${tw.end}`);
61
194
  console.log(` Timezone: ${tw.timezone}`);
@@ -65,7 +198,7 @@ timeWindowCommands
65
198
  .description('Set time window')
66
199
  .option('--start <time>', 'Start time (HH:MM)')
67
200
  .option('--end <time>', 'End time (HH:MM)')
68
- .option('--timezone <tz>', 'Timezone')
201
+ .option('--timezone <tz>', 'Timezone (e.g., Europe/Bucharest)')
69
202
  .action((options) => {
70
203
  const tw = {};
71
204
  if (options.start)
@@ -92,34 +225,136 @@ timeWindowCommands
92
225
  console.log(chalk_1.default.green('✓ Time window disabled'));
93
226
  });
94
227
  exports.limitCommands.addCommand(timeWindowCommands);
95
- exports.limitCommands
96
- .command('block')
97
- .description('Block a merchant')
98
- .argument('<merchant-id>', 'Merchant ID')
99
- .action((merchantId) => {
100
- console.log(chalk_1.default.yellow(`Merchant blocking not yet implemented for ${merchantId}`));
228
+ // Geography Controls
229
+ const geoCommands = new commander_1.Command('geo')
230
+ .description('Geography controls (allow/block by country)');
231
+ geoCommands
232
+ .command('enable')
233
+ .description('Enable geography controls')
234
+ .action(() => {
235
+ const controls = config_1.configManager.getGeographyControls();
236
+ controls.enabled = true;
237
+ config_1.configManager.setGeographyControls(controls);
238
+ console.log(chalk_1.default.green('✓ Geography controls enabled'));
101
239
  });
102
- exports.limitCommands
103
- .command('unblock')
104
- .description('Unblock a merchant')
105
- .argument('<merchant-id>', 'Merchant ID')
106
- .action((merchantId) => {
107
- console.log(chalk_1.default.yellow(`Merchant unblocking not yet implemented for ${merchantId}`));
240
+ geoCommands
241
+ .command('disable')
242
+ .description('Disable geography controls')
243
+ .action(() => {
244
+ const controls = config_1.configManager.getGeographyControls();
245
+ controls.enabled = false;
246
+ config_1.configManager.setGeographyControls(controls);
247
+ console.log(chalk_1.default.green('✓ Geography controls disabled'));
108
248
  });
109
- exports.limitCommands
110
- .command('block-category')
249
+ geoCommands
250
+ .command('set-mode')
251
+ .description('Set geography mode')
252
+ .argument('<mode>', 'Mode: allow or block')
253
+ .action((mode) => {
254
+ if (mode !== 'allow' && mode !== 'block') {
255
+ console.log(chalk_1.default.red('Mode must be "allow" or "block"'));
256
+ return;
257
+ }
258
+ const controls = config_1.configManager.getGeographyControls();
259
+ controls.mode = mode;
260
+ config_1.configManager.setGeographyControls(controls);
261
+ console.log(chalk_1.default.green(`✓ Geography mode set to: ${mode}`));
262
+ });
263
+ geoCommands
264
+ .command('add')
265
+ .description('Add a country (ISO code)')
266
+ .argument('<country>', 'Country code (e.g., US, DE, RO)')
267
+ .action((country) => {
268
+ const controls = config_1.configManager.getGeographyControls();
269
+ if (!controls.countries.includes(country.toUpperCase())) {
270
+ controls.countries.push(country.toUpperCase());
271
+ config_1.configManager.setGeographyControls(controls);
272
+ console.log(chalk_1.default.green(`✓ Country added: ${country.toUpperCase()}`));
273
+ }
274
+ else {
275
+ console.log(chalk_1.default.yellow('Country already in list'));
276
+ }
277
+ });
278
+ geoCommands
279
+ .command('remove')
280
+ .description('Remove a country')
281
+ .argument('<country>', 'Country code to remove')
282
+ .action((country) => {
283
+ const controls = config_1.configManager.getGeographyControls();
284
+ controls.countries = controls.countries.filter((c) => c !== country.toUpperCase());
285
+ config_1.configManager.setGeographyControls(controls);
286
+ console.log(chalk_1.default.green(`✓ Country removed: ${country.toUpperCase()}`));
287
+ });
288
+ geoCommands
289
+ .command('list')
290
+ .description('List all countries')
291
+ .action(() => {
292
+ const controls = config_1.configManager.getGeographyControls();
293
+ console.log(chalk_1.default.blue(`Enabled: ${controls.enabled ? 'Yes' : 'No'}`));
294
+ console.log(chalk_1.default.blue(`Mode: ${controls.mode}`));
295
+ console.log(chalk_1.default.blue('Countries:'));
296
+ if (controls.countries.length === 0) {
297
+ console.log(' None');
298
+ }
299
+ else {
300
+ controls.countries.forEach((c) => console.log(` - ${c}`));
301
+ }
302
+ });
303
+ exports.limitCommands.addCommand(geoCommands);
304
+ // Category Controls
305
+ const categoryCommands = new commander_1.Command('category')
306
+ .description('Category controls (block/allow spending categories)');
307
+ categoryCommands
308
+ .command('block')
111
309
  .description('Block a category')
112
310
  .argument('<category>', 'Category name')
113
311
  .action((category) => {
114
312
  config_1.configManager.addBlockedCategory(category);
115
- console.log(chalk_1.default.green(`✓ Category '${category}' blocked`));
313
+ console.log(chalk_1.default.green(`✓ Category blocked: ${category}`));
116
314
  });
117
- exports.limitCommands
118
- .command('unblock-category')
315
+ categoryCommands
316
+ .command('unblock')
119
317
  .description('Unblock a category')
120
318
  .argument('<category>', 'Category name')
121
319
  .action((category) => {
122
320
  config_1.configManager.removeBlockedCategory(category);
123
- console.log(chalk_1.default.green(`✓ Category '${category}' unblocked`));
321
+ console.log(chalk_1.default.green(`✓ Category unblocked: ${category}`));
322
+ });
323
+ categoryCommands
324
+ .command('allow')
325
+ .description('Add to allowed categories (whitelist mode)')
326
+ .argument('<category>', 'Category name')
327
+ .action((category) => {
328
+ config_1.configManager.addAllowedCategory(category);
329
+ console.log(chalk_1.default.green(`✓ Category added to allowed list: ${category}`));
330
+ });
331
+ categoryCommands
332
+ .command('disallow')
333
+ .description('Remove from allowed categories')
334
+ .argument('<category>', 'Category name')
335
+ .action((category) => {
336
+ config_1.configManager.removeAllowedCategory(category);
337
+ console.log(chalk_1.default.green(`✓ Category removed from allowed list: ${category}`));
338
+ });
339
+ categoryCommands
340
+ .command('list')
341
+ .description('List category controls')
342
+ .action(() => {
343
+ const controls = config_1.configManager.getCategoryControls();
344
+ console.log(chalk_1.default.blue('Blocked Categories:'));
345
+ if (controls.blockedCategories.length === 0) {
346
+ console.log(' None');
347
+ }
348
+ else {
349
+ controls.blockedCategories.forEach((c) => console.log(` - ${c}`));
350
+ }
351
+ console.log(chalk_1.default.blue('\nAllowed Categories (whitelist):'));
352
+ if (!controls.allowedCategories || controls.allowedCategories.length === 0) {
353
+ console.log(' None (all categories allowed except blocked)');
354
+ }
355
+ else {
356
+ controls.allowedCategories.forEach((c) => console.log(` - ${c}`));
357
+ }
124
358
  });
359
+ exports.limitCommands.addCommand(categoryCommands);
125
360
  //# sourceMappingURL=limits.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/commands/limits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/commands/limits.ts"],"names":[],"mappings":"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"}
@@ -30,9 +30,21 @@ export declare class ConfigManager {
30
30
  removePendingTransaction(transactionId: string): void;
31
31
  getConfig(): any;
32
32
  setConfig(key: string, value: any): void;
33
- getBlockedCategories(): string[];
33
+ getCumulativeBudgets(): any[];
34
+ addCumulativeBudget(budget: any): void;
35
+ removeCumulativeBudget(index: number): void;
36
+ getDomainControls(): any;
37
+ setDomainControls(controls: any): void;
38
+ addDomain(domain: string): void;
39
+ removeDomain(domain: string): void;
40
+ getGeographyControls(): any;
41
+ setGeographyControls(controls: any): void;
42
+ getCategoryControls(): any;
43
+ setCategoryControls(controls: any): void;
34
44
  addBlockedCategory(category: string): void;
35
45
  removeBlockedCategory(category: string): void;
46
+ addAllowedCategory(category: string): void;
47
+ removeAllowedCategory(category: string): void;
36
48
  getWebhookUrl(): string | null;
37
49
  setWebhookUrl(url: string): void;
38
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAGnB,MAAM,UAAU,CAAC;AAMlB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,cAAc,CAAkE;;IAQxF,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAwBxB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAKvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIhD,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAIjD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMlC,SAAS,IAAI,WAAW;IAIxB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAM7C,aAAa,IAAI,gBAAgB;IAIjC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAMtD,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5C,uBAAuB,IAAI,IAAI;IAQ/B,qBAAqB,IAAI,OAAO;IAIhC,qBAAqB,IAAI,kBAAkB;IAI3C,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAOlD,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAOrD,SAAS,IAAI,GAAG;IAIhB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAMxC,oBAAoB,IAAI,MAAM,EAAE;IAIhC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO1C,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO7C,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAIjC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAGnB,MAAM,UAAU,CAAC;AAMlB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,cAAc,CAAkE;;IAQxF,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAuCxB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAKvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIhD,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAIjD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMlC,SAAS,IAAI,WAAW;IAIxB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAM7C,aAAa,IAAI,gBAAgB;IAIjC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAMtD,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5C,uBAAuB,IAAI,IAAI;IAQ/B,qBAAqB,IAAI,OAAO;IAIhC,qBAAqB,IAAI,kBAAkB;IAI3C,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAOlD,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAOrD,SAAS,IAAI,GAAG;IAIhB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAMxC,oBAAoB,IAAI,GAAG,EAAE;IAI7B,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAQtC,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3C,iBAAiB,IAAI,GAAG;IAIxB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAQtC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU/B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASlC,oBAAoB,IAAI,GAAG;IAI3B,oBAAoB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IASzC,mBAAmB,IAAI,GAAG;IAI1B,mBAAmB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAQxC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU1C,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ7C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU1C,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS7C,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAIjC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -94,7 +94,22 @@ class ConfigManager {
94
94
  end: '22:00',
95
95
  timezone: 'Europe/Bucharest'
96
96
  },
97
- blockedCategories: ['gambling', 'adult', 'drugs', 'weapons', 'tobacco'],
97
+ advancedLimits: {
98
+ cumulativeBudgets: [],
99
+ domainControls: {
100
+ mode: 'blacklist',
101
+ domains: []
102
+ },
103
+ geographyControls: {
104
+ enabled: false,
105
+ mode: 'allow',
106
+ countries: []
107
+ },
108
+ categoryControls: {
109
+ blockedCategories: ['gambling', 'adult', 'drugs', 'weapons', 'tobacco'],
110
+ allowedCategories: []
111
+ }
112
+ },
98
113
  verifiedMerchantsOnly: true,
99
114
  webhookUrl: null
100
115
  };
@@ -172,20 +187,103 @@ class ConfigManager {
172
187
  this.config[key] = value;
173
188
  this.saveConfig();
174
189
  }
175
- // Blocked Categories
176
- getBlockedCategories() {
177
- return this.config.blockedCategories;
190
+ // Advanced Limits - Cumulative Budgets
191
+ getCumulativeBudgets() {
192
+ return this.config.advancedLimits?.cumulativeBudgets || [];
193
+ }
194
+ addCumulativeBudget(budget) {
195
+ if (!this.config.advancedLimits) {
196
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
197
+ }
198
+ this.config.advancedLimits.cumulativeBudgets.push(budget);
199
+ this.saveConfig();
200
+ }
201
+ removeCumulativeBudget(index) {
202
+ if (this.config.advancedLimits?.cumulativeBudgets) {
203
+ this.config.advancedLimits.cumulativeBudgets.splice(index, 1);
204
+ this.saveConfig();
205
+ }
206
+ }
207
+ // Advanced Limits - Domain Controls
208
+ getDomainControls() {
209
+ return this.config.advancedLimits?.domainControls || { mode: 'blacklist', domains: [] };
210
+ }
211
+ setDomainControls(controls) {
212
+ if (!this.config.advancedLimits) {
213
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
214
+ }
215
+ this.config.advancedLimits.domainControls = controls;
216
+ this.saveConfig();
217
+ }
218
+ addDomain(domain) {
219
+ if (!this.config.advancedLimits) {
220
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
221
+ }
222
+ if (!this.config.advancedLimits.domainControls.domains.includes(domain)) {
223
+ this.config.advancedLimits.domainControls.domains.push(domain);
224
+ this.saveConfig();
225
+ }
226
+ }
227
+ removeDomain(domain) {
228
+ if (this.config.advancedLimits?.domainControls?.domains) {
229
+ this.config.advancedLimits.domainControls.domains =
230
+ this.config.advancedLimits.domainControls.domains.filter((d) => d !== domain);
231
+ this.saveConfig();
232
+ }
233
+ }
234
+ // Advanced Limits - Geography Controls
235
+ getGeographyControls() {
236
+ return this.config.advancedLimits?.geographyControls || { enabled: false, mode: 'allow', countries: [] };
237
+ }
238
+ setGeographyControls(controls) {
239
+ if (!this.config.advancedLimits) {
240
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
241
+ }
242
+ this.config.advancedLimits.geographyControls = controls;
243
+ this.saveConfig();
244
+ }
245
+ // Advanced Limits - Category Controls
246
+ getCategoryControls() {
247
+ return this.config.advancedLimits?.categoryControls || { blockedCategories: [], allowedCategories: [] };
248
+ }
249
+ setCategoryControls(controls) {
250
+ if (!this.config.advancedLimits) {
251
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
252
+ }
253
+ this.config.advancedLimits.categoryControls = controls;
254
+ this.saveConfig();
178
255
  }
179
256
  addBlockedCategory(category) {
180
- if (!this.config.blockedCategories.includes(category)) {
181
- this.config.blockedCategories.push(category);
257
+ if (!this.config.advancedLimits) {
258
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
259
+ }
260
+ if (!this.config.advancedLimits.categoryControls.blockedCategories.includes(category)) {
261
+ this.config.advancedLimits.categoryControls.blockedCategories.push(category);
182
262
  this.saveConfig();
183
263
  }
184
264
  }
185
265
  removeBlockedCategory(category) {
186
- this.config.blockedCategories =
187
- this.config.blockedCategories.filter((c) => c !== category);
188
- this.saveConfig();
266
+ if (this.config.advancedLimits?.categoryControls?.blockedCategories) {
267
+ this.config.advancedLimits.categoryControls.blockedCategories =
268
+ this.config.advancedLimits.categoryControls.blockedCategories.filter((c) => c !== category);
269
+ this.saveConfig();
270
+ }
271
+ }
272
+ addAllowedCategory(category) {
273
+ if (!this.config.advancedLimits) {
274
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
275
+ }
276
+ if (!this.config.advancedLimits.categoryControls.allowedCategories.includes(category)) {
277
+ this.config.advancedLimits.categoryControls.allowedCategories.push(category);
278
+ this.saveConfig();
279
+ }
280
+ }
281
+ removeAllowedCategory(category) {
282
+ if (this.config.advancedLimits?.categoryControls?.allowedCategories) {
283
+ this.config.advancedLimits.categoryControls.allowedCategories =
284
+ this.config.advancedLimits.categoryControls.allowedCategories.filter((c) => c !== category);
285
+ this.saveConfig();
286
+ }
189
287
  }
190
288
  // Webhook URL
191
289
  getWebhookUrl() {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.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.0",
3
+ "version": "1.1.0",
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);
@@ -75,7 +75,22 @@ export class ConfigManager {
75
75
  end: '22:00',
76
76
  timezone: 'Europe/Bucharest'
77
77
  },
78
- blockedCategories: ['gambling', 'adult', 'drugs', 'weapons', 'tobacco'],
78
+ advancedLimits: {
79
+ cumulativeBudgets: [],
80
+ domainControls: {
81
+ mode: 'blacklist',
82
+ domains: []
83
+ },
84
+ geographyControls: {
85
+ enabled: false,
86
+ mode: 'allow',
87
+ countries: []
88
+ },
89
+ categoryControls: {
90
+ blockedCategories: ['gambling', 'adult', 'drugs', 'weapons', 'tobacco'],
91
+ allowedCategories: []
92
+ }
93
+ },
79
94
  verifiedMerchantsOnly: true,
80
95
  webhookUrl: null
81
96
  };
@@ -170,22 +185,117 @@ export class ConfigManager {
170
185
  this.saveConfig();
171
186
  }
172
187
 
173
- // Blocked Categories
174
- getBlockedCategories(): string[] {
175
- return this.config.blockedCategories;
188
+ // Advanced Limits - Cumulative Budgets
189
+ getCumulativeBudgets(): any[] {
190
+ return this.config.advancedLimits?.cumulativeBudgets || [];
191
+ }
192
+
193
+ addCumulativeBudget(budget: any): void {
194
+ if (!this.config.advancedLimits) {
195
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
196
+ }
197
+ this.config.advancedLimits.cumulativeBudgets.push(budget);
198
+ this.saveConfig();
199
+ }
200
+
201
+ removeCumulativeBudget(index: number): void {
202
+ if (this.config.advancedLimits?.cumulativeBudgets) {
203
+ this.config.advancedLimits.cumulativeBudgets.splice(index, 1);
204
+ this.saveConfig();
205
+ }
206
+ }
207
+
208
+ // Advanced Limits - Domain Controls
209
+ getDomainControls(): any {
210
+ return this.config.advancedLimits?.domainControls || { mode: 'blacklist', domains: [] };
211
+ }
212
+
213
+ setDomainControls(controls: any): void {
214
+ if (!this.config.advancedLimits) {
215
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
216
+ }
217
+ this.config.advancedLimits.domainControls = controls;
218
+ this.saveConfig();
219
+ }
220
+
221
+ addDomain(domain: string): void {
222
+ if (!this.config.advancedLimits) {
223
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
224
+ }
225
+ if (!this.config.advancedLimits.domainControls.domains.includes(domain)) {
226
+ this.config.advancedLimits.domainControls.domains.push(domain);
227
+ this.saveConfig();
228
+ }
229
+ }
230
+
231
+ removeDomain(domain: string): void {
232
+ if (this.config.advancedLimits?.domainControls?.domains) {
233
+ this.config.advancedLimits.domainControls.domains =
234
+ this.config.advancedLimits.domainControls.domains.filter((d: string) => d !== domain);
235
+ this.saveConfig();
236
+ }
237
+ }
238
+
239
+ // Advanced Limits - Geography Controls
240
+ getGeographyControls(): any {
241
+ return this.config.advancedLimits?.geographyControls || { enabled: false, mode: 'allow', countries: [] };
242
+ }
243
+
244
+ setGeographyControls(controls: any): void {
245
+ if (!this.config.advancedLimits) {
246
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
247
+ }
248
+ this.config.advancedLimits.geographyControls = controls;
249
+ this.saveConfig();
250
+ }
251
+
252
+ // Advanced Limits - Category Controls
253
+ getCategoryControls(): any {
254
+ return this.config.advancedLimits?.categoryControls || { blockedCategories: [], allowedCategories: [] };
255
+ }
256
+
257
+ setCategoryControls(controls: any): void {
258
+ if (!this.config.advancedLimits) {
259
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
260
+ }
261
+ this.config.advancedLimits.categoryControls = controls;
262
+ this.saveConfig();
176
263
  }
177
264
 
178
265
  addBlockedCategory(category: string): void {
179
- if (!this.config.blockedCategories.includes(category)) {
180
- this.config.blockedCategories.push(category);
266
+ if (!this.config.advancedLimits) {
267
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
268
+ }
269
+ if (!this.config.advancedLimits.categoryControls.blockedCategories.includes(category)) {
270
+ this.config.advancedLimits.categoryControls.blockedCategories.push(category);
181
271
  this.saveConfig();
182
272
  }
183
273
  }
184
274
 
185
275
  removeBlockedCategory(category: string): void {
186
- this.config.blockedCategories =
187
- this.config.blockedCategories.filter((c: string) => c !== category);
188
- this.saveConfig();
276
+ if (this.config.advancedLimits?.categoryControls?.blockedCategories) {
277
+ this.config.advancedLimits.categoryControls.blockedCategories =
278
+ this.config.advancedLimits.categoryControls.blockedCategories.filter((c: string) => c !== category);
279
+ this.saveConfig();
280
+ }
281
+ }
282
+
283
+ addAllowedCategory(category: string): void {
284
+ if (!this.config.advancedLimits) {
285
+ this.config.advancedLimits = this.getDefaultConfig().advancedLimits;
286
+ }
287
+ if (!this.config.advancedLimits.categoryControls.allowedCategories.includes(category)) {
288
+ this.config.advancedLimits.categoryControls.allowedCategories.push(category);
289
+ this.saveConfig();
290
+ }
291
+ }
292
+
293
+ removeAllowedCategory(category: string): void {
294
+ if (this.config.advancedLimits?.categoryControls?.allowedCategories) {
295
+ this.config.advancedLimits.categoryControls.allowedCategories =
296
+ this.config.advancedLimits.categoryControls.allowedCategories.filter((c: string) => c !== category);
297
+ this.saveConfig();
298
+ }
189
299
  }
190
300
 
191
301
  // Webhook URL
@@ -135,6 +135,37 @@ export interface TimeWindowConfig {
135
135
  blockedDays?: string[];
136
136
  }
137
137
 
138
+ export interface CumulativeBudget {
139
+ enabled: boolean;
140
+ amount: number;
141
+ period: 'daily' | 'weekly' | 'monthly';
142
+ resetDay?: number; // For monthly: 1-31
143
+ resetDayOfWeek?: number; // For weekly: 0-6 (Sunday-Saturday)
144
+ }
145
+
146
+ export interface DomainControl {
147
+ mode: 'whitelist' | 'blacklist';
148
+ domains: string[];
149
+ }
150
+
151
+ export interface GeographyControl {
152
+ enabled: boolean;
153
+ mode: 'allow' | 'block';
154
+ countries: string[]; // ISO country codes
155
+ }
156
+
157
+ export interface CategoryControl {
158
+ blockedCategories: string[];
159
+ allowedCategories?: string[]; // If set, only these are allowed
160
+ }
161
+
162
+ export interface AdvancedLimits {
163
+ cumulativeBudgets: CumulativeBudget[];
164
+ domainControls: DomainControl;
165
+ geographyControls: GeographyControl;
166
+ categoryControls: CategoryControl;
167
+ }
168
+
138
169
  // Emergency Stop Types
139
170
  export interface EmergencyStopState {
140
171
  active: boolean;