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,54 @@
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 ora_1 = __importDefault(require("ora"));
7
+ class Spinner {
8
+ constructor(options = {}) {
9
+ const { text = 'Loading...', color = 'cyan' } = options;
10
+ this.spinner = (0, ora_1.default)({
11
+ text,
12
+ color,
13
+ spinner: 'dots',
14
+ });
15
+ }
16
+ start(text) {
17
+ if (text) {
18
+ this.spinner.text = text;
19
+ }
20
+ this.spinner.start();
21
+ }
22
+ stop() {
23
+ this.spinner.stop();
24
+ }
25
+ succeed(text) {
26
+ if (text) {
27
+ this.spinner.text = text;
28
+ }
29
+ this.spinner.succeed();
30
+ }
31
+ fail(text) {
32
+ if (text) {
33
+ this.spinner.text = text;
34
+ }
35
+ this.spinner.fail();
36
+ }
37
+ warn(text) {
38
+ if (text) {
39
+ this.spinner.text = text;
40
+ }
41
+ this.spinner.warn();
42
+ }
43
+ info(text) {
44
+ if (text) {
45
+ this.spinner.text = text;
46
+ }
47
+ this.spinner.info();
48
+ }
49
+ update(text) {
50
+ this.spinner.text = text;
51
+ }
52
+ }
53
+ exports.default = Spinner;
54
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;;;;AAAA,8CAA+B;AAO/B,MAAM,OAAO;IAGX,YAAY,UAA0B,EAAE;QACtC,MAAM,EAAE,IAAI,GAAG,YAAY,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,IAAA,aAAG,EAAC;YACjB,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAa;QACjB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,IAAa;QACnB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3B,CAAC;CACF;AAED,kBAAe,OAAO,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { PayMongoConfig } from '../types/paymongo';
2
+ export declare class ValidationError extends Error {
3
+ field?: string | undefined;
4
+ constructor(message: string, field?: string | undefined);
5
+ }
6
+ export declare function validateApiKey(key: string, type: 'public' | 'secret'): boolean;
7
+ export declare function validateWebhookUrl(url: string): boolean;
8
+ export declare function validateConfig(config: Partial<PayMongoConfig>): void;
9
+ export declare function validateEventTypes(events: string[]): void;
10
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,CAAC,EAAE,MAAM;gBADrB,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA;CAKxB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAW9E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAsCpE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAczD"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValidationError = void 0;
4
+ exports.validateApiKey = validateApiKey;
5
+ exports.validateWebhookUrl = validateWebhookUrl;
6
+ exports.validateConfig = validateConfig;
7
+ exports.validateEventTypes = validateEventTypes;
8
+ class ValidationError extends Error {
9
+ constructor(message, field) {
10
+ super(message);
11
+ this.field = field;
12
+ this.name = 'ValidationError';
13
+ }
14
+ }
15
+ exports.ValidationError = ValidationError;
16
+ function validateApiKey(key, type) {
17
+ if (!key || typeof key !== 'string') {
18
+ return false;
19
+ }
20
+ // PayMongo API keys follow the format: pk_{env}_XXXXXXXXXXXXXXXXXX
21
+ // where env is 'test' or 'live', and X is alphanumeric characters
22
+ const prefix = type === 'public' ? 'pk_' : 'sk_';
23
+ const pattern = new RegExp(`^${prefix}(test|live)_[a-zA-Z0-9]{20,}$`);
24
+ return pattern.test(key);
25
+ }
26
+ function validateWebhookUrl(url) {
27
+ try {
28
+ const parsedUrl = new URL(url);
29
+ return (parsedUrl.protocol === 'https:' ||
30
+ parsedUrl.hostname === 'localhost' ||
31
+ parsedUrl.hostname === '127.0.0.1');
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ function validateConfig(config) {
38
+ if (!config.projectName?.trim()) {
39
+ throw new ValidationError('Project name is required', 'projectName');
40
+ }
41
+ if (!config.version) {
42
+ throw new ValidationError('Config version is required', 'version');
43
+ }
44
+ if (!['test', 'live'].includes(config.environment)) {
45
+ throw new ValidationError('Environment must be either "test" or "live"', 'environment');
46
+ }
47
+ const env = config.environment;
48
+ const apiKeys = config.apiKeys?.[env];
49
+ if (!apiKeys?.secret) {
50
+ throw new ValidationError(`Secret API key for ${env} environment is required`, 'apiKeys.secret');
51
+ }
52
+ if (apiKeys.public && !validateApiKey(apiKeys.public, 'public')) {
53
+ throw new ValidationError('Invalid public API key format', 'apiKeys.public');
54
+ }
55
+ if (!validateApiKey(apiKeys.secret, 'secret')) {
56
+ throw new ValidationError('Invalid secret API key format', 'apiKeys.secret');
57
+ }
58
+ if (config.webhooks?.url && !validateWebhookUrl(config.webhooks.url)) {
59
+ throw new ValidationError('Invalid webhook URL. Must be HTTPS or localhost', 'webhooks.url');
60
+ }
61
+ if (config.dev?.port !== undefined && (config.dev.port < 1 || config.dev.port > 65535)) {
62
+ throw new ValidationError('Port must be between 1 and 65535', 'dev.port');
63
+ }
64
+ }
65
+ function validateEventTypes(events) {
66
+ const validEvents = [
67
+ 'payment.paid',
68
+ 'payment.failed',
69
+ 'payment.refunded',
70
+ 'source.chargeable',
71
+ 'checkout_session.payment.paid',
72
+ 'qrph.expired',
73
+ ];
74
+ const invalidEvents = events.filter((event) => !validEvents.includes(event));
75
+ if (invalidEvents.length > 0) {
76
+ throw new ValidationError(`Invalid event types: ${invalidEvents.join(', ')}`);
77
+ }
78
+ }
79
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "paymongo-cli",
3
+ "version": "1.0.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
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "paymongo": "bin/paymongo.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "build:incremental": "tsc --incremental",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "test": "jest",
15
+ "test:watch": "jest --watch",
16
+ "lint": "eslint src/**/*.ts tests/**/*.ts",
17
+ "lint:fix": "eslint src/**/*.ts --fix",
18
+ "format": "prettier --write src/**/*.ts",
19
+ "benchmark": "npx ts-node scripts/benchmark.ts",
20
+ "prepare": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "paymongo",
24
+ "cli",
25
+ "payments",
26
+ "webhooks",
27
+ "development"
28
+ ],
29
+ "author": "Leodyver Semilla",
30
+ "license": "MIT",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/leodyversemilla07/paymongo-cli.git"
34
+ },
35
+ "bugs": {
36
+ "url": "https://github.com/leodyversemilla07/paymongo-cli/issues"
37
+ },
38
+ "homepage": "https://github.com/leodyversemilla07/paymongo-cli#readme",
39
+ "engines": {
40
+ "node": ">=18.0.0"
41
+ },
42
+ "dependencies": {
43
+ "@ngrok/ngrok": "^1.7.0",
44
+ "@types/express": "^5.0.6",
45
+ "axios": "^1.6.0",
46
+ "chalk": "^5.3.0",
47
+ "commander": "^11.1.0",
48
+ "cosmiconfig": "^8.3.6",
49
+ "express": "^5.2.1",
50
+ "inquirer": "^9.2.12",
51
+ "ora": "^7.0.1",
52
+ "socket.io": "^4.8.3",
53
+ "winston": "^3.11.0"
54
+ },
55
+ "devDependencies": {
56
+ "@types/inquirer": "^9.0.7",
57
+ "@types/jest": "^29.5.8",
58
+ "@types/node": "^20.10.0",
59
+ "@typescript-eslint/eslint-plugin": "^6.14.0",
60
+ "@typescript-eslint/parser": "^6.14.0",
61
+ "eslint": "^8.55.0",
62
+ "jest": "^29.7.0",
63
+ "prettier": "^3.1.1",
64
+ "ts-jest": "^29.1.1",
65
+ "typescript": "^5.3.3"
66
+ },
67
+ "publishConfig": {
68
+ "access": "public"
69
+ }
70
+ }