paymongo-cli 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +141 -0
- package/bin/paymongo.js +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +99 -127
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +68 -102
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/gui.js +26 -31
- package/dist/commands/gui.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +109 -159
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +78 -118
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/payments.d.ts.map +1 -1
- package/dist/commands/payments.js +63 -65
- package/dist/commands/payments.js.map +1 -1
- package/dist/commands/team/index.js +31 -36
- package/dist/commands/team/index.js.map +1 -1
- package/dist/commands/trigger.d.ts.map +1 -1
- package/dist/commands/trigger.js +46 -88
- package/dist/commands/trigger.js.map +1 -1
- package/dist/commands/webhooks.d.ts.map +1 -1
- package/dist/commands/webhooks.js +138 -150
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/index.js +37 -44
- package/dist/index.js.map +1 -1
- package/dist/services/analytics/service.d.ts +7 -1
- package/dist/services/analytics/service.d.ts.map +1 -1
- package/dist/services/analytics/service.js +15 -20
- package/dist/services/analytics/service.js.map +1 -1
- package/dist/services/api/client.d.ts +9 -8
- package/dist/services/api/client.d.ts.map +1 -1
- package/dist/services/api/client.js +33 -29
- package/dist/services/api/client.js.map +1 -1
- package/dist/services/config/manager.d.ts +1 -1
- package/dist/services/config/manager.d.ts.map +1 -1
- package/dist/services/config/manager.js +30 -72
- package/dist/services/config/manager.js.map +1 -1
- package/dist/services/github/auth.d.ts +2 -2
- package/dist/services/github/auth.d.ts.map +1 -1
- package/dist/services/github/auth.js +15 -55
- package/dist/services/github/auth.js.map +1 -1
- package/dist/services/github/client.d.ts +1 -1
- package/dist/services/github/client.d.ts.map +1 -1
- package/dist/services/github/client.js +12 -17
- package/dist/services/github/client.js.map +1 -1
- package/dist/services/github/sync.d.ts +2 -2
- package/dist/services/github/sync.d.ts.map +1 -1
- package/dist/services/github/sync.js +13 -10
- package/dist/services/github/sync.js.map +1 -1
- package/dist/services/web/server.d.ts +5 -4
- package/dist/services/web/server.d.ts.map +1 -1
- package/dist/services/web/server.js +70 -27
- package/dist/services/web/server.js.map +1 -1
- package/dist/types/paymongo.d.ts +48 -0
- package/dist/types/paymongo.d.ts.map +1 -1
- package/dist/types/paymongo.js +1 -2
- package/dist/types/schemas.d.ts +80 -0
- package/dist/types/schemas.d.ts.map +1 -0
- package/dist/types/schemas.js +63 -0
- package/dist/types/schemas.js.map +1 -0
- package/dist/utils/cache.d.ts +2 -0
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +65 -77
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/constants.js +16 -19
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/errors.d.ts +1 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +18 -19
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/logger.d.ts +5 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -16
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/spinner.js +4 -8
- package/dist/utils/spinner.js.map +1 -1
- package/dist/utils/validator.d.ts +1 -1
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +6 -13
- package/dist/utils/validator.js.map +1 -1
- package/eslint.config.ts +43 -0
- package/jest.config.ts +30 -0
- package/package.json +76 -70
package/dist/commands/login.js
CHANGED
|
@@ -1,53 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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"));
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { select, password } from '@inquirer/prompts';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as crypto from 'crypto';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import ConfigManager from '../services/config/manager.js';
|
|
9
|
+
import ApiClient from '../services/api/client.js';
|
|
10
|
+
import { validateApiKey } from '../utils/validator.js';
|
|
11
|
+
import Spinner from '../utils/spinner.js';
|
|
50
12
|
class CredentialManager {
|
|
13
|
+
credentialsPath;
|
|
14
|
+
encryptionKey;
|
|
51
15
|
constructor() {
|
|
52
16
|
// Use OS-specific credential storage location
|
|
53
17
|
const homeDir = os.homedir();
|
|
@@ -99,7 +63,7 @@ class CredentialManager {
|
|
|
99
63
|
}
|
|
100
64
|
}
|
|
101
65
|
}
|
|
102
|
-
const command = new
|
|
66
|
+
const command = new Command('login');
|
|
103
67
|
command
|
|
104
68
|
.description('Manage API credentials')
|
|
105
69
|
.option('-k, --key <key>', 'Secret API key')
|
|
@@ -107,8 +71,8 @@ command
|
|
|
107
71
|
.option('-e, --env <environment>', 'Environment (test or live)', 'test')
|
|
108
72
|
.option('--logout', 'Clear stored credentials')
|
|
109
73
|
.action(async (options) => {
|
|
110
|
-
const spinner = new
|
|
111
|
-
const configManager = new
|
|
74
|
+
const spinner = new Spinner();
|
|
75
|
+
const configManager = new ConfigManager();
|
|
112
76
|
const credentialManager = new CredentialManager();
|
|
113
77
|
try {
|
|
114
78
|
if (options.logout) {
|
|
@@ -122,7 +86,7 @@ command
|
|
|
122
86
|
catch (error) {
|
|
123
87
|
// Ignore errors during config deletion
|
|
124
88
|
}
|
|
125
|
-
console.log(
|
|
89
|
+
console.log(chalk.green('✓ Successfully logged out'));
|
|
126
90
|
return;
|
|
127
91
|
}
|
|
128
92
|
let answers;
|
|
@@ -137,48 +101,43 @@ command
|
|
|
137
101
|
else {
|
|
138
102
|
// Interactive mode
|
|
139
103
|
const storedCredentials = await credentialManager.loadCredentials();
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
name: '
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
104
|
+
const environment = await select({
|
|
105
|
+
message: 'Environment:',
|
|
106
|
+
choices: [
|
|
107
|
+
{ name: 'Test (recommended for development)', value: 'test' },
|
|
108
|
+
{ name: 'Live (for production)', value: 'live' },
|
|
109
|
+
],
|
|
110
|
+
default: options.env || storedCredentials?.environment || 'test',
|
|
111
|
+
});
|
|
112
|
+
const secretKey = await password({
|
|
113
|
+
message: 'Secret API key:',
|
|
114
|
+
validate: (input) => {
|
|
115
|
+
if (!input) {
|
|
116
|
+
return 'Secret API key is required';
|
|
117
|
+
}
|
|
118
|
+
if (!validateApiKey(input, 'secret')) {
|
|
119
|
+
return 'Invalid secret API key format';
|
|
120
|
+
}
|
|
121
|
+
return true;
|
|
150
122
|
},
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
}
|
|
123
|
+
});
|
|
124
|
+
const publicKey = await password({
|
|
125
|
+
message: 'Public API key (optional):',
|
|
126
|
+
validate: (input) => {
|
|
127
|
+
if (!input) {
|
|
163
128
|
return true;
|
|
164
|
-
}
|
|
129
|
+
} // Optional
|
|
130
|
+
if (!validateApiKey(input, 'public')) {
|
|
131
|
+
return 'Invalid public API key format';
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
165
134
|
},
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
]);
|
|
135
|
+
});
|
|
136
|
+
answers = {
|
|
137
|
+
environment: environment,
|
|
138
|
+
secretKey,
|
|
139
|
+
publicKey: publicKey || undefined,
|
|
140
|
+
};
|
|
182
141
|
}
|
|
183
142
|
// Validate API key
|
|
184
143
|
spinner.start('Validating API key...');
|
|
@@ -193,14 +152,15 @@ command
|
|
|
193
152
|
},
|
|
194
153
|
},
|
|
195
154
|
webhooks: { url: '', events: [] },
|
|
196
|
-
|
|
155
|
+
webhookSecrets: {},
|
|
156
|
+
dev: { port: 3000, autoRegisterWebhook: true, verifyWebhookSignatures: false },
|
|
197
157
|
};
|
|
198
|
-
const apiClient = new
|
|
158
|
+
const apiClient = new ApiClient({ config: tempConfig });
|
|
199
159
|
const isValid = await apiClient.validateApiKey();
|
|
200
160
|
if (!isValid) {
|
|
201
161
|
spinner.fail('API key validation failed');
|
|
202
|
-
console.error(
|
|
203
|
-
console.log(
|
|
162
|
+
console.error(chalk.red('❌ Invalid API key. Please check your key and try again.'));
|
|
163
|
+
console.log(chalk.gray('Get your API keys from: https://dashboard.paymongo.com/developers'));
|
|
204
164
|
process.exit(1);
|
|
205
165
|
}
|
|
206
166
|
spinner.succeed('API key validated');
|
|
@@ -222,7 +182,7 @@ command
|
|
|
222
182
|
}
|
|
223
183
|
catch (error) {
|
|
224
184
|
// If config exists but is invalid, create a new one
|
|
225
|
-
console.log(
|
|
185
|
+
console.log(chalk.yellow('⚠️ Creating new project configuration...'));
|
|
226
186
|
config = configManager.getDefaultConfig();
|
|
227
187
|
}
|
|
228
188
|
if (config) {
|
|
@@ -238,50 +198,50 @@ command
|
|
|
238
198
|
await configManager.save(config);
|
|
239
199
|
}
|
|
240
200
|
// Success message
|
|
241
|
-
console.log('\n' +
|
|
242
|
-
console.log('\n' +
|
|
201
|
+
console.log('\n' + chalk.green('🔐 PayMongo Login Successful'));
|
|
202
|
+
console.log('\n' + chalk.bold('Current configuration:'));
|
|
243
203
|
console.log(` Environment: ${answers.environment}`);
|
|
244
204
|
console.log(` Secret Key: ${'*'.repeat(20)}...${answers.secretKey.slice(-4)}`);
|
|
245
205
|
if (answers.publicKey) {
|
|
246
206
|
console.log(` Public Key: ${'*'.repeat(20)}...${answers.publicKey.slice(-4)}`);
|
|
247
207
|
}
|
|
248
|
-
console.log('\n' +
|
|
249
|
-
console.log(
|
|
208
|
+
console.log('\n' + chalk.gray("Use 'paymongo config show' to view settings"));
|
|
209
|
+
console.log(chalk.gray("Use 'paymongo login --logout' to clear credentials"));
|
|
250
210
|
}
|
|
251
211
|
catch (error) {
|
|
252
212
|
spinner.stop();
|
|
253
213
|
const err = error;
|
|
254
214
|
// Provide actionable error messages based on error type
|
|
255
215
|
if (err.message.includes('API key') || err.message.includes('unauthorized')) {
|
|
256
|
-
console.error(
|
|
216
|
+
console.error(chalk.red('❌ API key validation failed:'), err.message);
|
|
257
217
|
console.log('');
|
|
258
|
-
console.log(
|
|
259
|
-
console.log(
|
|
260
|
-
console.log(
|
|
261
|
-
console.log(
|
|
218
|
+
console.log(chalk.yellow('💡 Solutions:'));
|
|
219
|
+
console.log(chalk.gray('• Double-check your API keys from https://dashboard.paymongo.com/developers'));
|
|
220
|
+
console.log(chalk.gray("• Make sure you're using the correct environment (test/live)"));
|
|
221
|
+
console.log(chalk.gray('• Test API keys are prefixed with "sk_test_", live keys with "sk_live_"'));
|
|
262
222
|
}
|
|
263
223
|
else if (err.message.includes('Network') || err.message.includes('connection')) {
|
|
264
|
-
console.error(
|
|
224
|
+
console.error(chalk.red('❌ Network error during validation:'), err.message);
|
|
265
225
|
console.log('');
|
|
266
|
-
console.log(
|
|
267
|
-
console.log(
|
|
268
|
-
console.log(
|
|
269
|
-
console.log(
|
|
226
|
+
console.log(chalk.yellow('💡 Options:'));
|
|
227
|
+
console.log(chalk.gray('• Check your internet connection'));
|
|
228
|
+
console.log(chalk.gray('• Use "paymongo login --key YOUR_KEY" to skip validation'));
|
|
229
|
+
console.log(chalk.gray('• Validation can be skipped, but ensure your keys are correct'));
|
|
270
230
|
}
|
|
271
231
|
else if (err.message.includes('permission') || err.message.includes('access')) {
|
|
272
|
-
console.error(
|
|
232
|
+
console.error(chalk.red('❌ File system error:'), err.message);
|
|
273
233
|
console.log('');
|
|
274
|
-
console.log(
|
|
275
|
-
console.log(
|
|
276
|
-
console.log(
|
|
234
|
+
console.log(chalk.yellow('💡 Try:'));
|
|
235
|
+
console.log(chalk.gray('• Run the command with administrator/sudo privileges'));
|
|
236
|
+
console.log(chalk.gray('• Check that the .paymongo directory is accessible'));
|
|
277
237
|
}
|
|
278
238
|
else {
|
|
279
|
-
console.error(
|
|
239
|
+
console.error(chalk.red('❌ Login failed:'), err.message);
|
|
280
240
|
console.log('');
|
|
281
|
-
console.log(
|
|
241
|
+
console.log(chalk.yellow('💡 For help, visit: https://developers.paymongo.com'));
|
|
282
242
|
}
|
|
283
243
|
process.exit(1);
|
|
284
244
|
}
|
|
285
245
|
});
|
|
286
|
-
|
|
246
|
+
export default command;
|
|
287
247
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/commands/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/commands/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,QAAA,MAAM,OAAO,SAA0B,CAAC;AAqOxC,eAAe,OAAO,CAAC"}
|
|
@@ -1,35 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const manager_1 = __importDefault(require("../services/config/manager"));
|
|
9
|
-
const client_1 = __importDefault(require("../services/api/client"));
|
|
10
|
-
const spinner_1 = __importDefault(require("../utils/spinner"));
|
|
11
|
-
const command = new commander_1.Command('payments');
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ConfigManager from '../services/config/manager.js';
|
|
4
|
+
import ApiClient from '../services/api/client.js';
|
|
5
|
+
import Spinner from '../utils/spinner.js';
|
|
6
|
+
const command = new Command('payments');
|
|
12
7
|
command
|
|
13
8
|
.description('Manage PayMongo payments')
|
|
14
|
-
.addCommand(new
|
|
9
|
+
.addCommand(new Command('list')
|
|
15
10
|
.description('List recent payments')
|
|
16
11
|
.option('-l, --limit <number>', 'Number of payments to show', '10')
|
|
17
12
|
.option('-j, --json', 'Output as JSON')
|
|
18
13
|
.action(async (options) => {
|
|
19
|
-
const spinner = new
|
|
20
|
-
const configManager = new
|
|
14
|
+
const spinner = new Spinner();
|
|
15
|
+
const configManager = new ConfigManager();
|
|
21
16
|
try {
|
|
22
17
|
spinner.start('Loading configuration...');
|
|
23
18
|
const config = await configManager.load();
|
|
24
19
|
if (!config) {
|
|
25
20
|
spinner.fail('No configuration found');
|
|
26
|
-
console.log(
|
|
27
|
-
console.log(
|
|
21
|
+
console.log(chalk.yellow('No PayMongo configuration found.'));
|
|
22
|
+
console.log(chalk.gray("Run 'paymongo init' to set up your project first."));
|
|
28
23
|
return;
|
|
29
24
|
}
|
|
30
25
|
spinner.succeed('Configuration loaded');
|
|
31
26
|
spinner.start('Fetching payments...');
|
|
32
|
-
const apiClient = new
|
|
27
|
+
const apiClient = new ApiClient({ config });
|
|
33
28
|
const payments = await apiClient.listPayments(parseInt(options.limit));
|
|
34
29
|
spinner.succeed(`Found ${payments.length} payments`);
|
|
35
30
|
if (options.json) {
|
|
@@ -37,45 +32,46 @@ command
|
|
|
37
32
|
return;
|
|
38
33
|
}
|
|
39
34
|
if (payments.length === 0) {
|
|
40
|
-
console.log(
|
|
35
|
+
console.log(chalk.gray('No payments found.'));
|
|
41
36
|
return;
|
|
42
37
|
}
|
|
43
|
-
console.log('\n' +
|
|
44
|
-
console.log(
|
|
38
|
+
console.log('\n' + chalk.bold('Recent Payments'));
|
|
39
|
+
console.log(chalk.gray('─'.repeat(80)));
|
|
45
40
|
payments.forEach((payment) => {
|
|
46
41
|
const amount = (payment.attributes.amount / 100).toFixed(2);
|
|
47
42
|
const currency = payment.attributes.currency;
|
|
48
43
|
const status = payment.attributes.status;
|
|
49
44
|
const created = new Date(payment.attributes.created_at * 1000).toLocaleDateString();
|
|
50
|
-
console.log(`${
|
|
45
|
+
console.log(`${chalk.bold(payment.id)} ${chalk.cyan(`₱${amount}`)} ${chalk.gray(currency)} ${getStatusColor(status)(status)} ${chalk.gray(created)}`);
|
|
51
46
|
});
|
|
52
47
|
console.log('');
|
|
53
48
|
}
|
|
54
49
|
catch (error) {
|
|
55
50
|
spinner.stop();
|
|
56
|
-
|
|
51
|
+
const err = error;
|
|
52
|
+
console.error(chalk.red('❌ Failed to fetch payments:'), err.message);
|
|
57
53
|
process.exit(1);
|
|
58
54
|
}
|
|
59
55
|
}))
|
|
60
|
-
.addCommand(new
|
|
56
|
+
.addCommand(new Command('show')
|
|
61
57
|
.description('Show payment details (for completed payments, not payment intents)')
|
|
62
58
|
.arguments('<id>')
|
|
63
59
|
.option('-j, --json', 'Output as JSON')
|
|
64
60
|
.action(async (id, options) => {
|
|
65
|
-
const spinner = new
|
|
66
|
-
const configManager = new
|
|
61
|
+
const spinner = new Spinner();
|
|
62
|
+
const configManager = new ConfigManager();
|
|
67
63
|
try {
|
|
68
64
|
spinner.start('Loading configuration...');
|
|
69
65
|
const config = await configManager.load();
|
|
70
66
|
if (!config) {
|
|
71
67
|
spinner.fail('No configuration found');
|
|
72
|
-
console.log(
|
|
73
|
-
console.log(
|
|
68
|
+
console.log(chalk.yellow('No PayMongo configuration found.'));
|
|
69
|
+
console.log(chalk.gray("Run 'paymongo init' to set up your project first."));
|
|
74
70
|
return;
|
|
75
71
|
}
|
|
76
72
|
spinner.succeed('Configuration loaded');
|
|
77
73
|
spinner.start('Fetching payment details...');
|
|
78
|
-
const apiClient = new
|
|
74
|
+
const apiClient = new ApiClient({ config });
|
|
79
75
|
const payment = await apiClient.getPayment(id);
|
|
80
76
|
spinner.succeed('Payment details loaded');
|
|
81
77
|
if (options.json) {
|
|
@@ -86,49 +82,50 @@ command
|
|
|
86
82
|
const amount = (attrs.amount / 100).toFixed(2);
|
|
87
83
|
const fees = attrs.fees ? (attrs.fees / 100).toFixed(2) : '0.00';
|
|
88
84
|
const netAmount = attrs.net_amount ? (attrs.net_amount / 100).toFixed(2) : '0.00';
|
|
89
|
-
console.log('\n' +
|
|
90
|
-
console.log(
|
|
91
|
-
console.log(`${
|
|
92
|
-
console.log(`${
|
|
93
|
-
console.log(`${
|
|
94
|
-
console.log(`${
|
|
95
|
-
console.log(`${
|
|
96
|
-
console.log(`${
|
|
97
|
-
console.log(`${
|
|
98
|
-
console.log(`${
|
|
85
|
+
console.log('\n' + chalk.bold('Payment Details'));
|
|
86
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
87
|
+
console.log(`${chalk.bold('ID:')} ${payment.id}`);
|
|
88
|
+
console.log(`${chalk.bold('Amount:')} ₱${amount} ${attrs.currency}`);
|
|
89
|
+
console.log(`${chalk.bold('Status:')} ${getStatusColor(attrs.status)(attrs.status)}`);
|
|
90
|
+
console.log(`${chalk.bold('Description:')} ${attrs.description || 'N/A'}`);
|
|
91
|
+
console.log(`${chalk.bold('External Reference:')} ${attrs.external_reference_number || 'N/A'}`);
|
|
92
|
+
console.log(`${chalk.bold('Paid At:')} ${attrs.paid_at ? new Date(attrs.paid_at * 1000).toLocaleString() : 'N/A'}`);
|
|
93
|
+
console.log(`${chalk.bold('Created:')} ${new Date(attrs.created_at * 1000).toLocaleString()}`);
|
|
94
|
+
console.log(`${chalk.bold('Updated:')} ${new Date(attrs.updated_at * 1000).toLocaleString()}`);
|
|
99
95
|
if (attrs.fees) {
|
|
100
|
-
console.log(`${
|
|
101
|
-
console.log(`${
|
|
96
|
+
console.log(`${chalk.bold('Fees:')} ₱${fees}`);
|
|
97
|
+
console.log(`${chalk.bold('Net Amount:')} ₱${netAmount}`);
|
|
102
98
|
}
|
|
103
99
|
if (attrs.source) {
|
|
104
|
-
console.log(`${
|
|
100
|
+
console.log(`${chalk.bold('Payment Method:')} ${attrs.source.attributes.type}`);
|
|
105
101
|
}
|
|
106
|
-
console.log(`${
|
|
102
|
+
console.log(`${chalk.bold('Payment Intent:')} ${attrs.payment_intent_id}`);
|
|
107
103
|
console.log('');
|
|
108
|
-
console.log(
|
|
104
|
+
console.log(chalk.gray(`View in dashboard: https://dashboard.paymongo.com/payments/${payment.id}`));
|
|
109
105
|
}
|
|
110
106
|
catch (error) {
|
|
111
107
|
spinner.stop();
|
|
112
|
-
|
|
108
|
+
const err = error;
|
|
109
|
+
console.error(chalk.red('❌ Failed to fetch payment:'), err.message);
|
|
113
110
|
process.exit(1);
|
|
114
111
|
}
|
|
115
112
|
}))
|
|
116
|
-
.addCommand(new
|
|
113
|
+
.addCommand(new Command('create-intent')
|
|
117
114
|
.description('Create a payment intent')
|
|
118
115
|
.option('-a, --amount <amount>', 'Amount in centavos (e.g., 10000 for ₱100.00)', '10000')
|
|
119
116
|
.option('-c, --currency <currency>', 'Currency code', 'PHP')
|
|
120
117
|
.option('-d, --description <description>', 'Payment description')
|
|
121
118
|
.option('-j, --json', 'Output as JSON')
|
|
122
119
|
.action(async (options) => {
|
|
123
|
-
const spinner = new
|
|
124
|
-
const configManager = new
|
|
120
|
+
const spinner = new Spinner();
|
|
121
|
+
const configManager = new ConfigManager();
|
|
125
122
|
try {
|
|
126
123
|
spinner.start('Loading configuration...');
|
|
127
124
|
const config = await configManager.load();
|
|
128
125
|
if (!config) {
|
|
129
126
|
spinner.fail('No configuration found');
|
|
130
|
-
console.log(
|
|
131
|
-
console.log(
|
|
127
|
+
console.log(chalk.yellow('No PayMongo configuration found.'));
|
|
128
|
+
console.log(chalk.gray("Run 'paymongo init' to set up your project first."));
|
|
132
129
|
return;
|
|
133
130
|
}
|
|
134
131
|
spinner.succeed('Configuration loaded');
|
|
@@ -137,7 +134,7 @@ command
|
|
|
137
134
|
throw new Error('Amount must be a positive number in centavos');
|
|
138
135
|
}
|
|
139
136
|
spinner.start('Creating payment intent...');
|
|
140
|
-
const apiClient = new
|
|
137
|
+
const apiClient = new ApiClient({ config });
|
|
141
138
|
const paymentIntent = await apiClient.createPaymentIntent(amount, options.currency, options.description);
|
|
142
139
|
spinner.succeed('Payment intent created');
|
|
143
140
|
if (options.json) {
|
|
@@ -146,35 +143,36 @@ command
|
|
|
146
143
|
}
|
|
147
144
|
const attrs = paymentIntent.attributes;
|
|
148
145
|
const displayAmount = (attrs.amount / 100).toFixed(2);
|
|
149
|
-
console.log('\n' +
|
|
150
|
-
console.log(
|
|
151
|
-
console.log(`${
|
|
152
|
-
console.log(`${
|
|
153
|
-
console.log(`${
|
|
154
|
-
console.log(`${
|
|
155
|
-
console.log(`${
|
|
146
|
+
console.log('\n' + chalk.bold('Payment Intent Created'));
|
|
147
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
148
|
+
console.log(`${chalk.bold('ID:')} ${paymentIntent.id}`);
|
|
149
|
+
console.log(`${chalk.bold('Amount:')} ₱${displayAmount} ${attrs.currency}`);
|
|
150
|
+
console.log(`${chalk.bold('Status:')} ${getStatusColor(attrs.status)(attrs.status)}`);
|
|
151
|
+
console.log(`${chalk.bold('Description:')} ${attrs.description || 'N/A'}`);
|
|
152
|
+
console.log(`${chalk.bold('Created:')} ${new Date(attrs.created_at * 1000).toLocaleString()}`);
|
|
156
153
|
console.log('');
|
|
157
|
-
console.log(
|
|
154
|
+
console.log(chalk.gray(`Use this ID to attach a payment method and confirm the payment.`));
|
|
158
155
|
}
|
|
159
156
|
catch (error) {
|
|
160
157
|
spinner.stop();
|
|
161
|
-
|
|
158
|
+
const err = error;
|
|
159
|
+
console.error(chalk.red('❌ Failed to create payment intent:'), err.message);
|
|
162
160
|
process.exit(1);
|
|
163
161
|
}
|
|
164
162
|
}));
|
|
165
163
|
function getStatusColor(status) {
|
|
166
164
|
switch (status) {
|
|
167
165
|
case 'paid':
|
|
168
|
-
return
|
|
166
|
+
return chalk.green;
|
|
169
167
|
case 'pending':
|
|
170
|
-
return
|
|
168
|
+
return chalk.yellow;
|
|
171
169
|
case 'failed':
|
|
172
|
-
return
|
|
170
|
+
return chalk.red;
|
|
173
171
|
case 'cancelled':
|
|
174
|
-
return
|
|
172
|
+
return chalk.gray;
|
|
175
173
|
default:
|
|
176
|
-
return
|
|
174
|
+
return chalk.white;
|
|
177
175
|
}
|
|
178
176
|
}
|
|
179
|
-
|
|
177
|
+
export default command;
|
|
180
178
|
//# sourceMappingURL=payments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payments.js","sourceRoot":"","sources":["../../src/commands/payments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payments.js","sourceRoot":"","sources":["../../src/commands/payments.ts"],"names":[],"mappings":"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"}
|