paymongo-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.github/ISSUE_TEMPLATE/bug-report.md +33 -0
  2. package/.github/PULL_REQUEST_TEMPLATE.md +30 -0
  3. package/.github/workflows/ci-cd.yml +88 -0
  4. package/.github/workflows/ci.yml +46 -0
  5. package/.github/workflows/release.yml +54 -0
  6. package/LICENSE +21 -0
  7. package/README.md +113 -0
  8. package/bin/paymongo.js +3 -0
  9. package/dist/.tsbuildinfo +1 -0
  10. package/dist/commands/config.d.ts +4 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +398 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/dev.d.ts +4 -0
  15. package/dist/commands/dev.d.ts.map +1 -0
  16. package/dist/commands/dev.js +353 -0
  17. package/dist/commands/dev.js.map +1 -0
  18. package/dist/commands/gui.d.ts +4 -0
  19. package/dist/commands/gui.d.ts.map +1 -0
  20. package/dist/commands/gui.js +74 -0
  21. package/dist/commands/gui.js.map +1 -0
  22. package/dist/commands/init.d.ts +4 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +268 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/login.d.ts +4 -0
  27. package/dist/commands/login.d.ts.map +1 -0
  28. package/dist/commands/login.js +287 -0
  29. package/dist/commands/login.js.map +1 -0
  30. package/dist/commands/payments.d.ts +4 -0
  31. package/dist/commands/payments.d.ts.map +1 -0
  32. package/dist/commands/payments.js +180 -0
  33. package/dist/commands/payments.js.map +1 -0
  34. package/dist/commands/team/index.d.ts +4 -0
  35. package/dist/commands/team/index.d.ts.map +1 -0
  36. package/dist/commands/team/index.js +155 -0
  37. package/dist/commands/team/index.js.map +1 -0
  38. package/dist/commands/trigger.d.ts +4 -0
  39. package/dist/commands/trigger.d.ts.map +1 -0
  40. package/dist/commands/trigger.js +312 -0
  41. package/dist/commands/trigger.js.map +1 -0
  42. package/dist/commands/webhooks.d.ts +4 -0
  43. package/dist/commands/webhooks.d.ts.map +1 -0
  44. package/dist/commands/webhooks.js +357 -0
  45. package/dist/commands/webhooks.js.map +1 -0
  46. package/dist/index.d.ts +3 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +61 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/services/analytics/service.d.ts +29 -0
  51. package/dist/services/analytics/service.d.ts.map +1 -0
  52. package/dist/services/analytics/service.js +97 -0
  53. package/dist/services/analytics/service.js.map +1 -0
  54. package/dist/services/api/client.d.ts +27 -0
  55. package/dist/services/api/client.d.ts.map +1 -0
  56. package/dist/services/api/client.js +151 -0
  57. package/dist/services/api/client.js.map +1 -0
  58. package/dist/services/config/manager.d.ts +16 -0
  59. package/dist/services/config/manager.d.ts.map +1 -0
  60. package/dist/services/config/manager.js +211 -0
  61. package/dist/services/config/manager.js.map +1 -0
  62. package/dist/services/github/auth.d.ts +15 -0
  63. package/dist/services/github/auth.d.ts.map +1 -0
  64. package/dist/services/github/auth.js +119 -0
  65. package/dist/services/github/auth.js.map +1 -0
  66. package/dist/services/github/client.d.ts +54 -0
  67. package/dist/services/github/client.d.ts.map +1 -0
  68. package/dist/services/github/client.js +107 -0
  69. package/dist/services/github/client.js.map +1 -0
  70. package/dist/services/github/sync.d.ts +26 -0
  71. package/dist/services/github/sync.d.ts.map +1 -0
  72. package/dist/services/github/sync.js +200 -0
  73. package/dist/services/github/sync.js.map +1 -0
  74. package/dist/services/web/server.d.ts +30 -0
  75. package/dist/services/web/server.d.ts.map +1 -0
  76. package/dist/services/web/server.js +159 -0
  77. package/dist/services/web/server.js.map +1 -0
  78. package/dist/types/paymongo.d.ts +118 -0
  79. package/dist/types/paymongo.d.ts.map +1 -0
  80. package/dist/types/paymongo.js +3 -0
  81. package/dist/types/paymongo.js.map +1 -0
  82. package/dist/utils/cache.d.ts +20 -0
  83. package/dist/utils/cache.d.ts.map +1 -0
  84. package/dist/utils/cache.js +164 -0
  85. package/dist/utils/cache.js.map +1 -0
  86. package/dist/utils/constants.d.ts +32 -0
  87. package/dist/utils/constants.d.ts.map +1 -0
  88. package/dist/utils/constants.js +52 -0
  89. package/dist/utils/constants.js.map +1 -0
  90. package/dist/utils/errors.d.ts +33 -0
  91. package/dist/utils/errors.d.ts.map +1 -0
  92. package/dist/utils/errors.js +79 -0
  93. package/dist/utils/errors.js.map +1 -0
  94. package/dist/utils/logger.d.ts +17 -0
  95. package/dist/utils/logger.d.ts.map +1 -0
  96. package/dist/utils/logger.js +53 -0
  97. package/dist/utils/logger.js.map +1 -0
  98. package/dist/utils/spinner.d.ts +17 -0
  99. package/dist/utils/spinner.d.ts.map +1 -0
  100. package/dist/utils/spinner.js +54 -0
  101. package/dist/utils/spinner.js.map +1 -0
  102. package/dist/utils/validator.d.ts +10 -0
  103. package/dist/utils/validator.d.ts.map +1 -0
  104. package/dist/utils/validator.js +79 -0
  105. package/dist/utils/validator.js.map +1 -0
  106. package/package.json +70 -0
  107. package/web/index.html +688 -0
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const commander_1 = require("commander");
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const manager_1 = __importDefault(require("../services/config/manager"));
44
+ const client_1 = __importDefault(require("../services/api/client"));
45
+ const validator_1 = require("../utils/validator");
46
+ const spinner_1 = __importDefault(require("../utils/spinner"));
47
+ const command = new commander_1.Command('init');
48
+ command
49
+ .description('Initialize a new PayMongo project')
50
+ .option('-n, --name <name>', 'Project name')
51
+ .option('-e, --env <environment>', 'Environment (test or live)', 'test')
52
+ .option('-k, --key <key>', 'Secret API key')
53
+ .option('--public-key <key>', 'Public API key')
54
+ .option('-u, --url <url>', 'Webhook URL')
55
+ .option('-p, --port <port>', 'Development port', '3000')
56
+ .option('--events <events>', 'Comma-separated webhook events', 'payment.paid,payment.failed')
57
+ .option('--non-interactive', 'Skip interactive prompts')
58
+ .action(async (options) => {
59
+ const spinner = new spinner_1.default();
60
+ const configManager = new manager_1.default();
61
+ try {
62
+ // Check if config already exists
63
+ if (await configManager.exists()) {
64
+ // Lazy load inquirer only when needed
65
+ const { default: inquirer } = await Promise.resolve().then(() => __importStar(require('inquirer')));
66
+ const { overwrite } = await inquirer.prompt([
67
+ {
68
+ type: 'confirm',
69
+ name: 'overwrite',
70
+ message: 'Configuration file already exists. Overwrite?',
71
+ default: false,
72
+ },
73
+ ]);
74
+ if (!overwrite) {
75
+ console.log(chalk_1.default.yellow('Initialization cancelled.'));
76
+ return;
77
+ }
78
+ }
79
+ let answers;
80
+ if (options.nonInteractive) {
81
+ // Use provided options
82
+ answers = {
83
+ projectName: options.name || path.basename(process.cwd()),
84
+ environment: options.env,
85
+ publicKey: options.publicKey || '',
86
+ secretKey: options.key,
87
+ webhookUrl: options.url,
88
+ events: options.events ? options.events.split(',') : ['payment.paid', 'payment.failed'],
89
+ port: parseInt(options.port),
90
+ };
91
+ }
92
+ else {
93
+ // Interactive mode - lazy load inquirer
94
+ const { default: inquirer } = await Promise.resolve().then(() => __importStar(require('inquirer')));
95
+ answers = await inquirer.prompt([
96
+ {
97
+ type: 'input',
98
+ name: 'projectName',
99
+ message: 'Project name:',
100
+ default: options.name || path.basename(process.cwd()),
101
+ validate: (input) => input.trim().length > 0 || 'Project name is required',
102
+ },
103
+ {
104
+ type: 'list',
105
+ name: 'environment',
106
+ message: 'Environment:',
107
+ choices: [
108
+ { name: 'Test (recommended for development)', value: 'test' },
109
+ { name: 'Live (for production)', value: 'live' },
110
+ ],
111
+ default: options.env || 'test',
112
+ },
113
+ {
114
+ type: 'password',
115
+ name: 'secretKey',
116
+ message: 'Secret API key:',
117
+ default: options.key,
118
+ validate: (input) => {
119
+ if (!input) {
120
+ return 'Secret API key is required';
121
+ }
122
+ if (!(0, validator_1.validateApiKey)(input, 'secret')) {
123
+ return 'Invalid secret API key format';
124
+ }
125
+ return true;
126
+ },
127
+ },
128
+ {
129
+ type: 'password',
130
+ name: 'publicKey',
131
+ message: 'Public API key (optional):',
132
+ default: options.publicKey,
133
+ },
134
+ {
135
+ type: 'input',
136
+ name: 'webhookUrl',
137
+ message: 'Webhook URL (leave empty for local development):',
138
+ default: options.url,
139
+ },
140
+ {
141
+ type: 'checkbox',
142
+ name: 'events',
143
+ message: 'Webhook events to listen for:',
144
+ choices: [
145
+ { name: 'payment.paid - Payment successful', value: 'payment.paid', checked: true },
146
+ { name: 'payment.failed - Payment failed', value: 'payment.failed', checked: true },
147
+ { name: 'payment.refunded - Payment refunded', value: 'payment.refunded' },
148
+ { name: 'source.chargeable - Source ready for charging', value: 'source.chargeable' },
149
+ {
150
+ name: 'checkout_session.payment.paid - Checkout payment successful',
151
+ value: 'checkout_session.payment.paid',
152
+ },
153
+ { name: 'qrph.expired - QR Ph expired', value: 'qrph.expired' },
154
+ ],
155
+ default: (options.events || 'payment.paid,payment.failed').split(','),
156
+ },
157
+ {
158
+ type: 'number',
159
+ name: 'port',
160
+ message: 'Development server port:',
161
+ default: parseInt(options.port) || 3000,
162
+ validate: (input) => (input > 0 && input < 65536) || 'Port must be between 1 and 65535',
163
+ },
164
+ ]);
165
+ }
166
+ // Validate API keys
167
+ spinner.start('Validating API keys...');
168
+ const tempConfig = {
169
+ version: '1.0',
170
+ projectName: answers.projectName,
171
+ environment: answers.environment,
172
+ apiKeys: {
173
+ [answers.environment]: {
174
+ public: answers.publicKey,
175
+ secret: answers.secretKey,
176
+ },
177
+ },
178
+ webhooks: {
179
+ url: answers.webhookUrl || `http://localhost:${answers.port}/webhook`,
180
+ events: answers.events,
181
+ },
182
+ webhookSecrets: {},
183
+ dev: {
184
+ port: answers.port,
185
+ autoRegisterWebhook: true,
186
+ verifyWebhookSignatures: false, // Default to false for development ease
187
+ },
188
+ };
189
+ const apiClient = new client_1.default({ config: tempConfig });
190
+ const isValid = await apiClient.validateApiKey();
191
+ if (!isValid) {
192
+ spinner.fail('API key validation failed');
193
+ console.error(chalk_1.default.red('❌ Invalid API keys. Please check your keys and try again.'));
194
+ console.log(chalk_1.default.gray('Get your API keys from: https://dashboard.paymongo.com/developers'));
195
+ process.exit(1);
196
+ }
197
+ spinner.succeed('API keys validated');
198
+ // Save configuration
199
+ spinner.start('Saving configuration...');
200
+ await configManager.save(tempConfig);
201
+ spinner.succeed('Configuration saved');
202
+ // Create .env file
203
+ const envPath = path.join(process.cwd(), '.env');
204
+ const envContent = `# PayMongo API Keys
205
+ PAYMONGO_PUBLIC_KEY=${answers.publicKey || ''}
206
+ PAYMONGO_SECRET_KEY=${answers.secretKey}
207
+ PAYMONGO_ENVIRONMENT=${answers.environment}
208
+ `;
209
+ fs.writeFileSync(envPath, envContent);
210
+ spinner.succeed('.env file created');
211
+ // Add to .gitignore if it exists
212
+ const gitignorePath = path.join(process.cwd(), '.gitignore');
213
+ if (fs.existsSync(gitignorePath)) {
214
+ let gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');
215
+ if (!gitignoreContent.includes('.env')) {
216
+ gitignoreContent += '\n# PayMongo\n.env\n.paymongo\n';
217
+ fs.writeFileSync(gitignorePath, gitignoreContent);
218
+ console.log(chalk_1.default.green('✓ Added .env and .paymongo to .gitignore'));
219
+ }
220
+ }
221
+ // Success message
222
+ console.log('\n' + chalk_1.default.green('🎉 PayMongo project initialized!'));
223
+ console.log('\n' + chalk_1.default.bold('Configuration saved to .paymongo'));
224
+ console.log(chalk_1.default.bold('Environment variables saved to .env'));
225
+ console.log('\n' + chalk_1.default.bold('Next steps:'));
226
+ console.log(' 1. Run ' + chalk_1.default.cyan('paymongo dev') + ' to start development server');
227
+ console.log(' 2. Configure your webhook handler at ' +
228
+ chalk_1.default.cyan(`http://localhost:${answers.port}/webhook`));
229
+ console.log(' 3. Visit ' + chalk_1.default.cyan('https://dashboard.paymongo.com') + ' to view transactions');
230
+ console.log('\n' + chalk_1.default.yellow('Happy building! 🚀'));
231
+ }
232
+ catch (error) {
233
+ spinner.stop();
234
+ const err = error;
235
+ // Provide actionable error messages based on error type
236
+ if (err.message.includes('API key') || err.message.includes('unauthorized')) {
237
+ console.error(chalk_1.default.red('❌ API key validation failed:'), err.message);
238
+ console.log('');
239
+ console.log(chalk_1.default.yellow('💡 Solutions:'));
240
+ console.log(chalk_1.default.gray('• Double-check your API keys from https://dashboard.paymongo.com/developers'));
241
+ console.log(chalk_1.default.gray("• Make sure you're using the correct environment (test/live)"));
242
+ console.log(chalk_1.default.gray('• Test API keys are prefixed with "sk_test_", live keys with "sk_live_"'));
243
+ }
244
+ else if (err.message.includes('Network') || err.message.includes('connection')) {
245
+ console.error(chalk_1.default.red('❌ Network error:'), err.message);
246
+ console.log('');
247
+ console.log(chalk_1.default.yellow('💡 Try again:'));
248
+ console.log(chalk_1.default.gray('• Check your internet connection'));
249
+ console.log(chalk_1.default.gray('• PayMongo API might be temporarily unavailable'));
250
+ console.log(chalk_1.default.gray('• Wait a moment and try again'));
251
+ }
252
+ else if (err.message.includes('permission') || err.message.includes('access')) {
253
+ console.error(chalk_1.default.red('❌ File system error:'), err.message);
254
+ console.log('');
255
+ console.log(chalk_1.default.yellow('💡 Check permissions:'));
256
+ console.log(chalk_1.default.gray('• Make sure you have write permissions in this directory'));
257
+ console.log(chalk_1.default.gray('• Try running the command with sudo if on Linux/macOS'));
258
+ }
259
+ else {
260
+ console.error(chalk_1.default.red('❌ Initialization failed:'), err.message);
261
+ console.log('');
262
+ console.log(chalk_1.default.yellow('💡 For help, visit: https://developers.paymongo.com/docs'));
263
+ }
264
+ process.exit(1);
265
+ }
266
+ });
267
+ exports.default = command;
268
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ declare const command: Command;
3
+ export default command;
4
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6FpC,QAAA,MAAM,OAAO,SAAuB,CAAC;AAmMrC,eAAe,OAAO,CAAC"}
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const commander_1 = require("commander");
40
+ const inquirer_1 = __importDefault(require("inquirer"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const crypto = __importStar(require("crypto"));
44
+ const os = __importStar(require("os"));
45
+ const chalk_1 = __importDefault(require("chalk"));
46
+ const manager_1 = __importDefault(require("../services/config/manager"));
47
+ const client_1 = __importDefault(require("../services/api/client"));
48
+ const validator_1 = require("../utils/validator");
49
+ const spinner_1 = __importDefault(require("../utils/spinner"));
50
+ class CredentialManager {
51
+ constructor() {
52
+ // Use OS-specific credential storage location
53
+ const homeDir = os.homedir();
54
+ const configDir = path.join(homeDir, '.paymongo');
55
+ if (!fs.existsSync(configDir)) {
56
+ fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
57
+ }
58
+ this.credentialsPath = path.join(configDir, 'credentials.enc');
59
+ // Use a machine-specific key for encryption
60
+ const machineId = os.hostname() + os.userInfo().username;
61
+ this.encryptionKey = crypto
62
+ .createHash('sha256')
63
+ .update(machineId)
64
+ .digest('hex')
65
+ .substring(0, 32);
66
+ }
67
+ async saveCredentials(credentials) {
68
+ const data = JSON.stringify(credentials);
69
+ const iv = crypto.randomBytes(16);
70
+ const cipher = crypto.createCipheriv('aes-256-cbc', this.encryptionKey, iv);
71
+ let encrypted = cipher.update(data, 'utf8', 'hex');
72
+ encrypted += cipher.final('hex');
73
+ const payload = {
74
+ iv: iv.toString('hex'),
75
+ data: encrypted,
76
+ };
77
+ fs.writeFileSync(this.credentialsPath, JSON.stringify(payload), { mode: 0o600 });
78
+ }
79
+ async loadCredentials() {
80
+ try {
81
+ if (!fs.existsSync(this.credentialsPath)) {
82
+ return null;
83
+ }
84
+ const payload = JSON.parse(fs.readFileSync(this.credentialsPath, 'utf8'));
85
+ const iv = Buffer.from(payload.iv, 'hex');
86
+ const decipher = crypto.createDecipheriv('aes-256-cbc', this.encryptionKey, iv);
87
+ let decrypted = decipher.update(payload.data, 'hex', 'utf8');
88
+ decrypted += decipher.final('utf8');
89
+ return JSON.parse(decrypted);
90
+ }
91
+ catch (error) {
92
+ // If decryption fails, credentials are corrupted
93
+ return null;
94
+ }
95
+ }
96
+ async clearCredentials() {
97
+ if (fs.existsSync(this.credentialsPath)) {
98
+ fs.unlinkSync(this.credentialsPath);
99
+ }
100
+ }
101
+ }
102
+ const command = new commander_1.Command('login');
103
+ command
104
+ .description('Manage API credentials')
105
+ .option('-k, --key <key>', 'Secret API key')
106
+ .option('--public-key <key>', 'Public API key')
107
+ .option('-e, --env <environment>', 'Environment (test or live)', 'test')
108
+ .option('--logout', 'Clear stored credentials')
109
+ .action(async (options) => {
110
+ const spinner = new spinner_1.default();
111
+ const configManager = new manager_1.default();
112
+ const credentialManager = new CredentialManager();
113
+ try {
114
+ if (options.logout) {
115
+ spinner.start('Clearing credentials...');
116
+ await credentialManager.clearCredentials();
117
+ spinner.succeed('Credentials cleared');
118
+ // Also clear from current config if it exists
119
+ try {
120
+ await configManager.delete();
121
+ }
122
+ catch (error) {
123
+ // Ignore errors during config deletion
124
+ }
125
+ console.log(chalk_1.default.green('✓ Successfully logged out'));
126
+ return;
127
+ }
128
+ let answers;
129
+ if (options.key) {
130
+ // Non-interactive mode
131
+ answers = {
132
+ environment: options.env,
133
+ secretKey: options.key,
134
+ publicKey: options.publicKey,
135
+ };
136
+ }
137
+ else {
138
+ // Interactive mode
139
+ const storedCredentials = await credentialManager.loadCredentials();
140
+ answers = await inquirer_1.default.prompt([
141
+ {
142
+ type: 'list',
143
+ name: 'environment',
144
+ message: 'Environment:',
145
+ choices: [
146
+ { name: 'Test (recommended for development)', value: 'test' },
147
+ { name: 'Live (for production)', value: 'live' },
148
+ ],
149
+ default: options.env || storedCredentials?.environment || 'test',
150
+ },
151
+ {
152
+ type: 'password',
153
+ name: 'secretKey',
154
+ message: 'Secret API key:',
155
+ default: options.key || storedCredentials?.secretKey,
156
+ validate: (input) => {
157
+ if (!input) {
158
+ return 'Secret API key is required';
159
+ }
160
+ if (!(0, validator_1.validateApiKey)(input, 'secret')) {
161
+ return 'Invalid secret API key format';
162
+ }
163
+ return true;
164
+ },
165
+ },
166
+ {
167
+ type: 'password',
168
+ name: 'publicKey',
169
+ message: 'Public API key (optional):',
170
+ default: options.publicKey || storedCredentials?.publicKey,
171
+ validate: (input) => {
172
+ if (!input) {
173
+ return true;
174
+ } // Optional
175
+ if (!(0, validator_1.validateApiKey)(input, 'public')) {
176
+ return 'Invalid public API key format';
177
+ }
178
+ return true;
179
+ },
180
+ },
181
+ ]);
182
+ }
183
+ // Validate API key
184
+ spinner.start('Validating API key...');
185
+ const tempConfig = {
186
+ version: '1.0',
187
+ projectName: 'temp',
188
+ environment: answers.environment,
189
+ apiKeys: {
190
+ [answers.environment]: {
191
+ public: answers.publicKey || '',
192
+ secret: answers.secretKey,
193
+ },
194
+ },
195
+ webhooks: { url: '', events: [] },
196
+ dev: { port: 3000, autoRegisterWebhook: true },
197
+ };
198
+ const apiClient = new client_1.default({ config: tempConfig });
199
+ const isValid = await apiClient.validateApiKey();
200
+ if (!isValid) {
201
+ spinner.fail('API key validation failed');
202
+ console.error(chalk_1.default.red('❌ Invalid API key. Please check your key and try again.'));
203
+ console.log(chalk_1.default.gray('Get your API keys from: https://dashboard.paymongo.com/developers'));
204
+ process.exit(1);
205
+ }
206
+ spinner.succeed('API key validated');
207
+ // Store credentials securely
208
+ spinner.start('Storing credentials securely...');
209
+ const credentials = {
210
+ environment: answers.environment,
211
+ secretKey: answers.secretKey,
212
+ };
213
+ if (answers.publicKey) {
214
+ credentials.publicKey = answers.publicKey;
215
+ }
216
+ await credentialManager.saveCredentials(credentials);
217
+ spinner.succeed('Credentials stored securely');
218
+ // Update current project config if it exists
219
+ let config;
220
+ try {
221
+ config = await configManager.load();
222
+ }
223
+ catch (error) {
224
+ // If config exists but is invalid, create a new one
225
+ console.log(chalk_1.default.yellow('⚠️ Creating new project configuration...'));
226
+ config = configManager.getDefaultConfig();
227
+ }
228
+ if (config) {
229
+ config.environment = answers.environment;
230
+ // Ensure apiKeys object exists
231
+ if (!config.apiKeys) {
232
+ config.apiKeys = {};
233
+ }
234
+ config.apiKeys[answers.environment] = {
235
+ public: answers.publicKey || '',
236
+ secret: answers.secretKey,
237
+ };
238
+ await configManager.save(config);
239
+ }
240
+ // Success message
241
+ console.log('\n' + chalk_1.default.green('🔐 PayMongo Login Successful'));
242
+ console.log('\n' + chalk_1.default.bold('Current configuration:'));
243
+ console.log(` Environment: ${answers.environment}`);
244
+ console.log(` Secret Key: ${'*'.repeat(20)}...${answers.secretKey.slice(-4)}`);
245
+ if (answers.publicKey) {
246
+ console.log(` Public Key: ${'*'.repeat(20)}...${answers.publicKey.slice(-4)}`);
247
+ }
248
+ console.log('\n' + chalk_1.default.gray("Use 'paymongo config show' to view settings"));
249
+ console.log(chalk_1.default.gray("Use 'paymongo login --logout' to clear credentials"));
250
+ }
251
+ catch (error) {
252
+ spinner.stop();
253
+ const err = error;
254
+ // Provide actionable error messages based on error type
255
+ if (err.message.includes('API key') || err.message.includes('unauthorized')) {
256
+ console.error(chalk_1.default.red('❌ API key validation failed:'), err.message);
257
+ console.log('');
258
+ console.log(chalk_1.default.yellow('💡 Solutions:'));
259
+ console.log(chalk_1.default.gray('• Double-check your API keys from https://dashboard.paymongo.com/developers'));
260
+ console.log(chalk_1.default.gray("• Make sure you're using the correct environment (test/live)"));
261
+ console.log(chalk_1.default.gray('• Test API keys are prefixed with "sk_test_", live keys with "sk_live_"'));
262
+ }
263
+ else if (err.message.includes('Network') || err.message.includes('connection')) {
264
+ console.error(chalk_1.default.red('❌ Network error during validation:'), err.message);
265
+ console.log('');
266
+ console.log(chalk_1.default.yellow('💡 Options:'));
267
+ console.log(chalk_1.default.gray('• Check your internet connection'));
268
+ console.log(chalk_1.default.gray('• Use "paymongo login --key YOUR_KEY" to skip validation'));
269
+ console.log(chalk_1.default.gray('• Validation can be skipped, but ensure your keys are correct'));
270
+ }
271
+ else if (err.message.includes('permission') || err.message.includes('access')) {
272
+ console.error(chalk_1.default.red('❌ File system error:'), err.message);
273
+ console.log('');
274
+ console.log(chalk_1.default.yellow('💡 Try:'));
275
+ console.log(chalk_1.default.gray('• Run the command with administrator/sudo privileges'));
276
+ console.log(chalk_1.default.gray('• Check that the .paymongo directory is accessible'));
277
+ }
278
+ else {
279
+ console.error(chalk_1.default.red('❌ Login failed:'), err.message);
280
+ console.log('');
281
+ console.log(chalk_1.default.yellow('💡 For help, visit: https://developers.paymongo.com'));
282
+ }
283
+ process.exit(1);
284
+ }
285
+ });
286
+ exports.default = command;
287
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ declare const command: Command;
3
+ export default command;
4
+ //# sourceMappingURL=payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/commands/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,QAAA,MAAM,OAAO,SAA0B,CAAC;AAkOxC,eAAe,OAAO,CAAC"}