paymongo-cli 1.4.1 → 1.4.3

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 (140) hide show
  1. package/.github/copilot-instructions.md +95 -95
  2. package/.github/workflows/ci-cd.yml +2 -46
  3. package/.github/workflows/ci.yml +1 -1
  4. package/.github/workflows/release.yml +1 -1
  5. package/AGENTS.md +0 -1
  6. package/CHANGELOG.md +53 -2
  7. package/LICENSE +20 -20
  8. package/README.md +1 -1
  9. package/TESTING.md +1 -14
  10. package/dist/.tsbuildinfo +1 -1
  11. package/dist/commands/env.js +27 -3
  12. package/dist/commands/generate.js +977 -977
  13. package/dist/commands/init.js +27 -5
  14. package/dist/commands/login.js +27 -5
  15. package/dist/services/api/client.js +265 -15
  16. package/dist/services/api/undici-client.js +15 -21
  17. package/eslint.config.ts +70 -70
  18. package/package.json +8 -7
  19. package/coverage/base.css +0 -224
  20. package/coverage/block-navigation.js +0 -87
  21. package/coverage/favicon.png +0 -0
  22. package/coverage/index.html +0 -281
  23. package/coverage/lcov-report/base.css +0 -224
  24. package/coverage/lcov-report/block-navigation.js +0 -87
  25. package/coverage/lcov-report/favicon.png +0 -0
  26. package/coverage/lcov-report/index.html +0 -281
  27. package/coverage/lcov-report/prettify.css +0 -1
  28. package/coverage/lcov-report/prettify.js +0 -2
  29. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  30. package/coverage/lcov-report/sorter.js +0 -210
  31. package/coverage/lcov.info +0 -5053
  32. package/coverage/prettify.css +0 -1
  33. package/coverage/prettify.js +0 -2
  34. package/coverage/sort-arrow-sprite.png +0 -0
  35. package/coverage/sorter.js +0 -210
  36. package/dist/commands/config.d.ts +0 -21
  37. package/dist/commands/config.d.ts.map +0 -1
  38. package/dist/commands/config.js.map +0 -1
  39. package/dist/commands/dev.d.ts +0 -16
  40. package/dist/commands/dev.d.ts.map +0 -1
  41. package/dist/commands/dev.js.map +0 -1
  42. package/dist/commands/env.d.ts +0 -4
  43. package/dist/commands/env.d.ts.map +0 -1
  44. package/dist/commands/env.js.map +0 -1
  45. package/dist/commands/gui.d.ts +0 -4
  46. package/dist/commands/gui.d.ts.map +0 -1
  47. package/dist/commands/gui.js +0 -69
  48. package/dist/commands/gui.js.map +0 -1
  49. package/dist/commands/init.d.ts +0 -15
  50. package/dist/commands/init.d.ts.map +0 -1
  51. package/dist/commands/init.js.map +0 -1
  52. package/dist/commands/login.d.ts +0 -20
  53. package/dist/commands/login.d.ts.map +0 -1
  54. package/dist/commands/login.js.map +0 -1
  55. package/dist/commands/payments.d.ts +0 -41
  56. package/dist/commands/payments.d.ts.map +0 -1
  57. package/dist/commands/payments.js.map +0 -1
  58. package/dist/commands/team/index.d.ts +0 -4
  59. package/dist/commands/team/index.d.ts.map +0 -1
  60. package/dist/commands/team/index.js.map +0 -1
  61. package/dist/commands/trigger.d.ts +0 -4
  62. package/dist/commands/trigger.d.ts.map +0 -1
  63. package/dist/commands/trigger.js.map +0 -1
  64. package/dist/commands/webhooks.d.ts +0 -23
  65. package/dist/commands/webhooks.d.ts.map +0 -1
  66. package/dist/commands/webhooks.js.map +0 -1
  67. package/dist/index.d.ts +0 -3
  68. package/dist/index.d.ts.map +0 -1
  69. package/dist/index.js.map +0 -1
  70. package/dist/services/analytics/service.d.ts +0 -35
  71. package/dist/services/analytics/service.d.ts.map +0 -1
  72. package/dist/services/analytics/service.js.map +0 -1
  73. package/dist/services/api/client.d.ts +0 -26
  74. package/dist/services/api/client.d.ts.map +0 -1
  75. package/dist/services/api/client.js.map +0 -1
  76. package/dist/services/api/rate-limiter.d.ts +0 -64
  77. package/dist/services/api/rate-limiter.d.ts.map +0 -1
  78. package/dist/services/api/rate-limiter.js.map +0 -1
  79. package/dist/services/api/undici-client.d.ts +0 -39
  80. package/dist/services/api/undici-client.d.ts.map +0 -1
  81. package/dist/services/api/undici-client.js.map +0 -1
  82. package/dist/services/config/manager.d.ts +0 -16
  83. package/dist/services/config/manager.d.ts.map +0 -1
  84. package/dist/services/config/manager.js.map +0 -1
  85. package/dist/services/dev/process-manager.d.ts +0 -50
  86. package/dist/services/dev/process-manager.d.ts.map +0 -1
  87. package/dist/services/dev/process-manager.js.map +0 -1
  88. package/dist/services/github/auth.d.ts +0 -15
  89. package/dist/services/github/auth.d.ts.map +0 -1
  90. package/dist/services/github/auth.js +0 -79
  91. package/dist/services/github/auth.js.map +0 -1
  92. package/dist/services/github/client.d.ts +0 -95
  93. package/dist/services/github/client.d.ts.map +0 -1
  94. package/dist/services/github/client.js +0 -130
  95. package/dist/services/github/client.js.map +0 -1
  96. package/dist/services/github/sync.d.ts +0 -26
  97. package/dist/services/github/sync.d.ts.map +0 -1
  98. package/dist/services/github/sync.js +0 -203
  99. package/dist/services/github/sync.js.map +0 -1
  100. package/dist/services/payments/simulator.d.ts +0 -28
  101. package/dist/services/payments/simulator.d.ts.map +0 -1
  102. package/dist/services/payments/simulator.js.map +0 -1
  103. package/dist/services/team/service.d.ts +0 -44
  104. package/dist/services/team/service.d.ts.map +0 -1
  105. package/dist/services/team/service.js.map +0 -1
  106. package/dist/services/web/server.d.ts +0 -31
  107. package/dist/services/web/server.d.ts.map +0 -1
  108. package/dist/services/web/server.js +0 -206
  109. package/dist/services/web/server.js.map +0 -1
  110. package/dist/types/paymongo.d.ts +0 -204
  111. package/dist/types/paymongo.d.ts.map +0 -1
  112. package/dist/types/paymongo.js.map +0 -1
  113. package/dist/types/schemas.d.ts +0 -80
  114. package/dist/types/schemas.d.ts.map +0 -1
  115. package/dist/types/schemas.js.map +0 -1
  116. package/dist/utils/bulk.d.ts +0 -62
  117. package/dist/utils/bulk.d.ts.map +0 -1
  118. package/dist/utils/bulk.js.map +0 -1
  119. package/dist/utils/cache.d.ts +0 -22
  120. package/dist/utils/cache.d.ts.map +0 -1
  121. package/dist/utils/cache.js.map +0 -1
  122. package/dist/utils/constants.d.ts +0 -32
  123. package/dist/utils/constants.d.ts.map +0 -1
  124. package/dist/utils/constants.js.map +0 -1
  125. package/dist/utils/errors.d.ts +0 -34
  126. package/dist/utils/errors.d.ts.map +0 -1
  127. package/dist/utils/errors.js.map +0 -1
  128. package/dist/utils/logger.d.ts +0 -20
  129. package/dist/utils/logger.d.ts.map +0 -1
  130. package/dist/utils/logger.js.map +0 -1
  131. package/dist/utils/spinner.d.ts +0 -17
  132. package/dist/utils/spinner.d.ts.map +0 -1
  133. package/dist/utils/spinner.js.map +0 -1
  134. package/dist/utils/validator.d.ts +0 -10
  135. package/dist/utils/validator.d.ts.map +0 -1
  136. package/dist/utils/validator.js.map +0 -1
  137. package/dist/utils/webhook-store.d.ts +0 -22
  138. package/dist/utils/webhook-store.d.ts.map +0 -1
  139. package/dist/utils/webhook-store.js.map +0 -1
  140. package/jest.config.ts +0 -30
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/services/config/manager.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- export interface DevProcessState {
2
- pid: number;
3
- port: number;
4
- tunnelUrl: string;
5
- webhookId: string | undefined;
6
- webhookUrl: string;
7
- localUrl: string;
8
- events: string[];
9
- startedAt: number;
10
- projectName: string;
11
- }
12
- export declare class DevProcessManager {
13
- /**
14
- * Save the current dev server state
15
- */
16
- static saveState(state: DevProcessState): void;
17
- /**
18
- * Load the saved dev server state
19
- */
20
- static loadState(): DevProcessState | null;
21
- /**
22
- * Clear the saved state
23
- */
24
- static clearState(): void;
25
- /**
26
- * Check if a process with the given PID is running
27
- */
28
- static isProcessRunning(pid: number): boolean;
29
- /**
30
- * Kill a process by PID
31
- */
32
- static killProcess(pid: number): boolean;
33
- /**
34
- * Get the log file path
35
- */
36
- static getLogFile(): string;
37
- /**
38
- * Read recent logs
39
- */
40
- static readLogs(lines?: number): string[];
41
- /**
42
- * Clear log file
43
- */
44
- static clearLogs(): void;
45
- /**
46
- * Get formatted uptime string
47
- */
48
- static formatUptime(startedAt: number): string;
49
- }
50
- //# sourceMappingURL=process-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../../src/services/dev/process-manager.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAO9C;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,eAAe,GAAG,IAAI;IAY1C;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAUzB;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU7C;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAcxC;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAO3B;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,EAAE;IAa7C;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;IAUxB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAe/C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../../src/services/dev/process-manager.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { ConfigManager } from '../config/manager.js';
2
- import { GitHubClient } from './client.js';
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/services/github/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,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;IAiBjC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;CAoBpC"}
@@ -1,79 +0,0 @@
1
- import { GitHubClient } from './client.js';
2
- export class GitHubAuthService {
3
- config;
4
- constructor(options) {
5
- this.config = options.config;
6
- }
7
- async authenticate(token) {
8
- let githubToken = token;
9
- if (!githubToken) {
10
- // Try to get from config
11
- const config = await this.config.load();
12
- githubToken = config?.team?.githubToken;
13
- }
14
- if (!githubToken) {
15
- throw new Error('GitHub token not found. Please provide a token or run "paymongo team sync --repo owner/repo" to set it up.');
16
- }
17
- const client = new GitHubClient({ token: githubToken });
18
- // Validate token by making a test request
19
- try {
20
- await client.getRepo('octocat', 'Hello-World'); // Public repo test
21
- }
22
- catch (error) {
23
- if (error instanceof Error && error.message.includes('401')) {
24
- throw new Error('Invalid GitHub token. Please check your token and try again.');
25
- }
26
- // If it's another error (like network), we can proceed
27
- // The token might still be valid for private repos
28
- }
29
- return client;
30
- }
31
- async storeToken(token) {
32
- let config = await this.config.load();
33
- if (!config) {
34
- config = this.config.getDefaultConfig();
35
- }
36
- if (!config.team) {
37
- config.team = {};
38
- }
39
- config.team.githubToken = token;
40
- await this.config.save(config);
41
- }
42
- async getStoredToken() {
43
- const config = await this.config.load();
44
- return config?.team?.githubToken;
45
- }
46
- async promptForToken() {
47
- const { password } = await import('@inquirer/prompts');
48
- const token = await password({
49
- message: 'Enter your GitHub Personal Access Token:',
50
- mask: '*',
51
- validate: (input) => {
52
- if (!input || input.length < 20) {
53
- return 'Please enter a valid GitHub token (at least 20 characters)';
54
- }
55
- return true;
56
- },
57
- });
58
- return token;
59
- }
60
- async setupToken() {
61
- console.log('🔑 GitHub Authentication Setup');
62
- console.log('=============================');
63
- console.log('');
64
- console.log('To use team features, you need a GitHub Personal Access Token.');
65
- console.log('You can create one at: https://github.com/settings/tokens');
66
- console.log('');
67
- console.log('Required permissions:');
68
- console.log('• repo (Full control of private repositories)');
69
- console.log('• workflow (Update GitHub Action workflows)');
70
- console.log('');
71
- console.log('The token will be stored securely in your local configuration.');
72
- console.log('');
73
- const token = await this.promptForToken();
74
- await this.storeToken(token);
75
- console.log('✅ GitHub token stored successfully!');
76
- return token;
77
- }
78
- }
79
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/services/github/auth.ts"],"names":[],"mappings":"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"}
@@ -1,95 +0,0 @@
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 interface GitHubCollaborator {
42
- login: string;
43
- id: number;
44
- avatar_url: string;
45
- html_url: string;
46
- type: 'User' | 'Organization';
47
- permissions?: {
48
- admin: boolean;
49
- maintain?: boolean;
50
- push: boolean;
51
- triage?: boolean;
52
- pull: boolean;
53
- };
54
- role_name: 'admin' | 'maintain' | 'write' | 'triage' | 'read';
55
- }
56
- export interface GitHubInvitation {
57
- id: number;
58
- repository: GitHubRepo;
59
- invitee: {
60
- login: string;
61
- id: number;
62
- avatar_url: string;
63
- type: 'User' | 'Organization';
64
- } | null;
65
- inviter: {
66
- login: string;
67
- id: number;
68
- avatar_url: string;
69
- type: 'User' | 'Organization';
70
- };
71
- permissions: 'admin' | 'maintain' | 'write' | 'triage' | 'read';
72
- created_at: string;
73
- expired?: boolean;
74
- url: string;
75
- html_url: string;
76
- }
77
- export declare class GitHubClient {
78
- private client;
79
- private token;
80
- constructor(options?: GitHubClientOptions);
81
- private setupInterceptors;
82
- getRepo(owner: string, repo: string): Promise<GitHubRepo>;
83
- getFile(owner: string, repo: string, path: string, ref?: string): Promise<GitHubFileContent>;
84
- createOrUpdateFile(owner: string, repo: string, path: string, content: string, message: string, branch?: string, sha?: string): Promise<GitHubFileContent>;
85
- getCommits(owner: string, repo: string, path?: string, since?: string): Promise<GitHubCommit[]>;
86
- createRepo(name: string, description?: string, isPrivate?: boolean): Promise<GitHubRepo>;
87
- listCollaborators(owner: string, repo: string): Promise<GitHubCollaborator[]>;
88
- inviteCollaborator(owner: string, repo: string, username: string, permission?: 'admin' | 'maintain' | 'write' | 'triage' | 'read'): Promise<GitHubInvitation>;
89
- listInvitations(owner: string, repo: string): Promise<GitHubInvitation[]>;
90
- deleteInvitation(owner: string, repo: string, invitationId: number): Promise<void>;
91
- removeCollaborator(owner: string, repo: string, username: string): Promise<void>;
92
- setToken(token: string): void;
93
- hasToken(): boolean;
94
- }
95
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/github/client.ts"],"names":[],"mappings":"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"}
@@ -1,130 +0,0 @@
1
- import axios from 'axios';
2
- import { NetworkError, withRetry } from '../../utils/errors.js';
3
- export class GitHubClient {
4
- client;
5
- token;
6
- constructor(options = {}) {
7
- this.token = options.token;
8
- const timeout = options.timeout || 30000;
9
- this.client = axios.create({
10
- baseURL: 'https://api.github.com',
11
- timeout,
12
- headers: {
13
- Accept: 'application/vnd.github.v3+json',
14
- 'User-Agent': 'paymongo-cli/1.0.0',
15
- },
16
- });
17
- if (this.token) {
18
- const authToken = this.token;
19
- this.client.defaults.headers.common['Authorization'] = `token ${authToken}`;
20
- }
21
- this.setupInterceptors();
22
- }
23
- setupInterceptors() {
24
- // Request interceptor for debugging
25
- this.client.interceptors.request.use((config) => {
26
- if (!this.token && config.url?.includes('/repos/')) {
27
- // For public repo access, we can proceed without token
28
- // But for private repos or write operations, token is required
29
- }
30
- return config;
31
- });
32
- // Response interceptor for error handling
33
- this.client.interceptors.response.use((response) => response, (error) => {
34
- if (error.response?.status === 401) {
35
- throw new Error('GitHub authentication failed. Please check your token.');
36
- }
37
- if (error.response?.status === 403) {
38
- throw new Error('GitHub API rate limit exceeded or insufficient permissions.');
39
- }
40
- if (error.response?.status === 404) {
41
- throw new Error('GitHub repository or file not found.');
42
- }
43
- throw new NetworkError(`GitHub API error: ${error.message}`);
44
- });
45
- }
46
- async getRepo(owner, repo) {
47
- const response = await withRetry(() => this.client.get(`/repos/${owner}/${repo}`), {
48
- maxRetries: 3,
49
- delayMs: 1000,
50
- });
51
- return response.data;
52
- }
53
- async getFile(owner, repo, path, ref) {
54
- const params = ref ? { ref } : {};
55
- const response = await withRetry(() => this.client.get(`/repos/${owner}/${repo}/contents/${path}`, { params }), { maxRetries: 3, delayMs: 1000 });
56
- return response.data;
57
- }
58
- async createOrUpdateFile(owner, repo, path, content, message, branch = 'main', sha) {
59
- const data = {
60
- message,
61
- content: Buffer.from(content).toString('base64'),
62
- branch,
63
- };
64
- if (sha) {
65
- data.sha = sha;
66
- }
67
- const response = await withRetry(() => this.client.put(`/repos/${owner}/${repo}/contents/${path}`, data), { maxRetries: 3, delayMs: 1000 });
68
- return response.data;
69
- }
70
- async getCommits(owner, repo, path, since) {
71
- const params = { per_page: 10 };
72
- if (path) {
73
- params.path = path;
74
- }
75
- if (since) {
76
- params.since = since;
77
- }
78
- const response = await withRetry(() => this.client.get(`/repos/${owner}/${repo}/commits`, { params }), { maxRetries: 3, delayMs: 1000 });
79
- return response.data;
80
- }
81
- async createRepo(name, description, isPrivate = false) {
82
- const data = {
83
- name,
84
- description: description || 'PayMongo CLI team configuration',
85
- private: isPrivate,
86
- auto_init: true,
87
- };
88
- const response = await withRetry(() => this.client.post('/user/repos', data), {
89
- maxRetries: 3,
90
- delayMs: 1000,
91
- });
92
- return response.data;
93
- }
94
- async listCollaborators(owner, repo) {
95
- const response = await withRetry(() => this.client.get(`/repos/${owner}/${repo}/collaborators`), { maxRetries: 3, delayMs: 1000 });
96
- return response.data;
97
- }
98
- async inviteCollaborator(owner, repo, username, permission = 'write') {
99
- const data = {
100
- permission,
101
- invitee_id: username, // GitHub expects username or user ID
102
- };
103
- const response = await withRetry(() => this.client.put(`/repos/${owner}/${repo}/collaborators/${username}`, data), { maxRetries: 3, delayMs: 1000 });
104
- return response.data;
105
- }
106
- async listInvitations(owner, repo) {
107
- const response = await withRetry(() => this.client.get(`/repos/${owner}/${repo}/invitations`), {
108
- maxRetries: 3,
109
- delayMs: 1000,
110
- });
111
- return response.data;
112
- }
113
- async deleteInvitation(owner, repo, invitationId) {
114
- await withRetry(() => this.client.delete(`/repos/${owner}/${repo}/invitations/${invitationId}`), { maxRetries: 3, delayMs: 1000 });
115
- }
116
- async removeCollaborator(owner, repo, username) {
117
- await withRetry(() => this.client.delete(`/repos/${owner}/${repo}/collaborators/${username}`), {
118
- maxRetries: 3,
119
- delayMs: 1000,
120
- });
121
- }
122
- setToken(token) {
123
- this.token = token;
124
- this.client.defaults.headers.common['Authorization'] = `token ${token}`;
125
- }
126
- hasToken() {
127
- return !!this.token;
128
- }
129
- }
130
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/github/client.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { ConfigManager } from '../config/manager.js';
2
- import { GitHubAuthService } from './auth.js';
3
- export interface TeamSyncOptions {
4
- config: ConfigManager;
5
- auth: GitHubAuthService;
6
- }
7
- export interface SyncOptions {
8
- repo: string;
9
- branch?: string;
10
- force?: boolean;
11
- direction?: 'push' | 'pull' | 'sync';
12
- }
13
- export declare class TeamSyncService {
14
- private config;
15
- private auth;
16
- constructor(options: TeamSyncOptions);
17
- sync(options: SyncOptions): Promise<void>;
18
- private pushConfig;
19
- private pullConfig;
20
- private sanitizeConfig;
21
- private validateRemoteConfig;
22
- private checkConfigConflicts;
23
- private mergeConfigs;
24
- private updateTeamConfig;
25
- }
26
- //# sourceMappingURL=sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/services/github/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACtC;AAOD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,IAAI,CAAoB;gBAEpB,OAAO,EAAE,eAAe;IAK9B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YA+CjC,UAAU;YAoDV,UAAU;IAgExB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,oBAAoB;IAuC5B,OAAO,CAAC,YAAY;YAsBN,gBAAgB;CAe/B"}
@@ -1,203 +0,0 @@
1
- export class TeamSyncService {
2
- config;
3
- auth;
4
- constructor(options) {
5
- this.config = options.config;
6
- this.auth = options.auth;
7
- }
8
- async sync(options) {
9
- const { repo, branch = 'main', force = false, direction = 'sync' } = options;
10
- // Parse repo string (owner/repo)
11
- const [owner, repoName] = repo.split('/');
12
- if (!owner || !repoName) {
13
- throw new Error('Invalid repository format. Use "owner/repo" format.');
14
- }
15
- // Get authenticated GitHub client
16
- const client = await this.auth.authenticate();
17
- // Ensure repo exists
18
- let githubRepo;
19
- try {
20
- githubRepo = await client.getRepo(owner, repoName);
21
- }
22
- catch (error) {
23
- if (error instanceof Error && error.message.includes('404')) {
24
- throw new Error(`Repository "${repo}" not found. Please create it first or check permissions.`);
25
- }
26
- throw error;
27
- }
28
- // Check if repo is accessible
29
- if (githubRepo.private && !client.hasToken()) {
30
- throw new Error(`Repository "${repo}" is private. Please provide a GitHub token with repo permissions.`);
31
- }
32
- const configPath = '.paymongo';
33
- const remotePath = 'paymongo-config.json';
34
- if (direction === 'push' || direction === 'sync') {
35
- await this.pushConfig(client, owner, repoName, branch, configPath, remotePath, force);
36
- }
37
- if (direction === 'pull' || direction === 'sync') {
38
- await this.pullConfig(client, owner, repoName, branch, configPath, remotePath, force);
39
- }
40
- // Update local team config
41
- await this.updateTeamConfig(repo, branch);
42
- }
43
- async pushConfig(client, owner, repo, branch, _localPath, remotePath, force) {
44
- const localConfig = await this.config.load();
45
- if (!localConfig) {
46
- throw new Error('No local configuration found. Run "paymongo init" first.');
47
- }
48
- // Create sanitized config for sharing (remove sensitive data)
49
- const shareableConfig = this.sanitizeConfig(localConfig);
50
- let sha;
51
- // Check if remote file exists
52
- try {
53
- const remoteFile = await client.getFile(owner, repo, remotePath, branch);
54
- sha = remoteFile.sha;
55
- if (!force) {
56
- // Check if remote exists
57
- const remoteCommits = await client.getCommits(owner, repo, remotePath);
58
- if (remoteCommits.length > 0) {
59
- // For now, just warn about potential conflicts
60
- console.log(`⚠️ Remote config exists. Use --force to overwrite.`);
61
- return;
62
- }
63
- }
64
- }
65
- catch (error) {
66
- // File doesn't exist, that's fine for push
67
- if (!(error instanceof Error && error.message.includes('404'))) {
68
- throw error;
69
- }
70
- }
71
- // Push config to GitHub
72
- await client.createOrUpdateFile(owner, repo, remotePath, JSON.stringify(shareableConfig, null, 2), 'Update PayMongo CLI configuration', branch, sha);
73
- }
74
- async pullConfig(client, owner, repo, branch, _localPath, remotePath, force) {
75
- let remoteFile;
76
- try {
77
- remoteFile = await client.getFile(owner, repo, remotePath, branch);
78
- }
79
- catch (error) {
80
- if (error instanceof Error && error.message.includes('404')) {
81
- console.log(`ℹ️ No remote configuration found in ${repo}. Skipping pull.`);
82
- return;
83
- }
84
- throw error;
85
- }
86
- if (!remoteFile.content) {
87
- throw new Error('Remote configuration file is empty.');
88
- }
89
- // Decode base64 content
90
- const remoteConfigContent = Buffer.from(remoteFile.content, 'base64').toString('utf-8');
91
- let remoteConfig;
92
- try {
93
- remoteConfig = JSON.parse(remoteConfigContent);
94
- }
95
- catch (_error) {
96
- throw new Error('Invalid JSON in remote configuration file.');
97
- }
98
- // Validate remote config structure
99
- this.validateRemoteConfig(remoteConfig);
100
- // Merge with local config
101
- const localConfig = await this.config.load();
102
- if (!localConfig) {
103
- // No local config, use remote as base (convert to full config)
104
- const defaultConfig = this.config.getDefaultConfig();
105
- const fullConfig = { ...defaultConfig, ...remoteConfig };
106
- await this.config.save(fullConfig);
107
- return;
108
- }
109
- if (!force) {
110
- // Check for conflicts
111
- const conflicts = this.checkConfigConflicts(localConfig, remoteConfig);
112
- if (conflicts.length > 0) {
113
- console.log('⚠️ Configuration conflicts detected:');
114
- conflicts.forEach((conflict) => console.log(` - ${conflict}`));
115
- console.log('Use --force to overwrite local config with remote.');
116
- return;
117
- }
118
- }
119
- // Merge configurations (remote takes precedence for shared settings)
120
- const mergedConfig = this.mergeConfigs(localConfig, remoteConfig);
121
- await this.config.save(mergedConfig);
122
- }
123
- sanitizeConfig(config) {
124
- // Create a copy without sensitive data
125
- const sanitized = { ...config };
126
- // Remove webhook secrets (they should be environment-specific)
127
- if (sanitized.webhookSecrets) {
128
- sanitized.webhookSecrets = {};
129
- }
130
- // Remove GitHub token (should be set per user)
131
- if (sanitized.team?.githubToken) {
132
- const team = { ...sanitized.team };
133
- delete team.githubToken;
134
- sanitized.team = team;
135
- }
136
- return sanitized;
137
- }
138
- validateRemoteConfig(config) {
139
- if (!config || typeof config !== 'object') {
140
- throw new Error('Remote configuration is not a valid object.');
141
- }
142
- const configObj = config;
143
- if (!configObj.version) {
144
- throw new Error('Remote configuration is missing version field.');
145
- }
146
- // Add more validation as needed
147
- }
148
- checkConfigConflicts(local, remote) {
149
- const conflicts = [];
150
- // Check for API key conflicts
151
- if (local.apiKeys?.test?.public &&
152
- remote.apiKeys?.test?.public &&
153
- local.apiKeys.test.public !== remote.apiKeys.test.public) {
154
- conflicts.push('Test environment public API key');
155
- }
156
- if (local.apiKeys?.test?.secret &&
157
- remote.apiKeys?.test?.secret &&
158
- local.apiKeys.test.secret !== remote.apiKeys.test.secret) {
159
- conflicts.push('Test environment secret API key');
160
- }
161
- if (local.apiKeys?.live?.public &&
162
- remote.apiKeys?.live?.public &&
163
- local.apiKeys.live.public !== remote.apiKeys.live.public) {
164
- conflicts.push('Live environment public API key');
165
- }
166
- if (local.apiKeys?.live?.secret &&
167
- remote.apiKeys?.live?.secret &&
168
- local.apiKeys.live.secret !== remote.apiKeys.live.secret) {
169
- conflicts.push('Live environment secret API key');
170
- }
171
- return conflicts;
172
- }
173
- mergeConfigs(local, remote) {
174
- // Start with remote as base, then merge local specifics
175
- const merged = { ...local, ...remote };
176
- // Keep local API keys if they exist (user-specific)
177
- if (local.apiKeys) {
178
- merged.apiKeys = { ...merged.apiKeys, ...local.apiKeys };
179
- }
180
- // Keep local webhook secrets (environment-specific)
181
- if (local.webhookSecrets) {
182
- merged.webhookSecrets = { ...merged.webhookSecrets, ...local.webhookSecrets };
183
- }
184
- // Keep local team settings (user-specific)
185
- if (local.team) {
186
- merged.team = { ...merged.team, ...local.team };
187
- }
188
- return merged;
189
- }
190
- async updateTeamConfig(repo, branch) {
191
- let config = await this.config.load();
192
- if (!config) {
193
- config = this.config.getDefaultConfig();
194
- }
195
- if (!config.team) {
196
- config.team = {};
197
- }
198
- config.team.repo = repo;
199
- config.team.branch = branch;
200
- await this.config.save(config);
201
- }
202
- }
203
- //# sourceMappingURL=sync.js.map