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.
Files changed (113) 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 -185
  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 +268 -55
  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 +40 -56
  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 +2 -17
  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 +239 -75
  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 +246 -70
  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.js +0 -32
  77. package/dist/services/github/client.d.ts +41 -0
  78. package/dist/services/github/client.d.ts.map +1 -1
  79. package/dist/services/github/client.js +28 -0
  80. package/dist/services/github/client.js.map +1 -1
  81. package/dist/services/payments/simulator.d.ts +28 -0
  82. package/dist/services/payments/simulator.d.ts.map +1 -0
  83. package/dist/services/payments/simulator.js +115 -0
  84. package/dist/services/payments/simulator.js.map +1 -0
  85. package/dist/services/team/service.d.ts +44 -0
  86. package/dist/services/team/service.d.ts.map +1 -0
  87. package/dist/services/team/service.js +153 -0
  88. package/dist/services/team/service.js.map +1 -0
  89. package/dist/types/paymongo.d.ts +36 -3
  90. package/dist/types/paymongo.d.ts.map +1 -1
  91. package/dist/types/paymongo.js +0 -1
  92. package/dist/types/schemas.js +0 -8
  93. package/dist/utils/bulk.d.ts +62 -0
  94. package/dist/utils/bulk.d.ts.map +1 -0
  95. package/dist/utils/bulk.js +123 -0
  96. package/dist/utils/bulk.js.map +1 -0
  97. package/dist/utils/cache.js +4 -16
  98. package/dist/utils/constants.js +2 -13
  99. package/dist/utils/errors.d.ts.map +1 -1
  100. package/dist/utils/errors.js +22 -7
  101. package/dist/utils/errors.js.map +1 -1
  102. package/dist/utils/logger.d.ts +3 -1
  103. package/dist/utils/logger.d.ts.map +1 -1
  104. package/dist/utils/logger.js +38 -25
  105. package/dist/utils/logger.js.map +1 -1
  106. package/dist/utils/spinner.js +0 -1
  107. package/dist/utils/validator.js +0 -3
  108. package/dist/utils/webhook-store.d.ts +22 -0
  109. package/dist/utils/webhook-store.d.ts.map +1 -0
  110. package/dist/utils/webhook-store.js +57 -0
  111. package/dist/utils/webhook-store.js.map +1 -0
  112. package/package.json +74 -76
  113. package/web/index.html +0 -688
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../src/utils/bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAoB5C,MAAM,OAAO,cAAc;IACjB,MAAM,CAAU,cAAc,GAAG,KAAK,CAAC;IAE/C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CACzB,QAAuB,EACvB,QAAgB,EAChB,WAAmB;QAEnB,MAAM,UAAU,GAAsB;YACpC,QAAQ,EAAE;gBACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,WAAW,EAAE,cAAc;gBAC3B,OAAO,EAAE,IAAI,CAAC,cAAc;gBAC5B,WAAW;aACZ;YACD,IAAI,EAAE,QAAQ;SACf,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CACzB,QAA2B,EAC3B,QAAgB,EAChB,WAAmB;QAEnB,MAAM,UAAU,GAAuB;YACrC,QAAQ,EAAE;gBACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,WAAW,EAAE,cAAc;gBAC3B,OAAO,EAAE,IAAI,CAAC,cAAc;gBAC5B,WAAW;aACZ;YACD,IAAI,EAAE,QAAQ;SACf,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAgB;QAI1C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1C,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAgB;QAI1C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1C,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB,CAAC,IAAa,EAAE,IAA6B;QAC5E,qEAAqE;QACrE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,aAAa,CACrB,+CAA+C,EAC/C,qBAAqB,EACrB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAA+B,CAAC;QAE5C,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,aAAa,CACrB,gEAAgE,EAChE,qBAAqB,EACrB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAmC,CAAC;QACzD,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,aAAa,CACrB,6CAA6C,EAC7C,qBAAqB,EACrB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,IAAI,aAAa,CACrB,+BAA+B,QAAQ,CAAC,OAAO,sBAAsB,IAAI,CAAC,cAAc,EAAE,EAC1F,qBAAqB,EACrB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,aAAa,CAAC,8BAA8B,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAAC,QAAmB;QACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,IAAI,aAAa,CACrB,sCAAsC,EACtC,sBAAsB,EACtB,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,OAAkC,CAAC;YAE/C,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5C,MAAM,IAAI,aAAa,CACrB,0DAA0D,EAC1D,sBAAsB,EACtB,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,aAAa,CAAC,yBAAyB,GAAG,CAAC,IAAI,EAAE,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAC;YAC5F,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,UAAqC,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,aAAa,CACrB,oDAAoD,EACpD,4BAA4B,EAC5B,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAAC,QAAmB;QACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,IAAI,aAAa,CACrB,sCAAsC,EACtC,sBAAsB,EACtB,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,OAAkC,CAAC;YAE/C,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5C,MAAM,IAAI,aAAa,CACrB,0DAA0D,EAC1D,sBAAsB,EACtB,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,aAAa,CAAC,yBAAyB,GAAG,CAAC,IAAI,EAAE,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAC;YAC5F,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,UAAqC,CAAC;YACxD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxD,MAAM,IAAI,aAAa,CACrB,yDAAyD,EACzD,4BAA4B,EAC5B,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAA6B,EAAE,WAAmB;QACxE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,GAAG,IAAI,IAAI,WAAW,IAAI,SAAS,OAAO,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAgB;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACrD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC"}
@@ -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,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
- // 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;
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
- 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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,MAAM;IACF,KAAK,GAAwC,MAAM,CAAC;IAE5D,YAAY,UAAyB,EAAE;QACrC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACvC,CAAC;IAEO,SAAS,CAAC,cAAmD;QACnE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAEO,aAAa,CAAC,OAAe,EAAE,IAAgB;QACrD,IAAI,MAAM,GAAG,OAAO,CAAC;QAErB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACpB,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;oBAC1B,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC/B,CAAC;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACpC,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,CAAC;qBAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;IACH,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"}
@@ -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);
@@ -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.2.0",
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
- "format": "prettier --write src/**/*.ts",
20
- "benchmark": "npx tsx scripts/benchmark.ts",
21
- "prepare": "npm run build"
22
- },
23
- "keywords": [
24
- "paymongo",
25
- "cli",
26
- "payments",
27
- "webhooks",
28
- "development"
29
- ],
30
- "author": "Leodyver Semilla",
31
- "license": "MIT",
32
- "repository": {
33
- "type": "git",
34
- "url": "git+https://github.com/leodyversemilla07/paymongo-cli.git"
35
- },
36
- "bugs": {
37
- "url": "https://github.com/leodyversemilla07/paymongo-cli/issues"
38
- },
39
- "homepage": "https://github.com/leodyversemilla07/paymongo-cli#readme",
40
- "engines": {
41
- "node": ">=18.0.0"
42
- },
43
- "dependencies": {
44
- "@inquirer/prompts": "^8.2.0",
45
- "@ngrok/ngrok": "^1.7.0",
46
- "@types/express": "^5.0.6",
47
- "axios": "^1.6.0",
48
- "chalk": "^5.3.0",
49
- "commander": "^14.0.2",
50
- "cosmiconfig": "^9.0.0",
51
- "express": "^5.2.1",
52
- "express-rate-limit": "^8.2.1",
53
- "jiti": "^2.6.1",
54
- "ora": "^9.1.0",
55
- "socket.io": "^4.8.3",
56
- "winston": "^3.11.0",
57
- "zod": "^4.3.6"
58
- },
59
- "devDependencies": {
60
- "@eslint/js": "^9.0.0",
61
- "@types/jest": "^30.0.0",
62
- "@types/node": "^25.0.10",
63
- "eslint": "^9.0.0",
64
- "globals": "^17.1.0",
65
- "jest": "^30.2.0",
66
- "prettier": "^3.1.1",
67
- "ts-jest": "^29.4.6",
68
- "ts-node": "^10.9.2",
69
- "tsx": "^4.7.0",
70
- "typescript": "^5.3.3",
71
- "typescript-eslint": "^8.0.0"
72
- },
73
- "publishConfig": {
74
- "access": "public"
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
+ }