paymongo-cli 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.
- package/CHANGELOG.md +141 -0
- package/bin/paymongo.js +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +99 -127
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +68 -102
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/gui.js +26 -31
- package/dist/commands/gui.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +109 -159
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +78 -118
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/payments.d.ts.map +1 -1
- package/dist/commands/payments.js +63 -65
- package/dist/commands/payments.js.map +1 -1
- package/dist/commands/team/index.js +31 -36
- package/dist/commands/team/index.js.map +1 -1
- package/dist/commands/trigger.d.ts.map +1 -1
- package/dist/commands/trigger.js +46 -88
- package/dist/commands/trigger.js.map +1 -1
- package/dist/commands/webhooks.d.ts.map +1 -1
- package/dist/commands/webhooks.js +138 -150
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/index.js +37 -44
- package/dist/index.js.map +1 -1
- package/dist/services/analytics/service.d.ts +7 -1
- package/dist/services/analytics/service.d.ts.map +1 -1
- package/dist/services/analytics/service.js +15 -20
- package/dist/services/analytics/service.js.map +1 -1
- package/dist/services/api/client.d.ts +9 -8
- package/dist/services/api/client.d.ts.map +1 -1
- package/dist/services/api/client.js +33 -29
- package/dist/services/api/client.js.map +1 -1
- package/dist/services/config/manager.d.ts +1 -1
- package/dist/services/config/manager.d.ts.map +1 -1
- package/dist/services/config/manager.js +30 -72
- package/dist/services/config/manager.js.map +1 -1
- package/dist/services/github/auth.d.ts +2 -2
- package/dist/services/github/auth.d.ts.map +1 -1
- package/dist/services/github/auth.js +15 -55
- package/dist/services/github/auth.js.map +1 -1
- package/dist/services/github/client.d.ts +1 -1
- package/dist/services/github/client.d.ts.map +1 -1
- package/dist/services/github/client.js +12 -17
- package/dist/services/github/client.js.map +1 -1
- package/dist/services/github/sync.d.ts +2 -2
- package/dist/services/github/sync.d.ts.map +1 -1
- package/dist/services/github/sync.js +13 -10
- package/dist/services/github/sync.js.map +1 -1
- package/dist/services/web/server.d.ts +5 -4
- package/dist/services/web/server.d.ts.map +1 -1
- package/dist/services/web/server.js +70 -27
- package/dist/services/web/server.js.map +1 -1
- package/dist/types/paymongo.d.ts +48 -0
- package/dist/types/paymongo.d.ts.map +1 -1
- package/dist/types/paymongo.js +1 -2
- package/dist/types/schemas.d.ts +80 -0
- package/dist/types/schemas.d.ts.map +1 -0
- package/dist/types/schemas.js +63 -0
- package/dist/types/schemas.js.map +1 -0
- package/dist/utils/cache.d.ts +2 -0
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +65 -77
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/constants.js +16 -19
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/errors.d.ts +1 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +18 -19
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/logger.d.ts +5 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -16
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/spinner.js +4 -8
- package/dist/utils/spinner.js.map +1 -1
- package/dist/utils/validator.d.ts +1 -1
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +6 -13
- package/dist/utils/validator.js.map +1 -1
- package/eslint.config.ts +43 -0
- package/jest.config.ts +30 -0
- package/package.json +76 -70
package/dist/index.js
CHANGED
|
@@ -1,61 +1,54 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const package_json_1 = require("../package.json");
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { createRequire } from 'module';
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
6
|
+
const { version } = require('../package.json');
|
|
10
7
|
// Import commands
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const program = new
|
|
8
|
+
import initCommand from './commands/init.js';
|
|
9
|
+
import devCommand from './commands/dev.js';
|
|
10
|
+
import loginCommand from './commands/login.js';
|
|
11
|
+
import configCommand from './commands/config.js';
|
|
12
|
+
import webhooksCommand from './commands/webhooks.js';
|
|
13
|
+
import triggerCommand from './commands/trigger.js';
|
|
14
|
+
import guiCommand from './commands/gui.js';
|
|
15
|
+
import teamCommand from './commands/team/index.js';
|
|
16
|
+
import paymentsCommand from './commands/payments.js';
|
|
17
|
+
const program = new Command();
|
|
21
18
|
program
|
|
22
19
|
.name('paymongo')
|
|
23
20
|
.description('CLI tool for PayMongo integration development')
|
|
24
|
-
.version(
|
|
21
|
+
.version(version)
|
|
25
22
|
.showHelpAfterError('(add --help for additional information)');
|
|
26
|
-
program.addCommand(
|
|
27
|
-
program.addCommand(
|
|
28
|
-
program.addCommand(
|
|
29
|
-
program.addCommand(
|
|
30
|
-
program.addCommand(
|
|
31
|
-
program.addCommand(
|
|
32
|
-
program.addCommand(
|
|
33
|
-
program.addCommand(
|
|
34
|
-
program.addCommand(
|
|
23
|
+
program.addCommand(initCommand);
|
|
24
|
+
program.addCommand(devCommand);
|
|
25
|
+
program.addCommand(loginCommand);
|
|
26
|
+
program.addCommand(configCommand);
|
|
27
|
+
program.addCommand(webhooksCommand);
|
|
28
|
+
program.addCommand(paymentsCommand);
|
|
29
|
+
program.addCommand(triggerCommand);
|
|
30
|
+
program.addCommand(guiCommand);
|
|
31
|
+
program.addCommand(teamCommand);
|
|
35
32
|
// Add global help
|
|
36
|
-
program.addHelpText('after', `
|
|
37
|
-
EXAMPLES
|
|
38
|
-
$ paymongo init
|
|
39
|
-
$ paymongo dev --port 4000
|
|
40
|
-
$ paymongo gui
|
|
41
|
-
$ paymongo webhooks list
|
|
42
|
-
$ paymongo payments list
|
|
43
|
-
$ paymongo team sync
|
|
44
|
-
|
|
45
|
-
For more information, visit: https://github.com/leodyversemilla07/paymongo-cli
|
|
33
|
+
program.addHelpText('after', `
|
|
34
|
+
EXAMPLES
|
|
35
|
+
$ paymongo init
|
|
36
|
+
$ paymongo dev --port 4000
|
|
37
|
+
$ paymongo gui
|
|
38
|
+
$ paymongo webhooks list
|
|
39
|
+
$ paymongo payments list
|
|
40
|
+
$ paymongo team sync
|
|
41
|
+
|
|
42
|
+
For more information, visit: https://github.com/leodyversemilla07/paymongo-cli
|
|
46
43
|
`);
|
|
47
44
|
// Global error handler
|
|
48
45
|
process.on('uncaughtException', (error) => {
|
|
49
|
-
console.error(
|
|
46
|
+
console.error(chalk.red('An unexpected error occurred:'), error.message);
|
|
50
47
|
process.exit(1);
|
|
51
48
|
});
|
|
52
49
|
process.on('unhandledRejection', (reason, promise) => {
|
|
53
|
-
console.error(
|
|
50
|
+
console.error(chalk.red('Unhandled Rejection at:'), promise, 'reason:', reason);
|
|
54
51
|
process.exit(1);
|
|
55
52
|
});
|
|
56
53
|
program.parse();
|
|
57
|
-
process.on('unhandledRejection', (reason, promise) => {
|
|
58
|
-
console.error(chalk_1.default.red('Unhandled Rejection at:'), promise, 'reason:', reason);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
});
|
|
61
54
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,kBAAkB;AAClB,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,eAAe,MAAM,wBAAwB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC;KAChB,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;AAEjE,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,kBAAkB;AAClB,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;;;;CAUD,CACA,CAAC;AAEF,uBAAuB;AACvB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export interface WebhookEventData {
|
|
2
|
+
type?: string;
|
|
3
|
+
amount?: number;
|
|
4
|
+
status?: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
1
7
|
export interface WebhookEvent {
|
|
2
8
|
id: string;
|
|
3
9
|
type: string;
|
|
@@ -5,7 +11,7 @@ export interface WebhookEvent {
|
|
|
5
11
|
success: boolean;
|
|
6
12
|
error?: string;
|
|
7
13
|
responseTime?: number;
|
|
8
|
-
data?:
|
|
14
|
+
data?: WebhookEventData;
|
|
9
15
|
}
|
|
10
16
|
export interface AnalyticsData {
|
|
11
17
|
totalEvents: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/analytics/service.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/analytics/service.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;;IAQvB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,UAAU;IAYX,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,IAAI;IAiBhE,YAAY,IAAI,aAAa;IAyC7B,cAAc,IAAI,IAAI;CAI9B"}
|
|
@@ -1,23 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const logger_1 = __importDefault(require("../../utils/logger"));
|
|
10
|
-
class AnalyticsService {
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import Logger from '../../utils/logger.js';
|
|
4
|
+
export class AnalyticsService {
|
|
5
|
+
events = [];
|
|
6
|
+
dataFile;
|
|
7
|
+
logger;
|
|
11
8
|
constructor() {
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.dataFile = path_1.default.join(process.cwd(), '.paymongo', 'analytics.json');
|
|
9
|
+
this.logger = new Logger();
|
|
10
|
+
this.dataFile = path.join(process.cwd(), '.paymongo', 'analytics.json');
|
|
15
11
|
this.loadEvents();
|
|
16
12
|
}
|
|
17
13
|
loadEvents() {
|
|
18
14
|
try {
|
|
19
|
-
if (
|
|
20
|
-
const data = JSON.parse(
|
|
15
|
+
if (fs.existsSync(this.dataFile)) {
|
|
16
|
+
const data = JSON.parse(fs.readFileSync(this.dataFile, 'utf-8'));
|
|
21
17
|
this.events = data.events || [];
|
|
22
18
|
// Keep only last 1000 events
|
|
23
19
|
if (this.events.length > 1000) {
|
|
@@ -32,11 +28,11 @@ class AnalyticsService {
|
|
|
32
28
|
}
|
|
33
29
|
saveEvents() {
|
|
34
30
|
try {
|
|
35
|
-
const dir =
|
|
36
|
-
if (!
|
|
37
|
-
|
|
31
|
+
const dir = path.dirname(this.dataFile);
|
|
32
|
+
if (!fs.existsSync(dir)) {
|
|
33
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
38
34
|
}
|
|
39
|
-
|
|
35
|
+
fs.writeFileSync(this.dataFile, JSON.stringify({ events: this.events }, null, 2));
|
|
40
36
|
}
|
|
41
37
|
catch (error) {
|
|
42
38
|
this.logger.error('Failed to save analytics data', error);
|
|
@@ -93,5 +89,4 @@ class AnalyticsService {
|
|
|
93
89
|
this.saveEvents();
|
|
94
90
|
}
|
|
95
91
|
}
|
|
96
|
-
exports.AnalyticsService = AnalyticsService;
|
|
97
92
|
//# sourceMappingURL=service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/analytics/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/analytics/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { PayMongoConfig, WebhookData, WebhookDataWithSecret, PaymentDataFull, PaymentIntentData } from '../../types/paymongo.js';
|
|
1
2
|
export interface ApiClientOptions {
|
|
2
|
-
config:
|
|
3
|
+
config: PayMongoConfig;
|
|
3
4
|
timeout?: number;
|
|
4
5
|
enableCache?: boolean;
|
|
5
6
|
}
|
|
@@ -10,18 +11,18 @@ export declare class ApiClient {
|
|
|
10
11
|
constructor(options: ApiClientOptions);
|
|
11
12
|
private setupInterceptors;
|
|
12
13
|
validateApiKey(): Promise<boolean>;
|
|
13
|
-
createWebhook(url: string, events: string[]): Promise<
|
|
14
|
-
listWebhooks(): Promise<
|
|
15
|
-
getWebhook(id: string): Promise<
|
|
14
|
+
createWebhook(url: string, events: string[]): Promise<WebhookDataWithSecret>;
|
|
15
|
+
listWebhooks(): Promise<WebhookData[]>;
|
|
16
|
+
getWebhook(id: string): Promise<WebhookData>;
|
|
16
17
|
updateWebhook(id: string, updates: {
|
|
17
18
|
url?: string;
|
|
18
19
|
events?: string[];
|
|
19
20
|
status?: 'enabled' | 'disabled';
|
|
20
|
-
}): Promise<
|
|
21
|
+
}): Promise<WebhookData>;
|
|
21
22
|
deleteWebhook(id: string): Promise<void>;
|
|
22
|
-
getPayment(id: string): Promise<
|
|
23
|
-
listPayments(limit?: number): Promise<
|
|
24
|
-
createPaymentIntent(amount: number, currency?: string, description?: string, paymentMethods?: string[]): Promise<
|
|
23
|
+
getPayment(id: string): Promise<PaymentDataFull>;
|
|
24
|
+
listPayments(limit?: number): Promise<PaymentDataFull[]>;
|
|
25
|
+
createPaymentIntent(amount: number, currency?: string, description?: string, paymentMethods?: string[]): Promise<PaymentIntentData>;
|
|
25
26
|
}
|
|
26
27
|
export default ApiClient;
|
|
27
28
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjI,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAQ;gBAET,OAAO,EAAE,gBAAgB;IAkBrC,OAAO,CAAC,iBAAiB;IAiDnB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoB5E,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAkBtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkB5C,aAAa,CACjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,GAC5E,OAAO,CAAC,WAAW,CAAC;IAgBjB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAMhD,YAAY,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAc5D,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAc,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,cAAc,GAAE,MAAM,EAAiC,GACtD,OAAO,CAAC,iBAAiB,CAAC;CAgB9B;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ApiClient = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
1
|
+
import axios from 'axios';
|
|
8
2
|
const REQUEST_TIMEOUT = 30000;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ApiClient {
|
|
3
|
+
import { NetworkError, ApiKeyError, PayMongoError, withRetry } from '../../utils/errors.js';
|
|
4
|
+
import Cache from '../../utils/cache.js';
|
|
5
|
+
export class ApiClient {
|
|
6
|
+
client;
|
|
7
|
+
config;
|
|
8
|
+
cache;
|
|
12
9
|
constructor(options) {
|
|
13
10
|
this.config = options.config;
|
|
14
11
|
const timeout = options.timeout || REQUEST_TIMEOUT;
|
|
15
|
-
this.client =
|
|
12
|
+
this.client = axios.create({
|
|
16
13
|
baseURL: `https://api.paymongo.com/v1`,
|
|
17
14
|
timeout,
|
|
18
15
|
headers: {
|
|
@@ -20,7 +17,7 @@ class ApiClient {
|
|
|
20
17
|
'User-Agent': 'paymongo-cli/1.0.0',
|
|
21
18
|
},
|
|
22
19
|
});
|
|
23
|
-
this.cache = new
|
|
20
|
+
this.cache = new Cache({ ttl: 2 * 60 * 1000 }); // 2 minute cache for API responses
|
|
24
21
|
this.setupInterceptors();
|
|
25
22
|
}
|
|
26
23
|
setupInterceptors() {
|
|
@@ -39,22 +36,28 @@ class ApiClient {
|
|
|
39
36
|
});
|
|
40
37
|
// Response interceptor for error handling
|
|
41
38
|
this.client.interceptors.response.use((response) => response, async (error) => {
|
|
42
|
-
if (
|
|
39
|
+
if (axios.isAxiosError(error)) {
|
|
43
40
|
const status = error.response?.status;
|
|
44
41
|
if (!error.response) {
|
|
45
|
-
throw new
|
|
42
|
+
throw new NetworkError(`Network error - no response received: ${error.message}`, error);
|
|
46
43
|
}
|
|
47
44
|
if (status === 401) {
|
|
48
|
-
throw new
|
|
45
|
+
throw new ApiKeyError('Invalid API key or unauthorized', 'secret');
|
|
49
46
|
}
|
|
50
|
-
|
|
47
|
+
if (status === 404) {
|
|
48
|
+
throw new PayMongoError('Resource not found', 'RESOURCE_NOT_FOUND', status);
|
|
49
|
+
}
|
|
50
|
+
if (status && status >= 500) {
|
|
51
|
+
throw new PayMongoError(`Server error: ${error.message}`, `SERVER_${status}`, status);
|
|
52
|
+
}
|
|
53
|
+
throw new PayMongoError(error.message, `API_${status}`, status);
|
|
51
54
|
}
|
|
52
|
-
throw new
|
|
55
|
+
throw new NetworkError('Unknown network error');
|
|
53
56
|
});
|
|
54
57
|
}
|
|
55
58
|
async validateApiKey() {
|
|
56
59
|
try {
|
|
57
|
-
await
|
|
60
|
+
await withRetry(() => this.client.get('/webhooks'));
|
|
58
61
|
return true;
|
|
59
62
|
}
|
|
60
63
|
catch (error) {
|
|
@@ -63,7 +66,7 @@ class ApiClient {
|
|
|
63
66
|
}
|
|
64
67
|
// Webhook methods
|
|
65
68
|
async createWebhook(url, events) {
|
|
66
|
-
const result = await
|
|
69
|
+
const result = await withRetry(() => this.client
|
|
67
70
|
.post('/webhooks', {
|
|
68
71
|
data: {
|
|
69
72
|
attributes: {
|
|
@@ -84,7 +87,7 @@ class ApiClient {
|
|
|
84
87
|
if (cached) {
|
|
85
88
|
return cached;
|
|
86
89
|
}
|
|
87
|
-
const result = await
|
|
90
|
+
const result = await withRetry(() => this.client.get('/webhooks').then((response) => response.data.data));
|
|
88
91
|
// Cache the result
|
|
89
92
|
await this.cache.set(cacheKey, result);
|
|
90
93
|
return result;
|
|
@@ -96,7 +99,7 @@ class ApiClient {
|
|
|
96
99
|
if (cached) {
|
|
97
100
|
return cached;
|
|
98
101
|
}
|
|
99
|
-
const result = await
|
|
102
|
+
const result = await withRetry(() => this.client.get(`/webhooks/${id}`).then((response) => response.data.data));
|
|
100
103
|
// Cache the result
|
|
101
104
|
await this.cache.set(cacheKey, result);
|
|
102
105
|
return result;
|
|
@@ -105,7 +108,7 @@ class ApiClient {
|
|
|
105
108
|
// Invalidate cache when updating
|
|
106
109
|
await this.cache.invalidate(`webhook_${id}`);
|
|
107
110
|
await this.cache.invalidate(`webhooks_${this.config.environment}`);
|
|
108
|
-
return
|
|
111
|
+
return withRetry(() => this.client
|
|
109
112
|
.put(`/webhooks/${id}`, {
|
|
110
113
|
data: {
|
|
111
114
|
attributes: updates,
|
|
@@ -117,22 +120,24 @@ class ApiClient {
|
|
|
117
120
|
// Invalidate cache when deleting
|
|
118
121
|
await this.cache.invalidate(`webhook_${id}`);
|
|
119
122
|
await this.cache.invalidate(`webhooks_${this.config.environment}`);
|
|
120
|
-
return
|
|
123
|
+
return withRetry(() => this.client.delete(`/webhooks/${id}`));
|
|
121
124
|
}
|
|
122
125
|
// Payment methods (for validation and testing)
|
|
123
126
|
async getPayment(id) {
|
|
124
|
-
return
|
|
127
|
+
return withRetry(() => this.client.get(`/payments/${id}`).then((response) => response.data.data));
|
|
125
128
|
}
|
|
126
129
|
async listPayments(limit = 10) {
|
|
127
|
-
|
|
130
|
+
// Validate limit is within API constraints
|
|
131
|
+
const validLimit = Math.max(1, Math.min(100, limit));
|
|
132
|
+
const result = await withRetry(() => this.client
|
|
128
133
|
.get('/payments', {
|
|
129
|
-
params: { limit },
|
|
134
|
+
params: { limit: validLimit },
|
|
130
135
|
})
|
|
131
136
|
.then((response) => response.data.data));
|
|
132
137
|
return result;
|
|
133
138
|
}
|
|
134
139
|
async createPaymentIntent(amount, currency = 'PHP', description, paymentMethods = ['card', 'gcash', 'paymaya']) {
|
|
135
|
-
return
|
|
140
|
+
return withRetry(() => this.client
|
|
136
141
|
.post('/payment_intents', {
|
|
137
142
|
data: {
|
|
138
143
|
attributes: {
|
|
@@ -146,6 +151,5 @@ class ApiClient {
|
|
|
146
151
|
.then((response) => response.data.data));
|
|
147
152
|
}
|
|
148
153
|
}
|
|
149
|
-
|
|
150
|
-
exports.default = ApiClient;
|
|
154
|
+
export default ApiClient;
|
|
151
155
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/services/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/services/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM/E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAqE;gBAE5E,OAAO,GAAE,oBAAyB;IAIxC,IAAI,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqDtC,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAS1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,gBAAgB,IAAI,cAAc;IAmBlC,OAAO,CAAC,cAAc;IA8BtB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc;CAsBpF;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1,48 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ConfigManager = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const cosmiconfig_1 = require("cosmiconfig");
|
|
40
|
-
const errors_1 = require("../../utils/errors");
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { cosmiconfig } from 'cosmiconfig';
|
|
4
|
+
import { ConfigError, ValidationError } from '../../utils/errors.js';
|
|
5
|
+
import { validateConfig as zodValidateConfig } from '../../types/schemas.js';
|
|
41
6
|
const CONFIG_FILE_NAME = '.paymongo';
|
|
42
|
-
class ConfigManager {
|
|
7
|
+
export class ConfigManager {
|
|
8
|
+
explorer = cosmiconfig('paymongo');
|
|
9
|
+
configPath;
|
|
10
|
+
configCache = new Map();
|
|
43
11
|
constructor(options = {}) {
|
|
44
|
-
this.explorer = (0, cosmiconfig_1.cosmiconfig)('paymongo');
|
|
45
|
-
this.configCache = new Map();
|
|
46
12
|
this.configPath = options.configPath || path.join(process.cwd(), CONFIG_FILE_NAME);
|
|
47
13
|
}
|
|
48
14
|
async load() {
|
|
@@ -82,14 +48,15 @@ class ConfigManager {
|
|
|
82
48
|
return config;
|
|
83
49
|
}
|
|
84
50
|
catch (error) {
|
|
85
|
-
|
|
51
|
+
const err = error;
|
|
52
|
+
if (err.code === 'ENOENT') {
|
|
86
53
|
return null;
|
|
87
54
|
}
|
|
88
55
|
// If it's already a ConfigError or ValidationError, re-throw
|
|
89
|
-
if (error instanceof
|
|
56
|
+
if (error instanceof ConfigError || error instanceof ValidationError) {
|
|
90
57
|
throw error;
|
|
91
58
|
}
|
|
92
|
-
throw new
|
|
59
|
+
throw new ConfigError(`Failed to load config: ${err.message}`, this.configPath);
|
|
93
60
|
}
|
|
94
61
|
}
|
|
95
62
|
async save(config) {
|
|
@@ -116,7 +83,7 @@ class ConfigManager {
|
|
|
116
83
|
}
|
|
117
84
|
}
|
|
118
85
|
catch (error) {
|
|
119
|
-
throw new
|
|
86
|
+
throw new ConfigError(`Failed to save config: ${error.message}`, this.configPath);
|
|
120
87
|
}
|
|
121
88
|
}
|
|
122
89
|
async exists() {
|
|
@@ -135,7 +102,7 @@ class ConfigManager {
|
|
|
135
102
|
}
|
|
136
103
|
}
|
|
137
104
|
catch (error) {
|
|
138
|
-
throw new
|
|
105
|
+
throw new ConfigError(`Failed to delete config: ${error.message}`, this.configPath);
|
|
139
106
|
}
|
|
140
107
|
}
|
|
141
108
|
getDefaultConfig() {
|
|
@@ -157,30 +124,22 @@ class ConfigManager {
|
|
|
157
124
|
};
|
|
158
125
|
}
|
|
159
126
|
validateConfig(config) {
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (!config.environment || !['test', 'live'].includes(config.environment)) {
|
|
168
|
-
throw new errors_1.ValidationError('Config file has invalid "environment" field (must be "test" or "live")', 'environment');
|
|
169
|
-
}
|
|
170
|
-
// Check API keys structure
|
|
171
|
-
if (!config.apiKeys || typeof config.apiKeys !== 'object') {
|
|
172
|
-
throw new errors_1.ValidationError('Config file is missing or has invalid "apiKeys" field', 'apiKeys');
|
|
173
|
-
}
|
|
174
|
-
const env = config.environment;
|
|
175
|
-
if (!config.apiKeys[env]) {
|
|
176
|
-
throw new errors_1.ValidationError(`Config file is missing API keys for environment "${env}"`, `apiKeys.${env}`);
|
|
127
|
+
// Use Zod for comprehensive schema validation
|
|
128
|
+
const result = zodValidateConfig(config);
|
|
129
|
+
if (!result.success && result.errors) {
|
|
130
|
+
// Throw the first validation error with field context
|
|
131
|
+
const firstError = result.errors[0] || 'Invalid configuration';
|
|
132
|
+
const field = firstError.includes(':') ? firstError.split(':')[0] : undefined;
|
|
133
|
+
throw new ValidationError(firstError, field);
|
|
177
134
|
}
|
|
178
|
-
|
|
179
|
-
|
|
135
|
+
// Additional runtime checks for current environment API keys
|
|
136
|
+
const cfg = config;
|
|
137
|
+
const env = cfg.environment;
|
|
138
|
+
if (!cfg.apiKeys[env]) {
|
|
139
|
+
throw new ValidationError(`Config file is missing API keys for environment "${env}"`, `apiKeys.${env}`);
|
|
180
140
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
throw new errors_1.ValidationError('Config file is missing or has invalid "dev" field', 'dev');
|
|
141
|
+
if (!cfg.apiKeys[env]?.secret) {
|
|
142
|
+
throw new ValidationError(`Config file is missing secret API key for environment "${env}"`, `apiKeys.${env}.secret`);
|
|
184
143
|
}
|
|
185
144
|
}
|
|
186
145
|
mergeConfig(base, updates) {
|
|
@@ -206,6 +165,5 @@ class ConfigManager {
|
|
|
206
165
|
};
|
|
207
166
|
}
|
|
208
167
|
}
|
|
209
|
-
|
|
210
|
-
exports.default = ConfigManager;
|
|
168
|
+
export default ConfigManager;
|
|
211
169
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/services/config/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/services/config/manager.ts"],"names":[],"mappings":"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"}
|