paymongo-cli 1.2.0 → 1.4.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.
- package/.github/copilot-instructions.md +95 -0
- package/.github/workflows/release.yml +15 -0
- package/AGENTS.md +418 -0
- package/CHANGELOG.md +331 -185
- package/README.md +93 -12
- package/TESTING.md +235 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +281 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +281 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov.info +5053 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/commands/config.d.ts +17 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +268 -55
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dev.d.ts +13 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +40 -56
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/env.d.ts +4 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +106 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/generate.js +1184 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +33 -33
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +17 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +2 -17
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/payments.d.ts +37 -0
- package/dist/commands/payments.d.ts.map +1 -1
- package/dist/commands/payments.js +367 -32
- package/dist/commands/payments.js.map +1 -1
- package/dist/commands/team/index.d.ts.map +1 -1
- package/dist/commands/team/index.js +192 -95
- package/dist/commands/team/index.js.map +1 -1
- package/dist/commands/trigger.d.ts.map +1 -1
- package/dist/commands/trigger.js +239 -75
- package/dist/commands/trigger.js.map +1 -1
- package/dist/commands/webhooks.d.ts +19 -0
- package/dist/commands/webhooks.d.ts.map +1 -1
- package/dist/commands/webhooks.js +246 -70
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/index.js +56 -32
- package/dist/index.js.map +1 -1
- package/dist/services/analytics/service.js +6 -8
- package/dist/services/api/client.d.ts +6 -8
- package/dist/services/api/client.d.ts.map +1 -1
- package/dist/services/api/client.js +20 -131
- package/dist/services/api/client.js.map +1 -1
- package/dist/services/api/rate-limiter.d.ts +64 -0
- package/dist/services/api/rate-limiter.d.ts.map +1 -0
- package/dist/services/api/rate-limiter.js +83 -0
- package/dist/services/api/rate-limiter.js.map +1 -0
- package/dist/services/api/undici-client.d.ts +39 -0
- package/dist/services/api/undici-client.d.ts.map +1 -0
- package/dist/services/api/undici-client.js +294 -0
- package/dist/services/api/undici-client.js.map +1 -0
- package/dist/services/config/manager.js +1 -16
- package/dist/services/dev/process-manager.js +0 -32
- package/dist/services/github/client.d.ts +41 -0
- package/dist/services/github/client.d.ts.map +1 -1
- package/dist/services/github/client.js +28 -0
- package/dist/services/github/client.js.map +1 -1
- package/dist/services/payments/simulator.d.ts +28 -0
- package/dist/services/payments/simulator.d.ts.map +1 -0
- package/dist/services/payments/simulator.js +115 -0
- package/dist/services/payments/simulator.js.map +1 -0
- package/dist/services/team/service.d.ts +44 -0
- package/dist/services/team/service.d.ts.map +1 -0
- package/dist/services/team/service.js +153 -0
- package/dist/services/team/service.js.map +1 -0
- package/dist/types/paymongo.d.ts +36 -3
- package/dist/types/paymongo.d.ts.map +1 -1
- package/dist/types/paymongo.js +0 -1
- package/dist/types/schemas.js +0 -8
- package/dist/utils/bulk.d.ts +62 -0
- package/dist/utils/bulk.d.ts.map +1 -0
- package/dist/utils/bulk.js +123 -0
- package/dist/utils/bulk.js.map +1 -0
- package/dist/utils/cache.js +4 -16
- package/dist/utils/constants.js +2 -13
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +22 -7
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/logger.d.ts +3 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +38 -25
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/spinner.js +0 -1
- package/dist/utils/validator.js +0 -3
- package/dist/utils/webhook-store.d.ts +22 -0
- package/dist/utils/webhook-store.d.ts.map +1 -0
- package/dist/utils/webhook-store.js +57 -0
- package/dist/utils/webhook-store.js.map +1 -0
- package/package.json +74 -76
- package/web/index.html +0 -688
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../src/utils/bulk.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/cache.js
CHANGED
|
@@ -8,13 +8,11 @@ export class Cache {
|
|
|
8
8
|
initialized;
|
|
9
9
|
constructor(options = {}) {
|
|
10
10
|
this.options = {
|
|
11
|
-
ttl: options.ttl || 5 * 60 * 1000,
|
|
12
|
-
maxSize: options.maxSize || 10,
|
|
11
|
+
ttl: options.ttl || 5 * 60 * 1000,
|
|
12
|
+
maxSize: options.maxSize || 10,
|
|
13
13
|
};
|
|
14
|
-
// Create cache directory in user's home - use os.homedir() as primary
|
|
15
14
|
const homeDirectory = process.env.HOME || process.env.USERPROFILE || homedir();
|
|
16
15
|
this.cacheDir = path.join(homeDirectory, '.paymongo-cli', 'cache');
|
|
17
|
-
// Initialize cache directory asynchronously
|
|
18
16
|
this.initialized = this.initCacheDir();
|
|
19
17
|
}
|
|
20
18
|
async initCacheDir() {
|
|
@@ -22,7 +20,6 @@ export class Cache {
|
|
|
22
20
|
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
23
21
|
}
|
|
24
22
|
catch {
|
|
25
|
-
// Directory might already exist or creation failed
|
|
26
23
|
}
|
|
27
24
|
}
|
|
28
25
|
getCacheKey(key) {
|
|
@@ -50,7 +47,7 @@ export class Cache {
|
|
|
50
47
|
const stats = await fs.stat(filePath);
|
|
51
48
|
totalSize += stats.size;
|
|
52
49
|
}
|
|
53
|
-
return totalSize / (1024 * 1024);
|
|
50
|
+
return totalSize / (1024 * 1024);
|
|
54
51
|
}
|
|
55
52
|
catch {
|
|
56
53
|
return 0;
|
|
@@ -70,27 +67,23 @@ export class Cache {
|
|
|
70
67
|
size: stats.size,
|
|
71
68
|
});
|
|
72
69
|
}
|
|
73
|
-
// Sort by modification time (oldest first)
|
|
74
70
|
files.sort((a, b) => a.mtime - b.mtime);
|
|
75
|
-
// Remove oldest files if cache is too large
|
|
76
71
|
let currentSize = await this.getCacheSize();
|
|
77
72
|
for (const file of files) {
|
|
78
73
|
if (currentSize <= this.options.maxSize * 0.8) {
|
|
79
74
|
break;
|
|
80
|
-
}
|
|
75
|
+
}
|
|
81
76
|
await fs.unlink(file.path);
|
|
82
77
|
currentSize -= file.size / (1024 * 1024);
|
|
83
78
|
}
|
|
84
79
|
}
|
|
85
80
|
catch {
|
|
86
|
-
// Ignore cleanup errors
|
|
87
81
|
}
|
|
88
82
|
}
|
|
89
83
|
async get(key) {
|
|
90
84
|
await this.initialized;
|
|
91
85
|
const cachePath = this.getCachePath(key);
|
|
92
86
|
try {
|
|
93
|
-
// Check if file exists
|
|
94
87
|
try {
|
|
95
88
|
await fs.access(cachePath);
|
|
96
89
|
}
|
|
@@ -117,14 +110,12 @@ export class Cache {
|
|
|
117
110
|
timestamp: Date.now(),
|
|
118
111
|
};
|
|
119
112
|
await fs.writeFile(cachePath, JSON.stringify(cacheData));
|
|
120
|
-
// Cleanup if cache is getting too large
|
|
121
113
|
const currentSize = await this.getCacheSize();
|
|
122
114
|
if (currentSize > this.options.maxSize) {
|
|
123
115
|
await this.cleanup();
|
|
124
116
|
}
|
|
125
117
|
}
|
|
126
118
|
catch {
|
|
127
|
-
// Ignore cache write errors
|
|
128
119
|
}
|
|
129
120
|
}
|
|
130
121
|
async clear() {
|
|
@@ -134,7 +125,6 @@ export class Cache {
|
|
|
134
125
|
await Promise.all(files.map((file) => fs.unlink(path.join(this.cacheDir, file))));
|
|
135
126
|
}
|
|
136
127
|
catch {
|
|
137
|
-
// Ignore clear errors
|
|
138
128
|
}
|
|
139
129
|
}
|
|
140
130
|
async invalidate(key) {
|
|
@@ -144,9 +134,7 @@ export class Cache {
|
|
|
144
134
|
await fs.unlink(cachePath);
|
|
145
135
|
}
|
|
146
136
|
catch {
|
|
147
|
-
// Ignore delete errors (file might not exist)
|
|
148
137
|
}
|
|
149
138
|
}
|
|
150
139
|
}
|
|
151
140
|
export default Cache;
|
|
152
|
-
//# sourceMappingURL=cache.js.map
|
package/dist/utils/constants.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
// API Constants
|
|
2
1
|
export const PAYMONGO_API_BASE = 'https://api.paymongo.com';
|
|
3
2
|
export const PAYMONGO_API_VERSION = 'v1';
|
|
4
|
-
// Webhook Events
|
|
5
3
|
export const WEBHOOK_EVENTS = [
|
|
6
4
|
'payment.paid',
|
|
7
5
|
'payment.failed',
|
|
@@ -10,24 +8,17 @@ export const WEBHOOK_EVENTS = [
|
|
|
10
8
|
'checkout_session.payment.paid',
|
|
11
9
|
'qrph.expired',
|
|
12
10
|
];
|
|
13
|
-
// Environment Constants
|
|
14
11
|
export const ENVIRONMENTS = ['test', 'live'];
|
|
15
|
-
// File Paths
|
|
16
12
|
export const CONFIG_FILE_NAME = '.paymongo';
|
|
17
13
|
export const ENV_FILE_NAME = '.env';
|
|
18
|
-
// CLI Constants
|
|
19
14
|
export const CLI_NAME = 'paymongo';
|
|
20
15
|
export const CLI_VERSION = '1.0.0';
|
|
21
|
-
|
|
22
|
-
export const REQUEST_TIMEOUT = 30000; // 30 seconds
|
|
16
|
+
export const REQUEST_TIMEOUT = 30000;
|
|
23
17
|
export const MAX_RETRIES = 3;
|
|
24
|
-
export const RETRY_DELAY = 1000;
|
|
25
|
-
// Development Constants
|
|
18
|
+
export const RETRY_DELAY = 1000;
|
|
26
19
|
export const DEFAULT_DEV_PORT = 3000;
|
|
27
20
|
export const DEFAULT_WEBHOOK_PATH = '/webhook';
|
|
28
|
-
// Logging Constants
|
|
29
21
|
export const LOG_LEVELS = ['error', 'warn', 'info', 'debug'];
|
|
30
|
-
// Error Messages
|
|
31
22
|
export const ERROR_MESSAGES = {
|
|
32
23
|
INVALID_API_KEY: 'Invalid API key format',
|
|
33
24
|
INVALID_WEBHOOK_URL: 'Invalid webhook URL. Must be HTTPS or localhost',
|
|
@@ -38,7 +29,6 @@ export const ERROR_MESSAGES = {
|
|
|
38
29
|
RATE_LIMITED: 'Rate limited. Please try again later',
|
|
39
30
|
SERVER_ERROR: 'Server error. Please try again later',
|
|
40
31
|
};
|
|
41
|
-
// Success Messages
|
|
42
32
|
export const SUCCESS_MESSAGES = {
|
|
43
33
|
CONFIG_SAVED: 'Configuration saved successfully',
|
|
44
34
|
WEBHOOK_CREATED: 'Webhook created successfully',
|
|
@@ -46,4 +36,3 @@ export const SUCCESS_MESSAGES = {
|
|
|
46
36
|
LOGIN_SUCCESSFUL: 'Login successful',
|
|
47
37
|
DEV_SERVER_STARTED: 'Development server started',
|
|
48
38
|
};
|
|
49
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAYA,qBAAa,aAAc,SAAQ,KAAK;IAG7B,IAAI,CAAC,EAAE,MAAM;IACb,UAAU,CAAC,EAAE,MAAM;gBAF1B,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,UAAU,CAAC,EAAE,MAAM,YAAA;CAK7B;AAED,qBAAa,WAAY,SAAQ,KAAK;IAG3B,UAAU,CAAC,EAAE,MAAM;gBAD1B,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA;CAK7B;AAED,qBAAa,WAAY,SAAQ,KAAK;IAG3B,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ;gBADpC,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,YAAA;CAKvC;AAED,qBAAa,YAAa,SAAQ,KAAK;IAG5B,aAAa,CAAC,EAAE,KAAK;gBAD5B,OAAO,EAAE,MAAM,EACR,aAAa,CAAC,EAAE,KAAK,YAAA;CAK/B;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,CAAC,EAAE,MAAM;gBADrB,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA;CAKxB;AAED,qBAAa,YAAa,SAAQ,KAAK;IAG5B,SAAS,CAAC,EAAE,MAAM;gBADzB,OAAO,EAAE,MAAM,EACR,SAAS,CAAC,EAAE,MAAM,YAAA;CAK5B;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CA8CZ"}
|
package/dist/utils/errors.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
let retryLogger;
|
|
2
|
+
async function getRetryLogger() {
|
|
3
|
+
if (!retryLogger) {
|
|
4
|
+
const module = await import('./logger.js');
|
|
5
|
+
retryLogger = new module.default({ level: 'info' });
|
|
6
|
+
}
|
|
7
|
+
return retryLogger;
|
|
8
|
+
}
|
|
1
9
|
export class PayMongoError extends Error {
|
|
2
10
|
code;
|
|
3
11
|
statusCode;
|
|
@@ -50,11 +58,13 @@ export class WebhookError extends Error {
|
|
|
50
58
|
}
|
|
51
59
|
export async function withRetry(operation, options = {}) {
|
|
52
60
|
const { maxRetries = 3, delayMs = 1000, backoffMultiplier = 2, silent = false, retryCondition = (error) => {
|
|
53
|
-
|
|
54
|
-
return error.name === 'NetworkError' ||
|
|
61
|
+
return (error.name === 'NetworkError' ||
|
|
55
62
|
(error.message.includes('Network error') && !error.message.includes('401')) ||
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
error.message.includes('timeout') ||
|
|
64
|
+
error.message.includes('ECONNRESET') ||
|
|
65
|
+
(error instanceof PayMongoError &&
|
|
66
|
+
(error.code === 'RATE_LIMIT_EXCEEDED' || error.statusCode === 429)));
|
|
67
|
+
}, } = options;
|
|
58
68
|
let lastError = new Error('Operation failed');
|
|
59
69
|
let currentDelay = delayMs;
|
|
60
70
|
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
@@ -67,12 +77,17 @@ export async function withRetry(operation, options = {}) {
|
|
|
67
77
|
throw lastError;
|
|
68
78
|
}
|
|
69
79
|
if (!silent) {
|
|
70
|
-
|
|
80
|
+
const logger = await getRetryLogger();
|
|
81
|
+
if (error instanceof PayMongoError && error.code === 'RATE_LIMIT_EXCEEDED') {
|
|
82
|
+
logger.info(`Rate limit reached, waiting ${currentDelay}ms before retry...`);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger.info(`Attempt ${attempt + 1} failed, retrying in ${currentDelay}ms...`);
|
|
86
|
+
}
|
|
71
87
|
}
|
|
72
|
-
await new Promise(resolve => setTimeout(resolve, currentDelay));
|
|
88
|
+
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
73
89
|
currentDelay *= backoffMultiplier;
|
|
74
90
|
}
|
|
75
91
|
}
|
|
76
92
|
throw lastError;
|
|
77
93
|
}
|
|
78
|
-
//# sourceMappingURL=errors.js.map
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -4,8 +4,10 @@ export interface LoggerOptions {
|
|
|
4
4
|
}
|
|
5
5
|
type LogMeta = Error | Record<string, unknown> | string | number | boolean | undefined;
|
|
6
6
|
declare class Logger {
|
|
7
|
-
private
|
|
7
|
+
private level;
|
|
8
8
|
constructor(options?: LoggerOptions);
|
|
9
|
+
private shouldLog;
|
|
10
|
+
private formatMessage;
|
|
9
11
|
error(message: string, ...meta: LogMeta[]): void;
|
|
10
12
|
warn(message: string, ...meta: LogMeta[]): void;
|
|
11
13
|
info(message: string, ...meta: LogMeta[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvF,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAA+C;gBAEhD,OAAO,GAAE,aAAkB;IAIvC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;IAkBrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAO/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAO/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAQhD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG/B;AAED,eAAe,MAAM,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,40 +1,54 @@
|
|
|
1
|
-
import winston from 'winston';
|
|
2
1
|
import chalk from 'chalk';
|
|
3
2
|
class Logger {
|
|
4
|
-
|
|
3
|
+
level = 'info';
|
|
5
4
|
constructor(options = {}) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
this.level = options.level ?? 'info';
|
|
6
|
+
}
|
|
7
|
+
shouldLog(requestedLevel) {
|
|
8
|
+
const levels = { error: 0, warn: 1, info: 2, debug: 3 };
|
|
9
|
+
return levels[requestedLevel] <= levels[this.level];
|
|
10
|
+
}
|
|
11
|
+
formatMessage(message, meta) {
|
|
12
|
+
let output = message;
|
|
13
|
+
if (meta && meta.length > 0) {
|
|
14
|
+
meta.forEach((item) => {
|
|
15
|
+
if (item instanceof Error) {
|
|
16
|
+
output += ` ${item.message}`;
|
|
17
|
+
}
|
|
18
|
+
else if (typeof item === 'object') {
|
|
19
|
+
output += ` ${JSON.stringify(item)}`;
|
|
20
|
+
}
|
|
21
|
+
else if (item !== undefined) {
|
|
22
|
+
output += ` ${String(item)}`;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
19
25
|
}
|
|
20
|
-
|
|
21
|
-
level,
|
|
22
|
-
transports,
|
|
23
|
-
});
|
|
26
|
+
return output;
|
|
24
27
|
}
|
|
25
28
|
error(message, ...meta) {
|
|
26
|
-
this.
|
|
29
|
+
if (this.shouldLog('error')) {
|
|
30
|
+
const formatted = this.formatMessage(message, meta);
|
|
31
|
+
console.error(chalk.red('ERROR:'), formatted);
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
warn(message, ...meta) {
|
|
29
|
-
this.
|
|
35
|
+
if (this.shouldLog('warn')) {
|
|
36
|
+
const formatted = this.formatMessage(message, meta);
|
|
37
|
+
console.warn(chalk.yellow('WARN:'), formatted);
|
|
38
|
+
}
|
|
30
39
|
}
|
|
31
40
|
info(message, ...meta) {
|
|
32
|
-
this.
|
|
41
|
+
if (this.shouldLog('info')) {
|
|
42
|
+
const formatted = this.formatMessage(message, meta);
|
|
43
|
+
console.info(chalk.blue('INFO:'), formatted);
|
|
44
|
+
}
|
|
33
45
|
}
|
|
34
46
|
debug(message, ...meta) {
|
|
35
|
-
this.
|
|
47
|
+
if (this.shouldLog('debug')) {
|
|
48
|
+
const formatted = this.formatMessage(message, meta);
|
|
49
|
+
console.debug(chalk.gray('DEBUG:'), formatted);
|
|
50
|
+
}
|
|
36
51
|
}
|
|
37
|
-
// Convenience methods with chalk colors
|
|
38
52
|
success(message) {
|
|
39
53
|
console.log(chalk.green('✓'), message);
|
|
40
54
|
}
|
|
@@ -46,4 +60,3 @@ class Logger {
|
|
|
46
60
|
}
|
|
47
61
|
}
|
|
48
62
|
export default Logger;
|
|
49
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/spinner.js
CHANGED
package/dist/utils/validator.js
CHANGED
|
@@ -10,8 +10,6 @@ export function validateApiKey(key, type) {
|
|
|
10
10
|
if (!key || typeof key !== 'string') {
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
|
-
// PayMongo API keys follow the format: pk_{env}_XXXXXXXXXXXXXXXXXX
|
|
14
|
-
// where env is 'test' or 'live', and X is alphanumeric characters
|
|
15
13
|
const prefix = type === 'public' ? 'pk_' : 'sk_';
|
|
16
14
|
const pattern = new RegExp(`^${prefix}(test|live)_[a-zA-Z0-9]{20,}$`);
|
|
17
15
|
return pattern.test(key);
|
|
@@ -69,4 +67,3 @@ export function validateEventTypes(events) {
|
|
|
69
67
|
throw new ValidationError(`Invalid event types: ${invalidEvents.join(', ')}`);
|
|
70
68
|
}
|
|
71
69
|
}
|
|
72
|
-
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { WebhookEventPayload } from '../types/paymongo.js';
|
|
2
|
+
export interface StoredWebhookEvent {
|
|
3
|
+
id: string;
|
|
4
|
+
event: string;
|
|
5
|
+
url: string;
|
|
6
|
+
payload: WebhookEventPayload;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
status: 'delivered' | 'failed';
|
|
9
|
+
response?: Record<string, unknown>;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
declare class WebhookEventStore {
|
|
13
|
+
private storePath;
|
|
14
|
+
constructor();
|
|
15
|
+
storeEvent(event: StoredWebhookEvent): Promise<void>;
|
|
16
|
+
loadEvents(): Promise<StoredWebhookEvent[]>;
|
|
17
|
+
getEventById(id: string): Promise<StoredWebhookEvent | null>;
|
|
18
|
+
getEventsByType(eventType: string, limit?: number): Promise<StoredWebhookEvent[]>;
|
|
19
|
+
clearEvents(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export default WebhookEventStore;
|
|
22
|
+
//# sourceMappingURL=webhook-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-store.d.ts","sourceRoot":"","sources":["../../src/utils/webhook-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,iBAAiB;IACrB,OAAO,CAAC,SAAS,CAAS;;IAapB,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD,UAAU,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAY3C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAK5D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKrF,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CASnC;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
class WebhookEventStore {
|
|
5
|
+
storePath;
|
|
6
|
+
constructor() {
|
|
7
|
+
const paymongoDir = path.join(os.homedir(), '.paymongo');
|
|
8
|
+
this.storePath = path.join(paymongoDir, 'webhook-events.json');
|
|
9
|
+
if (!fs.existsSync(paymongoDir)) {
|
|
10
|
+
fs.mkdirSync(paymongoDir, { recursive: true });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
async storeEvent(event) {
|
|
14
|
+
try {
|
|
15
|
+
const events = await this.loadEvents();
|
|
16
|
+
events.push(event);
|
|
17
|
+
if (events.length > 1000) {
|
|
18
|
+
events.splice(0, events.length - 1000);
|
|
19
|
+
}
|
|
20
|
+
fs.writeFileSync(this.storePath, JSON.stringify(events, null, 2));
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.warn('Failed to store webhook event:', error);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async loadEvents() {
|
|
27
|
+
try {
|
|
28
|
+
if (!fs.existsSync(this.storePath)) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const data = fs.readFileSync(this.storePath, 'utf-8');
|
|
32
|
+
return JSON.parse(data);
|
|
33
|
+
}
|
|
34
|
+
catch (_error) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async getEventById(id) {
|
|
39
|
+
const events = await this.loadEvents();
|
|
40
|
+
return events.find((event) => event.id === id) || null;
|
|
41
|
+
}
|
|
42
|
+
async getEventsByType(eventType, limit = 10) {
|
|
43
|
+
const events = await this.loadEvents();
|
|
44
|
+
return events.filter((event) => event.event === eventType).slice(-limit);
|
|
45
|
+
}
|
|
46
|
+
async clearEvents() {
|
|
47
|
+
try {
|
|
48
|
+
if (fs.existsSync(this.storePath)) {
|
|
49
|
+
fs.unlinkSync(this.storePath);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.warn('Failed to clear webhook events:', error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export default WebhookEventStore;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-store.js","sourceRoot":"","sources":["../../src/utils/webhook-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,76 +1,74 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "paymongo-cli",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Developer-first CLI tool for PayMongo integration development with local webhook forwarding, payment testing, and team collaboration features. See USER_GUIDE.md for comprehensive documentation.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"paymongo": "bin/paymongo.js"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"build:incremental": "tsc --incremental",
|
|
13
|
-
"dev": "tsc --watch",
|
|
14
|
-
"start": "node dist/index.js",
|
|
15
|
-
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
|
16
|
-
"test:watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch",
|
|
17
|
-
"lint": "eslint src/**/*.ts tests/**/*.ts",
|
|
18
|
-
"lint:fix": "eslint src/**/*.ts --fix",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"@
|
|
47
|
-
"
|
|
48
|
-
"chalk": "^5.3.0",
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"jest": "^
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "paymongo-cli",
|
|
3
|
+
"version": "1.4.1",
|
|
4
|
+
"description": "Developer-first CLI tool for PayMongo integration development with local webhook forwarding, payment testing, and team collaboration features. See USER_GUIDE.md for comprehensive documentation.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"paymongo": "bin/paymongo.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"build:incremental": "tsc --incremental",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
|
16
|
+
"test:watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch",
|
|
17
|
+
"lint": "NODE_OPTIONS='--max-old-space-size=4096' eslint src/**/*.ts tests/**/*.ts",
|
|
18
|
+
"lint:fix": "eslint src/**/*.ts --fix",
|
|
19
|
+
"lint:src": "NODE_OPTIONS='--max-old-space-size=4096' eslint src/**/*.ts",
|
|
20
|
+
"lint:tests": "NODE_OPTIONS='--max-old-space-size=4096' eslint tests/**/*.ts",
|
|
21
|
+
"format": "prettier --write src/**/*.ts",
|
|
22
|
+
"benchmark": "npx tsx scripts/benchmark.ts",
|
|
23
|
+
"prepare": "npm run build"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"paymongo",
|
|
27
|
+
"cli",
|
|
28
|
+
"payments",
|
|
29
|
+
"webhooks",
|
|
30
|
+
"development"
|
|
31
|
+
],
|
|
32
|
+
"author": "Leodyver Semilla",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/leodyversemilla07/paymongo-cli.git"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/leodyversemilla07/paymongo-cli/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/leodyversemilla07/paymongo-cli#readme",
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=22.13.0"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@inquirer/prompts": "^8.2.0",
|
|
47
|
+
"@ngrok/ngrok": "^1.7.0",
|
|
48
|
+
"chalk": "^5.3.0",
|
|
49
|
+
"cli-table3": "^0.6.5",
|
|
50
|
+
"commander": "^14.0.2",
|
|
51
|
+
"cosmiconfig": "^9.0.0",
|
|
52
|
+
"ora": "^9.1.0",
|
|
53
|
+
"undici": "^6.19.0",
|
|
54
|
+
"zod": "^4.3.6"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@eslint/js": "^9.0.0",
|
|
58
|
+
"@types/jest": "^30.0.0",
|
|
59
|
+
"@types/node": "^25.0.10",
|
|
60
|
+
"eslint": "^9.0.0",
|
|
61
|
+
"globals": "^17.1.0",
|
|
62
|
+
"jest": "^30.2.0",
|
|
63
|
+
"jiti": "^2.6.1",
|
|
64
|
+
"prettier": "^3.1.1",
|
|
65
|
+
"ts-jest": "^29.4.6",
|
|
66
|
+
"ts-node": "^10.9.2",
|
|
67
|
+
"tsx": "^4.7.0",
|
|
68
|
+
"typescript": "^5.3.3",
|
|
69
|
+
"typescript-eslint": "^8.0.0"
|
|
70
|
+
},
|
|
71
|
+
"publishConfig": {
|
|
72
|
+
"access": "public"
|
|
73
|
+
}
|
|
74
|
+
}
|