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.
- package/.github/ISSUE_TEMPLATE/bug-report.md +33 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +30 -0
- package/.github/workflows/ci-cd.yml +88 -0
- package/.github/workflows/ci.yml +46 -0
- package/.github/workflows/release.yml +54 -0
- package/LICENSE +21 -0
- package/README.md +113 -0
- package/bin/paymongo.js +3 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +398 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev.d.ts +4 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +353 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/gui.d.ts +4 -0
- package/dist/commands/gui.d.ts.map +1 -0
- package/dist/commands/gui.js +74 -0
- package/dist/commands/gui.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +268 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +287 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/payments.d.ts +4 -0
- package/dist/commands/payments.d.ts.map +1 -0
- package/dist/commands/payments.js +180 -0
- package/dist/commands/payments.js.map +1 -0
- package/dist/commands/team/index.d.ts +4 -0
- package/dist/commands/team/index.d.ts.map +1 -0
- package/dist/commands/team/index.js +155 -0
- package/dist/commands/team/index.js.map +1 -0
- package/dist/commands/trigger.d.ts +4 -0
- package/dist/commands/trigger.d.ts.map +1 -0
- package/dist/commands/trigger.js +312 -0
- package/dist/commands/trigger.js.map +1 -0
- package/dist/commands/webhooks.d.ts +4 -0
- package/dist/commands/webhooks.d.ts.map +1 -0
- package/dist/commands/webhooks.js +357 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/services/analytics/service.d.ts +29 -0
- package/dist/services/analytics/service.d.ts.map +1 -0
- package/dist/services/analytics/service.js +97 -0
- package/dist/services/analytics/service.js.map +1 -0
- package/dist/services/api/client.d.ts +27 -0
- package/dist/services/api/client.d.ts.map +1 -0
- package/dist/services/api/client.js +151 -0
- package/dist/services/api/client.js.map +1 -0
- package/dist/services/config/manager.d.ts +16 -0
- package/dist/services/config/manager.d.ts.map +1 -0
- package/dist/services/config/manager.js +211 -0
- package/dist/services/config/manager.js.map +1 -0
- package/dist/services/github/auth.d.ts +15 -0
- package/dist/services/github/auth.d.ts.map +1 -0
- package/dist/services/github/auth.js +119 -0
- package/dist/services/github/auth.js.map +1 -0
- package/dist/services/github/client.d.ts +54 -0
- package/dist/services/github/client.d.ts.map +1 -0
- package/dist/services/github/client.js +107 -0
- package/dist/services/github/client.js.map +1 -0
- package/dist/services/github/sync.d.ts +26 -0
- package/dist/services/github/sync.d.ts.map +1 -0
- package/dist/services/github/sync.js +200 -0
- package/dist/services/github/sync.js.map +1 -0
- package/dist/services/web/server.d.ts +30 -0
- package/dist/services/web/server.d.ts.map +1 -0
- package/dist/services/web/server.js +159 -0
- package/dist/services/web/server.js.map +1 -0
- package/dist/types/paymongo.d.ts +118 -0
- package/dist/types/paymongo.d.ts.map +1 -0
- package/dist/types/paymongo.js +3 -0
- package/dist/types/paymongo.js.map +1 -0
- package/dist/utils/cache.d.ts +20 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +164 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/constants.d.ts +32 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +52 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/errors.d.ts +33 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +79 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +53 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/spinner.d.ts +17 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +54 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/validator.d.ts +10 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +79 -0
- package/dist/utils/validator.js.map +1 -0
- package/package.json +70 -0
- package/web/index.html +688 -0
|
@@ -0,0 +1,353 @@
|
|
|
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 http = __importStar(require("http"));
|
|
41
|
+
const crypto = __importStar(require("crypto"));
|
|
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 spinner_1 = __importDefault(require("../utils/spinner"));
|
|
46
|
+
const errors_1 = require("../utils/errors");
|
|
47
|
+
class DevServer {
|
|
48
|
+
constructor(port, config) {
|
|
49
|
+
this.port = port;
|
|
50
|
+
this.config = config;
|
|
51
|
+
this.server = http.createServer((req, res) => {
|
|
52
|
+
this.handleWebhookRequest(req, res);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async start() {
|
|
56
|
+
// Start HTTP server
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
this.server.listen(this.port, () => {
|
|
59
|
+
console.log(chalk_1.default.green('✓'), `Webhook server listening on http://localhost:${this.port}`);
|
|
60
|
+
resolve();
|
|
61
|
+
});
|
|
62
|
+
this.server.on('error', (error) => {
|
|
63
|
+
reject(new Error(`Failed to start server on port ${this.port}: ${error.message}`));
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async stop() {
|
|
68
|
+
return new Promise((resolve) => {
|
|
69
|
+
this.server.close(() => {
|
|
70
|
+
console.log(chalk_1.default.yellow('✓'), 'Webhook server stopped');
|
|
71
|
+
resolve();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
handleWebhookRequest(req, res) {
|
|
76
|
+
if (req.method !== 'POST' || req.url !== '/webhook') {
|
|
77
|
+
res.writeHead(404);
|
|
78
|
+
res.end('Not Found');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
let body = '';
|
|
82
|
+
req.on('data', (chunk) => {
|
|
83
|
+
body += chunk.toString();
|
|
84
|
+
});
|
|
85
|
+
req.on('end', () => {
|
|
86
|
+
try {
|
|
87
|
+
const event = JSON.parse(body);
|
|
88
|
+
// Verify webhook signature if enabled
|
|
89
|
+
const signatureValid = this.verifyWebhookSignature(req, body);
|
|
90
|
+
if (!signatureValid) {
|
|
91
|
+
console.log(chalk_1.default.red('⚠️'), 'Webhook signature verification failed');
|
|
92
|
+
res.writeHead(401, { 'Content-Type': 'application/json' });
|
|
93
|
+
res.end(JSON.stringify({ error: 'Invalid signature' }));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Log the webhook event
|
|
97
|
+
this.logWebhookEvent(event);
|
|
98
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
99
|
+
res.end(JSON.stringify({ success: true }));
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error(chalk_1.default.red('✗'), 'Failed to process webhook:', error.message);
|
|
103
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
104
|
+
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
logWebhookEvent(event) {
|
|
109
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
110
|
+
const eventType = event.data?.type || 'unknown';
|
|
111
|
+
const eventId = event.data?.id || 'unknown';
|
|
112
|
+
console.log('');
|
|
113
|
+
console.log(chalk_1.default.gray('────────────────────────────────────────────────────────────'));
|
|
114
|
+
console.log(chalk_1.default.blue(`[${timestamp}]`), chalk_1.default.bold(eventType.toUpperCase()));
|
|
115
|
+
if (eventType === 'payment') {
|
|
116
|
+
const amount = event.data.attributes.amount;
|
|
117
|
+
const status = event.data.attributes.status;
|
|
118
|
+
console.log(chalk_1.default.gray('└─'), `Amount: ₱${(amount / 100).toFixed(2)}`);
|
|
119
|
+
console.log(chalk_1.default.gray('└─'), `Status: ${status}`);
|
|
120
|
+
console.log(chalk_1.default.gray('└─'), `Payment ID: ${eventId}`);
|
|
121
|
+
}
|
|
122
|
+
console.log(chalk_1.default.gray('└─'), `View: https://dashboard.paymongo.com/${eventType === 'payment' ? 'payments' : 'webhooks'}/${eventId}`);
|
|
123
|
+
}
|
|
124
|
+
verifyWebhookSignature(req, body) {
|
|
125
|
+
// Check if signature verification is enabled in config
|
|
126
|
+
if (!this.config.dev.verifyWebhookSignatures) {
|
|
127
|
+
console.log(chalk_1.default.yellow('ℹ️'), 'Webhook signature verification disabled in config');
|
|
128
|
+
return true; // Allow all requests when verification is disabled
|
|
129
|
+
}
|
|
130
|
+
const signatureHeader = req.headers['paymongo-signature'];
|
|
131
|
+
if (!signatureHeader) {
|
|
132
|
+
console.log(chalk_1.default.red('⚠️'), 'Signature verification required but no signature header found');
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
// Parse signature header: t=<timestamp>,te=<signature>,li=
|
|
136
|
+
const signatureParts = signatureHeader.split(',');
|
|
137
|
+
if (signatureParts.length < 2) {
|
|
138
|
+
console.log(chalk_1.default.red('⚠️'), 'Invalid signature format');
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
const timestamp = signatureParts.find((part) => part.startsWith('t='))?.split('=')[1];
|
|
142
|
+
const signature = signatureParts.find((part) => part.startsWith('te='))?.split('=')[1];
|
|
143
|
+
if (!timestamp || !signature) {
|
|
144
|
+
console.log(chalk_1.default.red('⚠️'), 'Missing timestamp or signature in header');
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
// For now, look for any webhook secret in config
|
|
148
|
+
// TODO: In production, this should be more sophisticated - match webhook URL or ID
|
|
149
|
+
const webhookSecrets = this.config.webhookSecrets || {};
|
|
150
|
+
const secretKeys = Object.values(webhookSecrets);
|
|
151
|
+
if (secretKeys.length === 0) {
|
|
152
|
+
console.log(chalk_1.default.yellow('⚠️'), 'Signature verification enabled but no webhook secrets configured');
|
|
153
|
+
return true; // Allow requests when no secrets are configured yet
|
|
154
|
+
}
|
|
155
|
+
// Try to verify with each available secret
|
|
156
|
+
let isValid = false;
|
|
157
|
+
for (const secret of secretKeys) {
|
|
158
|
+
try {
|
|
159
|
+
const expectedSignature = crypto
|
|
160
|
+
.createHmac('sha256', secret)
|
|
161
|
+
.update(`${timestamp}.${body}`)
|
|
162
|
+
.digest('hex');
|
|
163
|
+
if (crypto.timingSafeEqual(Buffer.from(signature, 'hex'), Buffer.from(expectedSignature, 'hex'))) {
|
|
164
|
+
isValid = true;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
// Continue trying other secrets
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (isValid) {
|
|
174
|
+
console.log(chalk_1.default.green('✓'), 'Signature verified successfully');
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.log(chalk_1.default.red('✗'), 'Signature verification failed');
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const command = new commander_1.Command('dev');
|
|
184
|
+
command
|
|
185
|
+
.description('Start local development server')
|
|
186
|
+
.option('-p, --port <port>', 'Port to run the webhook server on', '3000')
|
|
187
|
+
.option('--no-register', 'Skip automatic webhook registration')
|
|
188
|
+
.option('-e, --events <events>', 'Comma-separated events to listen for', 'payment.paid,payment.failed')
|
|
189
|
+
.option('--ngrok-token <token>', 'ngrok authtoken (if not set in environment)')
|
|
190
|
+
.action(async (options) => {
|
|
191
|
+
const spinner = new spinner_1.default();
|
|
192
|
+
const configManager = new manager_1.default();
|
|
193
|
+
let tunnel;
|
|
194
|
+
try {
|
|
195
|
+
// Load configuration
|
|
196
|
+
spinner.start('Loading configuration...');
|
|
197
|
+
const config = await configManager.load();
|
|
198
|
+
if (!config) {
|
|
199
|
+
spinner.fail('No configuration found');
|
|
200
|
+
console.log(chalk_1.default.yellow('No PayMongo configuration found.'));
|
|
201
|
+
console.log(chalk_1.default.gray("Run 'paymongo init' to set up your project first."));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
spinner.succeed('Configuration loaded');
|
|
205
|
+
// Start ngrok tunnel
|
|
206
|
+
spinner.start('Creating tunnel...');
|
|
207
|
+
const port = parseInt(options.port || '3000');
|
|
208
|
+
// Lazy load ngrok to reduce startup time
|
|
209
|
+
const { default: ngrok } = await Promise.resolve().then(() => __importStar(require('@ngrok/ngrok')));
|
|
210
|
+
const tunnelUrl = await (0, errors_1.withRetry)(async () => {
|
|
211
|
+
try {
|
|
212
|
+
// Try to get authtoken from command line option or environment
|
|
213
|
+
const authtoken = options.ngrokToken || process.env.NGROK_AUTHTOKEN;
|
|
214
|
+
if (!authtoken) {
|
|
215
|
+
throw new Error('ngrok authtoken not found. Please either:\n' +
|
|
216
|
+
' 1. Set NGROK_AUTHTOKEN environment variable, or\n' +
|
|
217
|
+
' 2. Use --ngrok-token option: paymongo dev --ngrok-token YOUR_TOKEN\n' +
|
|
218
|
+
' Get your token from: https://dashboard.ngrok.com/get-started/your-authtoken');
|
|
219
|
+
}
|
|
220
|
+
tunnel = await ngrok.forward({
|
|
221
|
+
addr: port,
|
|
222
|
+
authtoken: authtoken,
|
|
223
|
+
});
|
|
224
|
+
return tunnel.url();
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
console.log(chalk_1.default.yellow('Debug: ngrok error details:'), error.message);
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
}, {
|
|
231
|
+
maxRetries: 3,
|
|
232
|
+
delayMs: 2000,
|
|
233
|
+
retryCondition: (error) => {
|
|
234
|
+
// Retry on network errors and common ngrok issues
|
|
235
|
+
return (error.message.includes('connection') ||
|
|
236
|
+
error.message.includes('timeout') ||
|
|
237
|
+
error.message.includes('tunnel') ||
|
|
238
|
+
error.message.includes('ngrok') ||
|
|
239
|
+
error.message.includes('authtoken'));
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
spinner.succeed('Tunnel created');
|
|
243
|
+
// Start webhook server
|
|
244
|
+
const devServer = new DevServer(port, config);
|
|
245
|
+
await devServer.start();
|
|
246
|
+
// Register webhook (unless disabled)
|
|
247
|
+
let webhookId;
|
|
248
|
+
if (!options.noRegister) {
|
|
249
|
+
spinner.start('Registering webhook...');
|
|
250
|
+
const events = (options.events || 'payment.paid,payment.failed').split(',');
|
|
251
|
+
const webhookUrl = `${tunnelUrl}/webhook`;
|
|
252
|
+
try {
|
|
253
|
+
const webhook = await new client_1.default({ config }).createWebhook(webhookUrl, events);
|
|
254
|
+
webhookId = webhook.id;
|
|
255
|
+
// Store webhook secret if available
|
|
256
|
+
if (webhook.attributes?.secret) {
|
|
257
|
+
config.webhookSecrets = config.webhookSecrets || {};
|
|
258
|
+
config.webhookSecrets[webhook.id] = webhook.attributes.secret;
|
|
259
|
+
await configManager.save(config);
|
|
260
|
+
spinner.succeed(`Webhook registered: ${webhookId} (with signature verification)`);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
spinner.succeed(`Webhook registered: ${webhookId}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
const err = error;
|
|
268
|
+
spinner.warn('Webhook registration failed - server will start without webhook');
|
|
269
|
+
console.log(chalk_1.default.yellow('⚠️'), 'Webhook registration failed:', err.message);
|
|
270
|
+
console.log('');
|
|
271
|
+
console.log(chalk_1.default.blue('ℹ️'), 'You can still test webhooks manually:');
|
|
272
|
+
console.log(chalk_1.default.gray(` Webhook URL: ${webhookUrl}`));
|
|
273
|
+
console.log(chalk_1.default.gray(' Copy this URL to your PayMongo dashboard'));
|
|
274
|
+
console.log('');
|
|
275
|
+
if (err.message.includes('API key') || err.message.includes('unauthorized')) {
|
|
276
|
+
console.log(chalk_1.default.yellow('💡 To fix webhook registration:'));
|
|
277
|
+
console.log(chalk_1.default.gray(' 1. Run "paymongo login" to update your API keys'));
|
|
278
|
+
console.log(chalk_1.default.gray(' 2. Restart the development server'));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Display status
|
|
283
|
+
console.log('\n' + chalk_1.default.green('🚀 PayMongo Development Server'));
|
|
284
|
+
console.log('');
|
|
285
|
+
console.log(chalk_1.default.green('✓'), `Tunnel: ${tunnelUrl}`);
|
|
286
|
+
if (webhookId) {
|
|
287
|
+
console.log(chalk_1.default.green('✓'), `Webhook: ${webhookId}`);
|
|
288
|
+
}
|
|
289
|
+
console.log(chalk_1.default.green('✓'), `Server: http://localhost:${port}/webhook`);
|
|
290
|
+
console.log('');
|
|
291
|
+
console.log(chalk_1.default.bold('Forwarding:'), `${tunnelUrl} → http://localhost:${port}`);
|
|
292
|
+
console.log('');
|
|
293
|
+
console.log(chalk_1.default.bold('Events:'), (options.events || 'payment.paid,payment.failed').split(',').join(', '));
|
|
294
|
+
console.log('');
|
|
295
|
+
console.log(chalk_1.default.gray('Press Ctrl+C to stop'));
|
|
296
|
+
// Handle cleanup on exit
|
|
297
|
+
const cleanup = async () => {
|
|
298
|
+
console.log('\n' + chalk_1.default.yellow('Shutting down...'));
|
|
299
|
+
try {
|
|
300
|
+
// Disconnect ngrok
|
|
301
|
+
if (tunnel) {
|
|
302
|
+
await tunnel.close();
|
|
303
|
+
console.log(chalk_1.default.yellow('✓'), 'Tunnel closed');
|
|
304
|
+
}
|
|
305
|
+
// Stop server
|
|
306
|
+
await devServer.stop();
|
|
307
|
+
// Delete webhook
|
|
308
|
+
if (webhookId) {
|
|
309
|
+
spinner.start('Cleaning up webhook...');
|
|
310
|
+
await new client_1.default({ config }).deleteWebhook(webhookId);
|
|
311
|
+
spinner.succeed('Webhook deleted');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
console.error(chalk_1.default.red('Error during cleanup:'), error.message);
|
|
316
|
+
console.log(chalk_1.default.yellow('⚠️'), 'Some cleanup tasks may not have completed');
|
|
317
|
+
}
|
|
318
|
+
process.exit(0);
|
|
319
|
+
};
|
|
320
|
+
process.on('SIGINT', cleanup);
|
|
321
|
+
process.on('SIGTERM', cleanup);
|
|
322
|
+
// Keep the process running
|
|
323
|
+
await new Promise(() => { }); // Never resolves
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
spinner.stop();
|
|
327
|
+
const err = error;
|
|
328
|
+
// Provide actionable error messages based on error type
|
|
329
|
+
if (err.message.includes('ngrok') || err.message.includes('tunnel')) {
|
|
330
|
+
console.error(chalk_1.default.red('❌ Failed to create tunnel:'), err.message);
|
|
331
|
+
console.log('');
|
|
332
|
+
console.log(chalk_1.default.yellow('💡 Troubleshooting suggestions:'));
|
|
333
|
+
console.log(chalk_1.default.gray('• Check your internet connection'));
|
|
334
|
+
console.log(chalk_1.default.gray('• Make sure ngrok is not blocked by firewall/antivirus'));
|
|
335
|
+
console.log(chalk_1.default.gray('• Set up ngrok authentication: export NGROK_AUTHTOKEN=your_token'));
|
|
336
|
+
console.log(chalk_1.default.gray('• Get your authtoken from: https://dashboard.ngrok.com/get-started/your-authtoken'));
|
|
337
|
+
console.log(chalk_1.default.gray('• Try a different port: paymongo dev --port 3001'));
|
|
338
|
+
console.log(chalk_1.default.gray('• Visit https://ngrok.com for status updates'));
|
|
339
|
+
}
|
|
340
|
+
// Cleanup on error
|
|
341
|
+
try {
|
|
342
|
+
if (tunnel) {
|
|
343
|
+
await tunnel.close();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
// Ignore cleanup errors during shutdown
|
|
348
|
+
}
|
|
349
|
+
process.exit(1);
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
exports.default = command;
|
|
353
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gui.d.ts","sourceRoot":"","sources":["../../src/commands/gui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,QAAA,MAAM,OAAO,SAoET,CAAC;AAEL,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const commander_1 = require("commander");
|
|
7
|
+
const manager_1 = require("../services/config/manager");
|
|
8
|
+
const client_1 = require("../services/api/client");
|
|
9
|
+
const server_1 = require("../services/web/server");
|
|
10
|
+
const service_1 = require("../services/analytics/service");
|
|
11
|
+
const spinner_1 = __importDefault(require("../utils/spinner"));
|
|
12
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
13
|
+
const command = new commander_1.Command('gui')
|
|
14
|
+
.description('Start the PayMongo GUI dashboard')
|
|
15
|
+
.option('-p, --port <port>', 'Port to run the GUI server on', '8080')
|
|
16
|
+
.option('-h, --host <host>', 'Host to bind the GUI server to', 'localhost')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
const spinner = new spinner_1.default();
|
|
19
|
+
const configManager = new manager_1.ConfigManager();
|
|
20
|
+
try {
|
|
21
|
+
spinner.start('Loading configuration...');
|
|
22
|
+
const config = await configManager.load();
|
|
23
|
+
if (!config) {
|
|
24
|
+
spinner.fail('No configuration found');
|
|
25
|
+
console.log(chalk_1.default.yellow('No PayMongo configuration found.'));
|
|
26
|
+
console.log(chalk_1.default.gray("Run 'paymongo init' to set up your project first."));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
spinner.succeed('Configuration loaded');
|
|
30
|
+
spinner.start('Starting GUI dashboard...');
|
|
31
|
+
const apiClient = new client_1.ApiClient({ config });
|
|
32
|
+
const analyticsService = new service_1.AnalyticsService();
|
|
33
|
+
const webServer = new server_1.WebServer({
|
|
34
|
+
port: parseInt(options.port),
|
|
35
|
+
host: options.host,
|
|
36
|
+
configManager,
|
|
37
|
+
apiClient,
|
|
38
|
+
analyticsService,
|
|
39
|
+
});
|
|
40
|
+
await webServer.start();
|
|
41
|
+
spinner.succeed('GUI dashboard started');
|
|
42
|
+
console.log('');
|
|
43
|
+
console.log(chalk_1.default.green('✓ PayMongo GUI Dashboard is running!'));
|
|
44
|
+
console.log(chalk_1.default.blue(`🌐 Open your browser to: http://${options.host}:${options.port}`));
|
|
45
|
+
console.log('');
|
|
46
|
+
console.log(chalk_1.default.gray('Features:'));
|
|
47
|
+
console.log(chalk_1.default.gray('• Real-time webhook monitoring'));
|
|
48
|
+
console.log(chalk_1.default.gray('• Configuration management'));
|
|
49
|
+
console.log(chalk_1.default.gray('• Webhook event history'));
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log(chalk_1.default.gray('Press Ctrl+C to stop the server'));
|
|
52
|
+
// Handle graceful shutdown
|
|
53
|
+
process.on('SIGINT', async () => {
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(chalk_1.default.yellow('Shutting down GUI dashboard...'));
|
|
56
|
+
await webServer.stop();
|
|
57
|
+
process.exit(0);
|
|
58
|
+
});
|
|
59
|
+
process.on('SIGTERM', async () => {
|
|
60
|
+
console.log('');
|
|
61
|
+
console.log(chalk_1.default.yellow('Shutting down GUI dashboard...'));
|
|
62
|
+
await webServer.stop();
|
|
63
|
+
process.exit(0);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
spinner.stop();
|
|
68
|
+
const err = error;
|
|
69
|
+
console.error(chalk_1.default.red('❌ Failed to start GUI dashboard:'), err.message);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
exports.default = command;
|
|
74
|
+
//# sourceMappingURL=gui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gui.js","sourceRoot":"","sources":["../../src/commands/gui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,QAAA,MAAM,OAAO,SAAsB,CAAC;AA+OpC,eAAe,OAAO,CAAC"}
|