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.
- package/.github/copilot-instructions.md +95 -95
- package/.github/workflows/ci-cd.yml +2 -46
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/release.yml +1 -1
- package/AGENTS.md +0 -1
- package/CHANGELOG.md +53 -2
- package/LICENSE +20 -20
- package/README.md +1 -1
- package/TESTING.md +1 -14
- package/dist/.tsbuildinfo +1 -1
- package/dist/commands/env.js +27 -3
- package/dist/commands/generate.js +977 -977
- package/dist/commands/init.js +27 -5
- package/dist/commands/login.js +27 -5
- package/dist/services/api/client.js +265 -15
- package/dist/services/api/undici-client.js +15 -21
- package/eslint.config.ts +70 -70
- package/package.json +8 -7
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -281
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -281
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov.info +0 -5053
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/dist/commands/config.d.ts +0 -21
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -16
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/env.d.ts +0 -4
- package/dist/commands/env.d.ts.map +0 -1
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/gui.d.ts +0 -4
- package/dist/commands/gui.d.ts.map +0 -1
- package/dist/commands/gui.js +0 -69
- package/dist/commands/gui.js.map +0 -1
- package/dist/commands/init.d.ts +0 -15
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/login.d.ts +0 -20
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/payments.d.ts +0 -41
- package/dist/commands/payments.d.ts.map +0 -1
- package/dist/commands/payments.js.map +0 -1
- package/dist/commands/team/index.d.ts +0 -4
- package/dist/commands/team/index.d.ts.map +0 -1
- package/dist/commands/team/index.js.map +0 -1
- package/dist/commands/trigger.d.ts +0 -4
- package/dist/commands/trigger.d.ts.map +0 -1
- package/dist/commands/trigger.js.map +0 -1
- package/dist/commands/webhooks.d.ts +0 -23
- package/dist/commands/webhooks.d.ts.map +0 -1
- package/dist/commands/webhooks.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/services/analytics/service.d.ts +0 -35
- package/dist/services/analytics/service.d.ts.map +0 -1
- package/dist/services/analytics/service.js.map +0 -1
- package/dist/services/api/client.d.ts +0 -26
- package/dist/services/api/client.d.ts.map +0 -1
- package/dist/services/api/client.js.map +0 -1
- package/dist/services/api/rate-limiter.d.ts +0 -64
- package/dist/services/api/rate-limiter.d.ts.map +0 -1
- package/dist/services/api/rate-limiter.js.map +0 -1
- package/dist/services/api/undici-client.d.ts +0 -39
- package/dist/services/api/undici-client.d.ts.map +0 -1
- package/dist/services/api/undici-client.js.map +0 -1
- package/dist/services/config/manager.d.ts +0 -16
- package/dist/services/config/manager.d.ts.map +0 -1
- package/dist/services/config/manager.js.map +0 -1
- package/dist/services/dev/process-manager.d.ts +0 -50
- package/dist/services/dev/process-manager.d.ts.map +0 -1
- package/dist/services/dev/process-manager.js.map +0 -1
- package/dist/services/github/auth.d.ts +0 -15
- package/dist/services/github/auth.d.ts.map +0 -1
- package/dist/services/github/auth.js +0 -79
- package/dist/services/github/auth.js.map +0 -1
- package/dist/services/github/client.d.ts +0 -95
- package/dist/services/github/client.d.ts.map +0 -1
- package/dist/services/github/client.js +0 -130
- package/dist/services/github/client.js.map +0 -1
- package/dist/services/github/sync.d.ts +0 -26
- package/dist/services/github/sync.d.ts.map +0 -1
- package/dist/services/github/sync.js +0 -203
- package/dist/services/github/sync.js.map +0 -1
- package/dist/services/payments/simulator.d.ts +0 -28
- package/dist/services/payments/simulator.d.ts.map +0 -1
- package/dist/services/payments/simulator.js.map +0 -1
- package/dist/services/team/service.d.ts +0 -44
- package/dist/services/team/service.d.ts.map +0 -1
- package/dist/services/team/service.js.map +0 -1
- package/dist/services/web/server.d.ts +0 -31
- package/dist/services/web/server.d.ts.map +0 -1
- package/dist/services/web/server.js +0 -206
- package/dist/services/web/server.js.map +0 -1
- package/dist/types/paymongo.d.ts +0 -204
- package/dist/types/paymongo.d.ts.map +0 -1
- package/dist/types/paymongo.js.map +0 -1
- package/dist/types/schemas.d.ts +0 -80
- package/dist/types/schemas.d.ts.map +0 -1
- package/dist/types/schemas.js.map +0 -1
- package/dist/utils/bulk.d.ts +0 -62
- package/dist/utils/bulk.d.ts.map +0 -1
- package/dist/utils/bulk.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -22
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/constants.d.ts +0 -32
- package/dist/utils/constants.d.ts.map +0 -1
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -34
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -20
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -17
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/validator.d.ts +0 -10
- package/dist/utils/validator.d.ts.map +0 -1
- package/dist/utils/validator.js.map +0 -1
- package/dist/utils/webhook-store.d.ts +0 -22
- package/dist/utils/webhook-store.d.ts.map +0 -1
- package/dist/utils/webhook-store.js.map +0 -1
- 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
|