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,151 @@
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
+ exports.ApiClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const REQUEST_TIMEOUT = 30000;
9
+ const errors_1 = require("../../utils/errors");
10
+ const cache_1 = __importDefault(require("../../utils/cache"));
11
+ class ApiClient {
12
+ constructor(options) {
13
+ this.config = options.config;
14
+ const timeout = options.timeout || REQUEST_TIMEOUT;
15
+ this.client = axios_1.default.create({
16
+ baseURL: `https://api.paymongo.com/v1`,
17
+ timeout,
18
+ headers: {
19
+ 'Content-Type': 'application/json',
20
+ 'User-Agent': 'paymongo-cli/1.0.0',
21
+ },
22
+ });
23
+ this.cache = new cache_1.default({ ttl: 2 * 60 * 1000 }); // 2 minute cache for API responses
24
+ this.setupInterceptors();
25
+ }
26
+ setupInterceptors() {
27
+ // Request interceptor to add authentication
28
+ this.client.interceptors.request.use((config) => {
29
+ const env = this.config.environment;
30
+ const secretKey = this.config.apiKeys[env]?.secret;
31
+ if (!secretKey) {
32
+ throw new Error('Secret API key not found');
33
+ }
34
+ config.auth = {
35
+ username: secretKey,
36
+ password: '', // PayMongo uses username-only auth
37
+ };
38
+ return config;
39
+ });
40
+ // Response interceptor for error handling
41
+ this.client.interceptors.response.use((response) => response, async (error) => {
42
+ if (axios_1.default.isAxiosError(error)) {
43
+ const status = error.response?.status;
44
+ if (!error.response) {
45
+ throw new errors_1.NetworkError(`Network error - no response received: ${error.message}`, error);
46
+ }
47
+ if (status === 401) {
48
+ throw new Error('Invalid API key or unauthorized');
49
+ }
50
+ throw new Error(error.message);
51
+ }
52
+ throw new Error('Unknown network error');
53
+ });
54
+ }
55
+ async validateApiKey() {
56
+ try {
57
+ await (0, errors_1.withRetry)(() => this.client.get('/webhooks'));
58
+ return true;
59
+ }
60
+ catch (error) {
61
+ return false;
62
+ }
63
+ }
64
+ // Webhook methods
65
+ async createWebhook(url, events) {
66
+ const result = await (0, errors_1.withRetry)(() => this.client
67
+ .post('/webhooks', {
68
+ data: {
69
+ attributes: {
70
+ url,
71
+ events,
72
+ },
73
+ },
74
+ })
75
+ .then((response) => response.data.data));
76
+ // Invalidate webhook list cache when creating new webhook
77
+ await this.cache.invalidate(`webhooks_${this.config.environment}`);
78
+ return result;
79
+ }
80
+ async listWebhooks() {
81
+ const cacheKey = `webhooks_${this.config.environment}`;
82
+ // Try cache first for list operations
83
+ const cached = await this.cache.get(cacheKey);
84
+ if (cached) {
85
+ return cached;
86
+ }
87
+ const result = await (0, errors_1.withRetry)(() => this.client.get('/webhooks').then((response) => response.data.data));
88
+ // Cache the result
89
+ await this.cache.set(cacheKey, result);
90
+ return result;
91
+ }
92
+ async getWebhook(id) {
93
+ const cacheKey = `webhook_${id}`;
94
+ // Try cache first
95
+ const cached = await this.cache.get(cacheKey);
96
+ if (cached) {
97
+ return cached;
98
+ }
99
+ const result = await (0, errors_1.withRetry)(() => this.client.get(`/webhooks/${id}`).then((response) => response.data.data));
100
+ // Cache the result
101
+ await this.cache.set(cacheKey, result);
102
+ return result;
103
+ }
104
+ async updateWebhook(id, updates) {
105
+ // Invalidate cache when updating
106
+ await this.cache.invalidate(`webhook_${id}`);
107
+ await this.cache.invalidate(`webhooks_${this.config.environment}`);
108
+ return (0, errors_1.withRetry)(() => this.client
109
+ .put(`/webhooks/${id}`, {
110
+ data: {
111
+ attributes: updates,
112
+ },
113
+ })
114
+ .then((response) => response.data.data));
115
+ }
116
+ async deleteWebhook(id) {
117
+ // Invalidate cache when deleting
118
+ await this.cache.invalidate(`webhook_${id}`);
119
+ await this.cache.invalidate(`webhooks_${this.config.environment}`);
120
+ return (0, errors_1.withRetry)(() => this.client.delete(`/webhooks/${id}`));
121
+ }
122
+ // Payment methods (for validation and testing)
123
+ async getPayment(id) {
124
+ return (0, errors_1.withRetry)(() => this.client.get(`/payments/${id}`).then((response) => response.data.data));
125
+ }
126
+ async listPayments(limit = 10) {
127
+ const result = await (0, errors_1.withRetry)(() => this.client
128
+ .get('/payments', {
129
+ params: { limit },
130
+ })
131
+ .then((response) => response.data.data));
132
+ return result;
133
+ }
134
+ async createPaymentIntent(amount, currency = 'PHP', description, paymentMethods = ['card', 'gcash', 'paymaya']) {
135
+ return (0, errors_1.withRetry)(() => this.client
136
+ .post('/payment_intents', {
137
+ data: {
138
+ attributes: {
139
+ amount,
140
+ payment_method_allowed: paymentMethods,
141
+ currency,
142
+ description,
143
+ },
144
+ },
145
+ })
146
+ .then((response) => response.data.data));
147
+ }
148
+ }
149
+ exports.ApiClient = ApiClient;
150
+ exports.default = ApiClient;
151
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ConfigManagerOptions, PayMongoConfig } from '../../types/paymongo';
2
+ export declare class ConfigManager {
3
+ private explorer;
4
+ private configPath;
5
+ private configCache;
6
+ constructor(options?: ConfigManagerOptions);
7
+ load(): Promise<PayMongoConfig | null>;
8
+ save(config: PayMongoConfig): Promise<void>;
9
+ exists(): Promise<boolean>;
10
+ delete(): Promise<void>;
11
+ getDefaultConfig(): PayMongoConfig;
12
+ private validateConfig;
13
+ mergeConfig(base: PayMongoConfig, updates: Partial<PayMongoConfig>): PayMongoConfig;
14
+ }
15
+ export default ConfigManager;
16
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/services/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK5E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAqE;gBAE5E,OAAO,GAAE,oBAAyB;IAIxC,IAAI,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAoDtC,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAS1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,gBAAgB,IAAI,cAAc;IAmBlC,OAAO,CAAC,cAAc;IA8CtB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc;CAsBpF;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,211 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ConfigManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const cosmiconfig_1 = require("cosmiconfig");
40
+ const errors_1 = require("../../utils/errors");
41
+ const CONFIG_FILE_NAME = '.paymongo';
42
+ class ConfigManager {
43
+ constructor(options = {}) {
44
+ this.explorer = (0, cosmiconfig_1.cosmiconfig)('paymongo');
45
+ this.configCache = new Map();
46
+ this.configPath = options.configPath || path.join(process.cwd(), CONFIG_FILE_NAME);
47
+ }
48
+ async load() {
49
+ try {
50
+ // Check if we have a cached version
51
+ const cached = this.configCache.get(this.configPath);
52
+ if (cached) {
53
+ // Check if file has been modified since caching
54
+ try {
55
+ const stats = fs.statSync(this.configPath);
56
+ if (stats.mtime.getTime() === cached.mtime) {
57
+ return cached.config;
58
+ }
59
+ }
60
+ catch {
61
+ // File might not exist, continue with loading
62
+ }
63
+ }
64
+ const result = await this.explorer.load(this.configPath);
65
+ const config = result?.config;
66
+ if (!config) {
67
+ return null;
68
+ }
69
+ // Validate required fields
70
+ this.validateConfig(config);
71
+ // Cache the config with file modification time
72
+ try {
73
+ const stats = fs.statSync(this.configPath);
74
+ this.configCache.set(this.configPath, {
75
+ config,
76
+ mtime: stats.mtime.getTime(),
77
+ });
78
+ }
79
+ catch {
80
+ // If we can't get stats, just don't cache
81
+ }
82
+ return config;
83
+ }
84
+ catch (error) {
85
+ if (error.code === 'ENOENT') {
86
+ return null;
87
+ }
88
+ // If it's already a ConfigError or ValidationError, re-throw
89
+ if (error instanceof errors_1.ConfigError || error instanceof errors_1.ValidationError) {
90
+ throw error;
91
+ }
92
+ throw new errors_1.ConfigError(`Failed to load config: ${error.message}`, this.configPath);
93
+ }
94
+ }
95
+ async save(config) {
96
+ try {
97
+ // Ensure directory exists
98
+ const dir = path.dirname(this.configPath);
99
+ if (!fs.existsSync(dir)) {
100
+ fs.mkdirSync(dir, { recursive: true });
101
+ }
102
+ // Write config file
103
+ const configContent = JSON.stringify(config, null, 2);
104
+ fs.writeFileSync(this.configPath, configContent, 'utf-8');
105
+ // Update cache with new modification time
106
+ try {
107
+ const stats = fs.statSync(this.configPath);
108
+ this.configCache.set(this.configPath, {
109
+ config,
110
+ mtime: stats.mtime.getTime(),
111
+ });
112
+ }
113
+ catch {
114
+ // If we can't get stats, clear cache
115
+ this.configCache.delete(this.configPath);
116
+ }
117
+ }
118
+ catch (error) {
119
+ throw new errors_1.ConfigError(`Failed to save config: ${error.message}`, this.configPath);
120
+ }
121
+ }
122
+ async exists() {
123
+ try {
124
+ await fs.promises.access(this.configPath);
125
+ return true;
126
+ }
127
+ catch {
128
+ return false;
129
+ }
130
+ }
131
+ async delete() {
132
+ try {
133
+ if (await this.exists()) {
134
+ fs.unlinkSync(this.configPath);
135
+ }
136
+ }
137
+ catch (error) {
138
+ throw new errors_1.ConfigError(`Failed to delete config: ${error.message}`, this.configPath);
139
+ }
140
+ }
141
+ getDefaultConfig() {
142
+ return {
143
+ version: '1.0',
144
+ projectName: 'PayMongo Project',
145
+ environment: 'test',
146
+ apiKeys: {},
147
+ webhooks: {
148
+ url: `http://localhost:3000/webhook`,
149
+ events: ['payment.paid', 'payment.failed'],
150
+ },
151
+ webhookSecrets: {},
152
+ dev: {
153
+ port: 3000,
154
+ autoRegisterWebhook: true,
155
+ verifyWebhookSignatures: false, // Default to false for development ease
156
+ },
157
+ };
158
+ }
159
+ validateConfig(config) {
160
+ // Check required fields
161
+ if (!config.version) {
162
+ throw new errors_1.ValidationError('Config file is missing required "version" field', 'version');
163
+ }
164
+ if (!config.projectName) {
165
+ throw new errors_1.ValidationError('Config file is missing required "projectName" field', 'projectName');
166
+ }
167
+ if (!config.environment || !['test', 'live'].includes(config.environment)) {
168
+ throw new errors_1.ValidationError('Config file has invalid "environment" field (must be "test" or "live")', 'environment');
169
+ }
170
+ // Check API keys structure
171
+ if (!config.apiKeys || typeof config.apiKeys !== 'object') {
172
+ throw new errors_1.ValidationError('Config file is missing or has invalid "apiKeys" field', 'apiKeys');
173
+ }
174
+ const env = config.environment;
175
+ if (!config.apiKeys[env]) {
176
+ throw new errors_1.ValidationError(`Config file is missing API keys for environment "${env}"`, `apiKeys.${env}`);
177
+ }
178
+ if (!config.apiKeys[env].secret) {
179
+ throw new errors_1.ValidationError(`Config file is missing secret API key for environment "${env}"`, `apiKeys.${env}.secret`);
180
+ }
181
+ // Check dev configuration
182
+ if (!config.dev || typeof config.dev !== 'object') {
183
+ throw new errors_1.ValidationError('Config file is missing or has invalid "dev" field', 'dev');
184
+ }
185
+ }
186
+ mergeConfig(base, updates) {
187
+ return {
188
+ ...base,
189
+ ...updates,
190
+ apiKeys: {
191
+ ...base.apiKeys,
192
+ ...updates.apiKeys,
193
+ },
194
+ webhooks: {
195
+ ...base.webhooks,
196
+ ...updates.webhooks,
197
+ },
198
+ webhookSecrets: {
199
+ ...base.webhookSecrets,
200
+ ...updates.webhookSecrets,
201
+ },
202
+ dev: {
203
+ ...base.dev,
204
+ ...updates.dev,
205
+ },
206
+ };
207
+ }
208
+ }
209
+ exports.ConfigManager = ConfigManager;
210
+ exports.default = ConfigManager;
211
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/services/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ConfigManager } from '../config/manager';
2
+ import { GitHubClient } from './client';
3
+ export interface GitHubAuthOptions {
4
+ config: ConfigManager;
5
+ }
6
+ export declare class GitHubAuthService {
7
+ private config;
8
+ constructor(options: GitHubAuthOptions);
9
+ authenticate(token?: string): Promise<GitHubClient>;
10
+ storeToken(token: string): Promise<void>;
11
+ getStoredToken(): Promise<string | undefined>;
12
+ promptForToken(): Promise<string>;
13
+ setupToken(): Promise<string>;
14
+ }
15
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/services/github/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,iBAAiB;IAIhC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA+BnD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxC,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAK7C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAqBjC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;CAoBpC"}
@@ -0,0 +1,119 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GitHubAuthService = void 0;
37
+ const client_1 = require("./client");
38
+ class GitHubAuthService {
39
+ constructor(options) {
40
+ this.config = options.config;
41
+ }
42
+ async authenticate(token) {
43
+ let githubToken = token;
44
+ if (!githubToken) {
45
+ // Try to get from config
46
+ const config = await this.config.load();
47
+ githubToken = config?.team?.githubToken;
48
+ }
49
+ if (!githubToken) {
50
+ throw new Error('GitHub token not found. Please provide a token or run "paymongo team sync --repo owner/repo" to set it up.');
51
+ }
52
+ const client = new client_1.GitHubClient({ token: githubToken });
53
+ // Validate token by making a test request
54
+ try {
55
+ await client.getRepo('octocat', 'Hello-World'); // Public repo test
56
+ }
57
+ catch (error) {
58
+ if (error instanceof Error && error.message.includes('401')) {
59
+ throw new Error('Invalid GitHub token. Please check your token and try again.');
60
+ }
61
+ // If it's another error (like network), we can proceed
62
+ // The token might still be valid for private repos
63
+ }
64
+ return client;
65
+ }
66
+ async storeToken(token) {
67
+ let config = await this.config.load();
68
+ if (!config) {
69
+ config = this.config.getDefaultConfig();
70
+ }
71
+ if (!config.team) {
72
+ config.team = {};
73
+ }
74
+ config.team.githubToken = token;
75
+ await this.config.save(config);
76
+ }
77
+ async getStoredToken() {
78
+ const config = await this.config.load();
79
+ return config?.team?.githubToken;
80
+ }
81
+ async promptForToken() {
82
+ const inquirer = await Promise.resolve().then(() => __importStar(require('inquirer')));
83
+ const answers = await inquirer.default.prompt([
84
+ {
85
+ type: 'password',
86
+ name: 'token',
87
+ message: 'Enter your GitHub Personal Access Token:',
88
+ mask: '*',
89
+ validate: (input) => {
90
+ if (!input || input.length < 20) {
91
+ return 'Please enter a valid GitHub token (at least 20 characters)';
92
+ }
93
+ return true;
94
+ },
95
+ },
96
+ ]);
97
+ return answers.token;
98
+ }
99
+ async setupToken() {
100
+ console.log('🔑 GitHub Authentication Setup');
101
+ console.log('=============================');
102
+ console.log('');
103
+ console.log('To use team features, you need a GitHub Personal Access Token.');
104
+ console.log('You can create one at: https://github.com/settings/tokens');
105
+ console.log('');
106
+ console.log('Required permissions:');
107
+ console.log('• repo (Full control of private repositories)');
108
+ console.log('• workflow (Update GitHub Action workflows)');
109
+ console.log('');
110
+ console.log('The token will be stored securely in your local configuration.');
111
+ console.log('');
112
+ const token = await this.promptForToken();
113
+ await this.storeToken(token);
114
+ console.log('✅ GitHub token stored successfully!');
115
+ return token;
116
+ }
117
+ }
118
+ exports.GitHubAuthService = GitHubAuthService;
119
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/services/github/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export interface GitHubClientOptions {
2
+ token?: string;
3
+ timeout?: number;
4
+ }
5
+ export interface GitHubRepo {
6
+ name: string;
7
+ full_name: string;
8
+ owner: {
9
+ login: string;
10
+ id: number;
11
+ };
12
+ private: boolean;
13
+ html_url: string;
14
+ description?: string;
15
+ }
16
+ export interface GitHubFileContent {
17
+ name: string;
18
+ path: string;
19
+ sha: string;
20
+ size: number;
21
+ url: string;
22
+ html_url: string;
23
+ git_url: string;
24
+ download_url: string;
25
+ type: 'file' | 'dir';
26
+ content?: string;
27
+ encoding?: string;
28
+ }
29
+ export interface GitHubCommit {
30
+ sha: string;
31
+ commit: {
32
+ message: string;
33
+ author: {
34
+ name: string;
35
+ email: string;
36
+ date: string;
37
+ };
38
+ };
39
+ html_url: string;
40
+ }
41
+ export declare class GitHubClient {
42
+ private client;
43
+ private token;
44
+ constructor(options?: GitHubClientOptions);
45
+ private setupInterceptors;
46
+ getRepo(owner: string, repo: string): Promise<GitHubRepo>;
47
+ getFile(owner: string, repo: string, path: string, ref?: string): Promise<GitHubFileContent>;
48
+ createOrUpdateFile(owner: string, repo: string, path: string, content: string, message: string, branch?: string, sha?: string): Promise<any>;
49
+ getCommits(owner: string, repo: string, path?: string, since?: string): Promise<GitHubCommit[]>;
50
+ createRepo(name: string, description?: string, isPrivate?: boolean): Promise<GitHubRepo>;
51
+ setToken(token: string): void;
52
+ hasToken(): boolean;
53
+ }
54
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/github/client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAqB;gBAEtB,OAAO,GAAE,mBAAwB;IAqB7C,OAAO,CAAC,iBAAiB;IA4BnB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQzD,OAAO,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC;IASvB,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAe,EACvB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,GAAG,CAAC;IAkBT,UAAU,CACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,EAAE,CAAC;IAYpB,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,UAAU,CAAC;IAetB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,QAAQ,IAAI,OAAO;CAGpB"}