paymongo-cli 1.1.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.
Files changed (123) hide show
  1. package/.github/copilot-instructions.md +95 -0
  2. package/.github/workflows/release.yml +15 -0
  3. package/AGENTS.md +418 -0
  4. package/CHANGELOG.md +331 -141
  5. package/README.md +93 -12
  6. package/TESTING.md +235 -0
  7. package/coverage/base.css +224 -0
  8. package/coverage/block-navigation.js +87 -0
  9. package/coverage/favicon.png +0 -0
  10. package/coverage/index.html +281 -0
  11. package/coverage/lcov-report/base.css +224 -0
  12. package/coverage/lcov-report/block-navigation.js +87 -0
  13. package/coverage/lcov-report/favicon.png +0 -0
  14. package/coverage/lcov-report/index.html +281 -0
  15. package/coverage/lcov-report/prettify.css +1 -0
  16. package/coverage/lcov-report/prettify.js +2 -0
  17. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  18. package/coverage/lcov-report/sorter.js +210 -0
  19. package/coverage/lcov.info +5053 -0
  20. package/coverage/prettify.css +1 -0
  21. package/coverage/prettify.js +2 -0
  22. package/coverage/sort-arrow-sprite.png +0 -0
  23. package/coverage/sorter.js +210 -0
  24. package/dist/.tsbuildinfo +1 -1
  25. package/dist/commands/config.d.ts +17 -0
  26. package/dist/commands/config.d.ts.map +1 -1
  27. package/dist/commands/config.js +272 -56
  28. package/dist/commands/config.js.map +1 -1
  29. package/dist/commands/dev.d.ts +13 -1
  30. package/dist/commands/dev.d.ts.map +1 -1
  31. package/dist/commands/dev.js +269 -42
  32. package/dist/commands/dev.js.map +1 -1
  33. package/dist/commands/env.d.ts +4 -0
  34. package/dist/commands/env.d.ts.map +1 -0
  35. package/dist/commands/env.js +106 -0
  36. package/dist/commands/env.js.map +1 -0
  37. package/dist/commands/generate.js +1184 -0
  38. package/dist/commands/init.d.ts +11 -0
  39. package/dist/commands/init.d.ts.map +1 -1
  40. package/dist/commands/init.js +33 -33
  41. package/dist/commands/init.js.map +1 -1
  42. package/dist/commands/login.d.ts +17 -1
  43. package/dist/commands/login.d.ts.map +1 -1
  44. package/dist/commands/login.js +5 -20
  45. package/dist/commands/login.js.map +1 -1
  46. package/dist/commands/payments.d.ts +37 -0
  47. package/dist/commands/payments.d.ts.map +1 -1
  48. package/dist/commands/payments.js +367 -32
  49. package/dist/commands/payments.js.map +1 -1
  50. package/dist/commands/team/index.d.ts.map +1 -1
  51. package/dist/commands/team/index.js +192 -95
  52. package/dist/commands/team/index.js.map +1 -1
  53. package/dist/commands/trigger.d.ts.map +1 -1
  54. package/dist/commands/trigger.js +323 -66
  55. package/dist/commands/trigger.js.map +1 -1
  56. package/dist/commands/webhooks.d.ts +19 -0
  57. package/dist/commands/webhooks.d.ts.map +1 -1
  58. package/dist/commands/webhooks.js +251 -69
  59. package/dist/commands/webhooks.js.map +1 -1
  60. package/dist/index.js +56 -32
  61. package/dist/index.js.map +1 -1
  62. package/dist/services/analytics/service.js +6 -8
  63. package/dist/services/api/client.d.ts +6 -8
  64. package/dist/services/api/client.d.ts.map +1 -1
  65. package/dist/services/api/client.js +20 -131
  66. package/dist/services/api/client.js.map +1 -1
  67. package/dist/services/api/rate-limiter.d.ts +64 -0
  68. package/dist/services/api/rate-limiter.d.ts.map +1 -0
  69. package/dist/services/api/rate-limiter.js +83 -0
  70. package/dist/services/api/rate-limiter.js.map +1 -0
  71. package/dist/services/api/undici-client.d.ts +39 -0
  72. package/dist/services/api/undici-client.d.ts.map +1 -0
  73. package/dist/services/api/undici-client.js +294 -0
  74. package/dist/services/api/undici-client.js.map +1 -0
  75. package/dist/services/config/manager.js +1 -16
  76. package/dist/services/dev/process-manager.d.ts +50 -0
  77. package/dist/services/dev/process-manager.d.ts.map +1 -0
  78. package/dist/services/dev/process-manager.js +103 -0
  79. package/dist/services/dev/process-manager.js.map +1 -0
  80. package/dist/services/github/client.d.ts +41 -0
  81. package/dist/services/github/client.d.ts.map +1 -1
  82. package/dist/services/github/client.js +28 -0
  83. package/dist/services/github/client.js.map +1 -1
  84. package/dist/services/github/sync.js +1 -1
  85. package/dist/services/github/sync.js.map +1 -1
  86. package/dist/services/payments/simulator.d.ts +28 -0
  87. package/dist/services/payments/simulator.d.ts.map +1 -0
  88. package/dist/services/payments/simulator.js +115 -0
  89. package/dist/services/payments/simulator.js.map +1 -0
  90. package/dist/services/team/service.d.ts +44 -0
  91. package/dist/services/team/service.d.ts.map +1 -0
  92. package/dist/services/team/service.js +153 -0
  93. package/dist/services/team/service.js.map +1 -0
  94. package/dist/services/web/server.d.ts.map +1 -1
  95. package/dist/services/web/server.js +4 -0
  96. package/dist/services/web/server.js.map +1 -1
  97. package/dist/types/paymongo.d.ts +41 -3
  98. package/dist/types/paymongo.d.ts.map +1 -1
  99. package/dist/types/paymongo.js +0 -1
  100. package/dist/types/schemas.js +0 -8
  101. package/dist/utils/bulk.d.ts +62 -0
  102. package/dist/utils/bulk.d.ts.map +1 -0
  103. package/dist/utils/bulk.js +123 -0
  104. package/dist/utils/bulk.js.map +1 -0
  105. package/dist/utils/cache.js +4 -16
  106. package/dist/utils/constants.js +2 -13
  107. package/dist/utils/errors.d.ts.map +1 -1
  108. package/dist/utils/errors.js +23 -8
  109. package/dist/utils/errors.js.map +1 -1
  110. package/dist/utils/logger.d.ts +3 -1
  111. package/dist/utils/logger.d.ts.map +1 -1
  112. package/dist/utils/logger.js +38 -25
  113. package/dist/utils/logger.js.map +1 -1
  114. package/dist/utils/spinner.js +0 -1
  115. package/dist/utils/validator.js +1 -4
  116. package/dist/utils/validator.js.map +1 -1
  117. package/dist/utils/webhook-store.d.ts +22 -0
  118. package/dist/utils/webhook-store.d.ts.map +1 -0
  119. package/dist/utils/webhook-store.js +57 -0
  120. package/dist/utils/webhook-store.js.map +1 -0
  121. package/eslint.config.ts +29 -2
  122. package/package.json +74 -76
  123. package/web/index.html +0 -688
@@ -1,27 +1,22 @@
1
1
  import { z } from 'zod';
2
- // API Keys schema
3
2
  const ApiKeysSchema = z.object({
4
3
  public: z.string().min(1, 'Public key is required'),
5
4
  secret: z.string().min(1, 'Secret key is required'),
6
5
  });
7
- // Webhooks config schema
8
6
  const WebhooksConfigSchema = z.object({
9
7
  url: z.string().url('Invalid webhook URL'),
10
8
  events: z.array(z.string()).min(1, 'At least one event is required'),
11
9
  });
12
- // Dev config schema
13
10
  const DevConfigSchema = z.object({
14
11
  port: z.number().int().min(1).max(65535),
15
12
  autoRegisterWebhook: z.boolean(),
16
13
  verifyWebhookSignatures: z.boolean(),
17
14
  });
18
- // Team config schema (optional)
19
15
  const TeamConfigSchema = z.object({
20
16
  githubToken: z.string().optional(),
21
17
  repo: z.string().optional(),
22
18
  branch: z.string().optional(),
23
19
  }).optional();
24
- // Main PayMongo config schema
25
20
  export const PayMongoConfigSchema = z.object({
26
21
  version: z.string().min(1, 'Version is required'),
27
22
  projectName: z.string().min(1, 'Project name is required'),
@@ -35,7 +30,6 @@ export const PayMongoConfigSchema = z.object({
35
30
  dev: DevConfigSchema,
36
31
  team: TeamConfigSchema,
37
32
  });
38
- // Validation helper
39
33
  export function validateConfig(config) {
40
34
  const result = PayMongoConfigSchema.safeParse(config);
41
35
  if (result.success) {
@@ -47,7 +41,6 @@ export function validateConfig(config) {
47
41
  });
48
42
  return { success: false, errors };
49
43
  }
50
- // Partial config validation for updates
51
44
  export const PartialPayMongoConfigSchema = PayMongoConfigSchema.partial();
52
45
  export function validatePartialConfig(config) {
53
46
  const result = PartialPayMongoConfigSchema.safeParse(config);
@@ -60,4 +53,3 @@ export function validatePartialConfig(config) {
60
53
  });
61
54
  return { success: false, errors };
62
55
  }
63
- //# sourceMappingURL=schemas.js.map
@@ -0,0 +1,62 @@
1
+ import { WebhookData, PaymentDataFull } from '../types/paymongo.js';
2
+ export interface BulkExportData<T = unknown> {
3
+ metadata: {
4
+ exported_at: string;
5
+ exported_by: string;
6
+ version: string;
7
+ environment: string;
8
+ };
9
+ data: T[];
10
+ }
11
+ export interface BulkWebhookExport extends BulkExportData {
12
+ data: WebhookData[];
13
+ }
14
+ export interface BulkPaymentsExport extends BulkExportData {
15
+ data: PaymentDataFull[];
16
+ }
17
+ export declare class BulkOperations {
18
+ private static readonly EXPORT_VERSION;
19
+ /**
20
+ * Export webhooks to JSON file
21
+ */
22
+ static exportWebhooks(webhooks: WebhookData[], filename: string, environment: string): Promise<string>;
23
+ /**
24
+ * Export payments to JSON file
25
+ */
26
+ static exportPayments(payments: PaymentDataFull[], filename: string, environment: string): Promise<string>;
27
+ /**
28
+ * Import webhooks from JSON file
29
+ */
30
+ static importWebhooks(filename: string): Promise<{
31
+ webhooks: WebhookData[];
32
+ metadata: BulkExportData['metadata'];
33
+ }>;
34
+ /**
35
+ * Import payments from JSON file
36
+ */
37
+ static importPayments(filename: string): Promise<{
38
+ payments: PaymentDataFull[];
39
+ metadata: BulkExportData['metadata'];
40
+ }>;
41
+ /**
42
+ * Validate imported data structure
43
+ */
44
+ private static validateImportData;
45
+ /**
46
+ * Validate webhook data structure
47
+ */
48
+ private static validateWebhookData;
49
+ /**
50
+ * Validate payment data structure
51
+ */
52
+ private static validatePaymentData;
53
+ /**
54
+ * Generate default filename with timestamp
55
+ */
56
+ static generateFilename(type: 'webhooks' | 'payments', environment: string): string;
57
+ /**
58
+ * Ensure file has .json extension
59
+ */
60
+ static ensureJsonExtension(filename: string): string;
61
+ }
62
+ //# sourceMappingURL=bulk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.d.ts","sourceRoot":"","sources":["../../src/utils/bulk.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGpE,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,CAAC,EAAE,CAAC;CACX;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAE/C;;OAEG;WACU,cAAc,CACzB,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAgBlB;;OAEG;WACU,cAAc,CACzB,QAAQ,EAAE,eAAe,EAAE,EAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAgBlB;;OAEG;WACU,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QACrD,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;KACtC,CAAC;IAYF;;OAEG;WACU,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QACrD,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5B,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;KACtC,CAAC;IAYF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiDjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmClC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmClC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAKnF;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAMrD"}
@@ -0,0 +1,123 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import { PayMongoError } from './errors.js';
4
+ export class BulkOperations {
5
+ static EXPORT_VERSION = '1.0';
6
+ static async exportWebhooks(webhooks, filename, environment) {
7
+ const exportData = {
8
+ metadata: {
9
+ exported_at: new Date().toISOString(),
10
+ exported_by: 'paymongo-cli',
11
+ version: this.EXPORT_VERSION,
12
+ environment,
13
+ },
14
+ data: webhooks,
15
+ };
16
+ const jsonContent = JSON.stringify(exportData, null, 2);
17
+ await fs.writeFile(filename, jsonContent, 'utf-8');
18
+ return filename;
19
+ }
20
+ static async exportPayments(payments, filename, environment) {
21
+ const exportData = {
22
+ metadata: {
23
+ exported_at: new Date().toISOString(),
24
+ exported_by: 'paymongo-cli',
25
+ version: this.EXPORT_VERSION,
26
+ environment,
27
+ },
28
+ data: payments,
29
+ };
30
+ const jsonContent = JSON.stringify(exportData, null, 2);
31
+ await fs.writeFile(filename, jsonContent, 'utf-8');
32
+ return filename;
33
+ }
34
+ static async importWebhooks(filename) {
35
+ const content = await fs.readFile(filename, 'utf-8');
36
+ const data = JSON.parse(content);
37
+ this.validateImportData(data, 'webhooks');
38
+ return {
39
+ webhooks: data.data,
40
+ metadata: data.metadata,
41
+ };
42
+ }
43
+ static async importPayments(filename) {
44
+ const content = await fs.readFile(filename, 'utf-8');
45
+ const data = JSON.parse(content);
46
+ this.validateImportData(data, 'payments');
47
+ return {
48
+ payments: data.data,
49
+ metadata: data.metadata,
50
+ };
51
+ }
52
+ static validateImportData(data, type) {
53
+ if (!data || typeof data !== 'object') {
54
+ throw new PayMongoError('Invalid file format - not a valid JSON object', 'INVALID_FILE_FORMAT', 400);
55
+ }
56
+ const obj = data;
57
+ if (!obj.metadata || !obj.data || !Array.isArray(obj.data)) {
58
+ throw new PayMongoError('Invalid file format - missing required metadata or data fields', 'INVALID_FILE_FORMAT', 400);
59
+ }
60
+ const metadata = obj.metadata;
61
+ if (typeof metadata.version !== 'string') {
62
+ throw new PayMongoError('Invalid metadata - version must be a string', 'INVALID_FILE_FORMAT', 400);
63
+ }
64
+ if (metadata.version !== this.EXPORT_VERSION) {
65
+ throw new PayMongoError(`Unsupported export version: ${metadata.version}. Current version: ${this.EXPORT_VERSION}`, 'UNSUPPORTED_VERSION', 400);
66
+ }
67
+ if (obj.data.length === 0) {
68
+ throw new PayMongoError('No data found in export file', 'EMPTY_FILE', 400);
69
+ }
70
+ if (type === 'webhooks') {
71
+ this.validateWebhookData(obj.data);
72
+ }
73
+ else if (type === 'payments') {
74
+ this.validatePaymentData(obj.data);
75
+ }
76
+ }
77
+ static validateWebhookData(webhooks) {
78
+ for (const webhook of webhooks) {
79
+ if (!webhook || typeof webhook !== 'object') {
80
+ throw new PayMongoError('Invalid webhook data - not an object', 'INVALID_WEBHOOK_DATA', 400);
81
+ }
82
+ const obj = webhook;
83
+ if (!obj.id || !obj.type || !obj.attributes) {
84
+ throw new PayMongoError('Invalid webhook data structure - missing required fields', 'INVALID_WEBHOOK_DATA', 400);
85
+ }
86
+ if (obj.type !== 'webhook') {
87
+ throw new PayMongoError(`Invalid webhook type: ${obj.type}`, 'INVALID_WEBHOOK_TYPE', 400);
88
+ }
89
+ const attrs = obj.attributes;
90
+ if (!attrs.url || !attrs.events || !Array.isArray(attrs.events)) {
91
+ throw new PayMongoError('Invalid webhook attributes - missing url or events', 'INVALID_WEBHOOK_ATTRIBUTES', 400);
92
+ }
93
+ }
94
+ }
95
+ static validatePaymentData(payments) {
96
+ for (const payment of payments) {
97
+ if (!payment || typeof payment !== 'object') {
98
+ throw new PayMongoError('Invalid payment data - not an object', 'INVALID_PAYMENT_DATA', 400);
99
+ }
100
+ const obj = payment;
101
+ if (!obj.id || !obj.type || !obj.attributes) {
102
+ throw new PayMongoError('Invalid payment data structure - missing required fields', 'INVALID_PAYMENT_DATA', 400);
103
+ }
104
+ if (obj.type !== 'payment') {
105
+ throw new PayMongoError(`Invalid payment type: ${obj.type}`, 'INVALID_PAYMENT_TYPE', 400);
106
+ }
107
+ const attrs = obj.attributes;
108
+ if (typeof attrs.amount !== 'number' || !attrs.currency) {
109
+ throw new PayMongoError('Invalid payment attributes - missing amount or currency', 'INVALID_PAYMENT_ATTRIBUTES', 400);
110
+ }
111
+ }
112
+ }
113
+ static generateFilename(type, environment) {
114
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('T')[0];
115
+ return `${type}_${environment}_${timestamp}.json`;
116
+ }
117
+ static ensureJsonExtension(filename) {
118
+ if (path.extname(filename).toLowerCase() === '.json') {
119
+ return filename;
120
+ }
121
+ return filename + '.json';
122
+ }
123
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../src/utils/bulk.ts"],"names":[],"mappings":"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"}
@@ -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, // 5 minutes default
12
- maxSize: options.maxSize || 10, // 10MB default
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); // MB
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
- } // Keep 80% of max size
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
@@ -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
- // HTTP Constants
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; // 1 second
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":"AAAA,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;IACA,UAAU,CAAC,EAAE,MAAM;gBAA3C,OAAO,EAAE,MAAM,EAAS,UAAU,CAAC,EAAE,MAAM,YAAA;CAIxD;AAED,qBAAa,WAAY,SAAQ,KAAK;IACA,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ;gBAArD,OAAO,EAAE,MAAM,EAAS,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,YAAA;CAIlE;AAED,qBAAa,YAAa,SAAQ,KAAK;IACD,aAAa,CAAC,EAAE,KAAK;gBAA7C,OAAO,EAAE,MAAM,EAAS,aAAa,CAAC,EAAE,KAAK,YAAA;CAI1D;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACJ,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM,YAAA;CAInD;AAED,qBAAa,YAAa,SAAQ,KAAK;IACD,SAAS,CAAC,EAAE,MAAM;gBAA1C,OAAO,EAAE,MAAM,EAAS,SAAS,CAAC,EAAE,MAAM,YAAA;CAIvD;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,CAoCZ"}
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"}
@@ -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,12 +58,14 @@ 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
- // Default: retry on network errors and 5xx status codes
54
- return error.name === 'NetworkError' ||
61
+ return (error.name === 'NetworkError' ||
55
62
  (error.message.includes('Network error') && !error.message.includes('401')) ||
56
- (error.message.includes('timeout') || error.message.includes('ECONNRESET'));
57
- } } = options;
58
- let lastError;
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;
68
+ let lastError = new Error('Operation failed');
59
69
  let currentDelay = delayMs;
60
70
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
61
71
  try {
@@ -67,12 +77,17 @@ export async function withRetry(operation, options = {}) {
67
77
  throw lastError;
68
78
  }
69
79
  if (!silent) {
70
- console.log(`Attempt ${attempt + 1} failed, retrying in ${currentDelay}ms...`);
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
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -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 logger;
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":"AAGA,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,MAAM,CAAiB;gBAEnB,OAAO,GAAE,aAAkB;IAgCvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKhD,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"}
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"}
@@ -1,40 +1,54 @@
1
- import winston from 'winston';
2
1
  import chalk from 'chalk';
3
2
  class Logger {
4
- logger;
3
+ level = 'info';
5
4
  constructor(options = {}) {
6
- const { level = 'info', file } = options;
7
- const transports = [
8
- new winston.transports.Console({
9
- level,
10
- format: winston.format.combine(winston.format.colorize(), winston.format.simple()),
11
- }),
12
- ];
13
- if (file) {
14
- transports.push(new winston.transports.File({
15
- filename: file,
16
- level,
17
- format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
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
- this.logger = winston.createLogger({
21
- level,
22
- transports,
23
- });
26
+ return output;
24
27
  }
25
28
  error(message, ...meta) {
26
- this.logger.error(message, ...meta);
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.logger.warn(message, ...meta);
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.logger.info(message, ...meta);
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.logger.debug(message, ...meta);
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
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,MAAM;IACF,MAAM,CAAiB;IAE/B,YAAY,UAAyB,EAAE;QACrC,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAEzC,MAAM,UAAU,GAAwB;YACtC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7B,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CACxB;aACF,CAAC;SACH,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CACb,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC1B,QAAQ,EAAE,IAAI;gBACd,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACtB;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YACjC,KAAK;YACL,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,wCAAwC;IACxC,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -47,4 +47,3 @@ class Spinner {
47
47
  }
48
48
  }
49
49
  export default Spinner;
50
- //# sourceMappingURL=spinner.js.map
@@ -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);
@@ -34,7 +32,7 @@ export function validateConfig(config) {
34
32
  if (!config.version) {
35
33
  throw new ValidationError('Config version is required', 'version');
36
34
  }
37
- if (!['test', 'live'].includes(config.environment)) {
35
+ if (!config.environment || !['test', 'live'].includes(config.environment)) {
38
36
  throw new ValidationError('Environment must be either "test" or "live"', 'environment');
39
37
  }
40
38
  const env = config.environment;
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"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"}