git-slot-machine 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +49 -13
- package/dist/commands/init.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/init.ts +54 -15
- package/src/config.ts +22 -0
package/README.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# 🎰 Git Slot Machine
|
|
2
2
|
|
|
3
|
+
[](https://gitslotmachine.com)
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/git-slot-machine)
|
|
6
|
+
[](https://www.npmjs.com/package/git-slot-machine)
|
|
7
|
+
[](https://github.com/than/git-slot-machine/blob/main/LICENSE)
|
|
8
|
+
[](https://github.com/than/git-slot-machine/stargazers)
|
|
9
|
+
|
|
3
10
|
**Turn every git commit into a slot machine pull!**
|
|
4
11
|
|
|
5
12
|
A fun CLI tool that analyzes your commit hashes and rewards you based on patterns found in the first 7 hex characters. Automatically plays after each commit via a post-commit hook, syncs with a global leaderboard, and tracks your stats across all your repos.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA4CA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAmHjD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.initCommand = initCommand;
|
|
40
40
|
const fs = __importStar(require("fs"));
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
|
+
const readline = __importStar(require("readline"));
|
|
42
43
|
const chalk_1 = __importDefault(require("chalk"));
|
|
43
44
|
const git_1 = require("../utils/git");
|
|
44
45
|
const post_commit_1 = require("../templates/post-commit");
|
|
@@ -63,6 +64,18 @@ async function isRepoPublic(owner, repo) {
|
|
|
63
64
|
return null;
|
|
64
65
|
}
|
|
65
66
|
}
|
|
67
|
+
function askQuestion(question) {
|
|
68
|
+
const rl = readline.createInterface({
|
|
69
|
+
input: process.stdin,
|
|
70
|
+
output: process.stdout
|
|
71
|
+
});
|
|
72
|
+
return new Promise((resolve) => {
|
|
73
|
+
rl.question(question, (answer) => {
|
|
74
|
+
rl.close();
|
|
75
|
+
resolve(answer.trim().toLowerCase());
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
66
79
|
async function initCommand() {
|
|
67
80
|
// Check if git repo
|
|
68
81
|
if (!(0, git_1.isGitRepo)()) {
|
|
@@ -76,13 +89,11 @@ async function initCommand() {
|
|
|
76
89
|
console.log();
|
|
77
90
|
console.error(chalk_1.default.red('Error: No GitHub remote detected'));
|
|
78
91
|
console.log();
|
|
79
|
-
console.log(chalk_1.default.yellow('Git Slot Machine requires a
|
|
92
|
+
console.log(chalk_1.default.yellow('Git Slot Machine requires a GitHub repository.'));
|
|
80
93
|
console.log();
|
|
81
94
|
console.log(chalk_1.default.dim('Add a GitHub remote to this repo:'));
|
|
82
95
|
console.log(chalk_1.default.cyan(' git remote add origin https://github.com/username/repo.git'));
|
|
83
96
|
console.log();
|
|
84
|
-
console.log(chalk_1.default.dim('This prevents farming points in private/local repos.'));
|
|
85
|
-
console.log(chalk_1.default.dim('Your commits must be publicly verifiable.'));
|
|
86
97
|
process.exit(1);
|
|
87
98
|
}
|
|
88
99
|
const existingUsername = (0, config_1.getGitHubUsername)();
|
|
@@ -93,22 +104,47 @@ async function initCommand() {
|
|
|
93
104
|
// Check if repository is public
|
|
94
105
|
console.log(chalk_1.default.dim('Checking repository visibility...'));
|
|
95
106
|
const isPublic = await isRepoPublic(repoInfo.owner, repoInfo.name);
|
|
107
|
+
let usePrivacyMode = false;
|
|
96
108
|
if (isPublic === false) {
|
|
109
|
+
console.log(chalk_1.default.yellow('⚠️ Private repository detected'));
|
|
97
110
|
console.log();
|
|
98
|
-
console.
|
|
99
|
-
console.log();
|
|
100
|
-
console.log(chalk_1.default.yellow('Git Slot Machine only supports public repositories.'));
|
|
111
|
+
console.log(chalk_1.default.cyan('Privacy Mode Available'));
|
|
112
|
+
console.log(chalk_1.default.dim('You can still use Git Slot Machine with privacy mode enabled.'));
|
|
101
113
|
console.log();
|
|
102
|
-
console.log(chalk_1.default.
|
|
103
|
-
console.log(chalk_1.default.dim('
|
|
104
|
-
console.log(chalk_1.default.dim('private
|
|
114
|
+
console.log(chalk_1.default.yellow('What happens in privacy mode:'));
|
|
115
|
+
console.log(chalk_1.default.dim(' • Repository name/org are NOT stored on the server'));
|
|
116
|
+
console.log(chalk_1.default.dim(' • Sent as "private/private" to the API'));
|
|
117
|
+
console.log(chalk_1.default.dim(' • Displayed as "*******/*******" on leaderboard'));
|
|
118
|
+
console.log(chalk_1.default.dim(' • Your GitHub username is still public'));
|
|
119
|
+
console.log(chalk_1.default.dim(' • All private repos share one balance'));
|
|
105
120
|
console.log();
|
|
106
|
-
|
|
107
|
-
|
|
121
|
+
const answer = await askQuestion(chalk_1.default.green('Enable privacy mode? (y/n): '));
|
|
122
|
+
if (answer === 'y' || answer === 'yes') {
|
|
123
|
+
usePrivacyMode = true;
|
|
124
|
+
(0, config_1.setPrivateRepo)(true);
|
|
125
|
+
console.log(chalk_1.default.green('✓ Privacy mode enabled'));
|
|
126
|
+
console.log(chalk_1.default.dim('Repository details will never be sent to the server.'));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
console.log();
|
|
130
|
+
console.log(chalk_1.default.red('Cannot proceed without privacy mode for private repos.'));
|
|
131
|
+
console.log(chalk_1.default.dim('Please make the repository public or enable privacy mode.'));
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
108
134
|
}
|
|
109
|
-
if (isPublic === null) {
|
|
135
|
+
else if (isPublic === null) {
|
|
110
136
|
console.log(chalk_1.default.yellow('⚠️ Could not verify repository visibility'));
|
|
111
|
-
console.log(
|
|
137
|
+
console.log();
|
|
138
|
+
const answer = await askQuestion(chalk_1.default.green('Is this a private repository? (y/n): '));
|
|
139
|
+
if (answer === 'y' || answer === 'yes') {
|
|
140
|
+
usePrivacyMode = true;
|
|
141
|
+
(0, config_1.setPrivateRepo)(true);
|
|
142
|
+
console.log(chalk_1.default.green('✓ Privacy mode enabled'));
|
|
143
|
+
console.log(chalk_1.default.dim('Repository details will never be sent to the server.'));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.log(chalk_1.default.dim('Proceeding with public repository mode...'));
|
|
147
|
+
}
|
|
112
148
|
}
|
|
113
149
|
else {
|
|
114
150
|
console.log(chalk_1.default.green('✓ Public repository confirmed'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ interface Config {
|
|
|
3
3
|
apiUrl?: string;
|
|
4
4
|
apiToken?: string;
|
|
5
5
|
syncEnabled?: boolean;
|
|
6
|
+
privateRepo?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare function getConfig(): Config;
|
|
8
9
|
export declare function getRepoConfig(): Config;
|
|
@@ -18,6 +19,8 @@ export declare function setApiToken(token: string): void;
|
|
|
18
19
|
export declare function clearApiToken(): void;
|
|
19
20
|
export declare function isSyncEnabled(): boolean;
|
|
20
21
|
export declare function setSyncEnabled(enabled: boolean): void;
|
|
22
|
+
export declare function isPrivateRepo(): boolean;
|
|
23
|
+
export declare function setPrivateRepo(isPrivate: boolean): void;
|
|
21
24
|
export declare function getRepoInfo(): {
|
|
22
25
|
owner: string;
|
|
23
26
|
name: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,UAAU,MAAM;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqBD,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAGD,wBAAgB,aAAa,IAAI,MAAM,CAatC;AAGD,wBAAgB,eAAe,IAAI,MAAM,CAaxC;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnD;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAG3C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIrD;AAED,wBAAgB,WAAW,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,UAAU,MAAM;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqBD,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAGD,wBAAgB,aAAa,IAAI,MAAM,CAatC;AAGD,wBAAgB,eAAe,IAAI,MAAM,CAaxC;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnD;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAG3C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIrD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAIvD;AAED,wBAAgB,WAAW,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA+BjF"}
|
package/dist/config.js
CHANGED
|
@@ -17,6 +17,8 @@ exports.setApiToken = setApiToken;
|
|
|
17
17
|
exports.clearApiToken = clearApiToken;
|
|
18
18
|
exports.isSyncEnabled = isSyncEnabled;
|
|
19
19
|
exports.setSyncEnabled = setSyncEnabled;
|
|
20
|
+
exports.isPrivateRepo = isPrivateRepo;
|
|
21
|
+
exports.setPrivateRepo = setPrivateRepo;
|
|
20
22
|
exports.getRepoInfo = getRepoInfo;
|
|
21
23
|
const fs_1 = __importDefault(require("fs"));
|
|
22
24
|
const path_1 = __importDefault(require("path"));
|
|
@@ -121,6 +123,15 @@ function setSyncEnabled(enabled) {
|
|
|
121
123
|
config.syncEnabled = enabled;
|
|
122
124
|
saveGlobalConfig(config);
|
|
123
125
|
}
|
|
126
|
+
function isPrivateRepo() {
|
|
127
|
+
const config = getRepoConfig();
|
|
128
|
+
return config.privateRepo === true;
|
|
129
|
+
}
|
|
130
|
+
function setPrivateRepo(isPrivate) {
|
|
131
|
+
const config = getRepoConfig();
|
|
132
|
+
config.privateRepo = isPrivate;
|
|
133
|
+
saveRepoConfig(config);
|
|
134
|
+
}
|
|
124
135
|
function getRepoInfo() {
|
|
125
136
|
try {
|
|
126
137
|
const remoteUrl = (0, child_process_1.execSync)('git config --get remote.origin.url', { encoding: 'utf-8' }).trim();
|
|
@@ -129,6 +140,14 @@ function getRepoInfo() {
|
|
|
129
140
|
if (match) {
|
|
130
141
|
const owner = match[1];
|
|
131
142
|
const name = match[2];
|
|
143
|
+
// If privacy mode is enabled, return obfuscated info
|
|
144
|
+
if (isPrivateRepo()) {
|
|
145
|
+
return {
|
|
146
|
+
owner: 'private',
|
|
147
|
+
name: 'private',
|
|
148
|
+
url: 'private',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
132
151
|
return {
|
|
133
152
|
owner,
|
|
134
153
|
name,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AAgCA,8BAKC;AAGD,sCAaC;AAGD,0CAaC;AAGD,wCAGC;AAGD,4CAGC;AAED,8CAGC;AAED,8CAIC;AAED,8BAGC;AAED,8BAIC;AAED,kCAGC;AAED,kCAIC;AAED,sCAIC;AAED,sCAGC;AAED,wCAIC;AAED,sCAGC;AAED,wCAIC;AAED,kCA+BC;AA/KD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,iDAAyC;AAUzC,gCAAgC;AAChC,SAAS,iBAAiB;IACxB,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;AACtE,CAAC;AAED,yBAAyB;AACzB,SAAS,mBAAmB;IAC1B,MAAM,OAAO,GAAG,YAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAE1D,iCAAiC;IACjC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED,qDAAqD;AACrD,SAAgB,SAAS;IACvB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,UAAU,EAAE,CAAC;AAC5C,CAAC;AAED,gCAAgC;AAChC,SAAgB,aAAa;IAC3B,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IAEvC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,yBAAyB;AACzB,SAAgB,eAAe;IAC7B,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IAEzC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,4BAA4B;AAC5B,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,qBAAqB;AACrB,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,cAAc,GAAG,QAAQ,CAAC;IACjC,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,gCAAgC,CAAC;AACnG,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,WAAW;IACzB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC;IACvB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,kBAAkB;AACzD,CAAC;AAED,SAAgB,cAAc,CAAC,OAAgB;IAC7C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;IAC7B,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,SAAgB,cAAc,CAAC,SAAkB;IAC/C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,wBAAQ,EAAC,oCAAoC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/F,iDAAiD;QACjD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAEtE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,qDAAqD;YACrD,IAAI,aAAa,EAAE,EAAE,CAAC;gBACpB,OAAO;oBACL,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,SAAS;oBACf,GAAG,EAAE,SAAS;iBACf,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,KAAK;gBACL,IAAI;gBACJ,GAAG,EAAE,sBAAsB,KAAK,IAAI,IAAI,EAAE;aAC3C,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
package/src/commands/init.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
+
import * as readline from 'readline';
|
|
3
4
|
import chalk from 'chalk';
|
|
4
5
|
import { isGitRepo } from '../utils/git';
|
|
5
6
|
import { POST_COMMIT_HOOK } from '../templates/post-commit';
|
|
6
|
-
import { getRepoInfo, setGitHubUsername, getGitHubUsername } from '../config';
|
|
7
|
+
import { getRepoInfo, setGitHubUsername, getGitHubUsername, setPrivateRepo } from '../config';
|
|
7
8
|
|
|
8
9
|
async function isRepoPublic(owner: string, repo: string): Promise<boolean | null> {
|
|
9
10
|
try {
|
|
@@ -27,6 +28,20 @@ async function isRepoPublic(owner: string, repo: string): Promise<boolean | null
|
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
function askQuestion(question: string): Promise<string> {
|
|
32
|
+
const rl = readline.createInterface({
|
|
33
|
+
input: process.stdin,
|
|
34
|
+
output: process.stdout
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return new Promise((resolve) => {
|
|
38
|
+
rl.question(question, (answer) => {
|
|
39
|
+
rl.close();
|
|
40
|
+
resolve(answer.trim().toLowerCase());
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
30
45
|
export async function initCommand(): Promise<void> {
|
|
31
46
|
// Check if git repo
|
|
32
47
|
if (!isGitRepo()) {
|
|
@@ -42,13 +57,11 @@ export async function initCommand(): Promise<void> {
|
|
|
42
57
|
console.log();
|
|
43
58
|
console.error(chalk.red('Error: No GitHub remote detected'));
|
|
44
59
|
console.log();
|
|
45
|
-
console.log(chalk.yellow('Git Slot Machine requires a
|
|
60
|
+
console.log(chalk.yellow('Git Slot Machine requires a GitHub repository.'));
|
|
46
61
|
console.log();
|
|
47
62
|
console.log(chalk.dim('Add a GitHub remote to this repo:'));
|
|
48
63
|
console.log(chalk.cyan(' git remote add origin https://github.com/username/repo.git'));
|
|
49
64
|
console.log();
|
|
50
|
-
console.log(chalk.dim('This prevents farming points in private/local repos.'));
|
|
51
|
-
console.log(chalk.dim('Your commits must be publicly verifiable.'));
|
|
52
65
|
process.exit(1);
|
|
53
66
|
}
|
|
54
67
|
|
|
@@ -62,23 +75,49 @@ export async function initCommand(): Promise<void> {
|
|
|
62
75
|
console.log(chalk.dim('Checking repository visibility...'));
|
|
63
76
|
const isPublic = await isRepoPublic(repoInfo.owner, repoInfo.name);
|
|
64
77
|
|
|
78
|
+
let usePrivacyMode = false;
|
|
79
|
+
|
|
65
80
|
if (isPublic === false) {
|
|
81
|
+
console.log(chalk.yellow('⚠️ Private repository detected'));
|
|
66
82
|
console.log();
|
|
67
|
-
console.
|
|
68
|
-
console.log();
|
|
69
|
-
console.log(chalk.yellow('Git Slot Machine only supports public repositories.'));
|
|
83
|
+
console.log(chalk.cyan('Privacy Mode Available'));
|
|
84
|
+
console.log(chalk.dim('You can still use Git Slot Machine with privacy mode enabled.'));
|
|
70
85
|
console.log();
|
|
71
|
-
console.log(chalk.
|
|
72
|
-
console.log(chalk.dim('
|
|
73
|
-
console.log(chalk.dim('private
|
|
86
|
+
console.log(chalk.yellow('What happens in privacy mode:'));
|
|
87
|
+
console.log(chalk.dim(' • Repository name/org are NOT stored on the server'));
|
|
88
|
+
console.log(chalk.dim(' • Sent as "private/private" to the API'));
|
|
89
|
+
console.log(chalk.dim(' • Displayed as "*******/*******" on leaderboard'));
|
|
90
|
+
console.log(chalk.dim(' • Your GitHub username is still public'));
|
|
91
|
+
console.log(chalk.dim(' • All private repos share one balance'));
|
|
74
92
|
console.log();
|
|
75
|
-
console.log(chalk.dim('Please use git-slot-machine with a public repository.'));
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
93
|
|
|
79
|
-
|
|
94
|
+
const answer = await askQuestion(chalk.green('Enable privacy mode? (y/n): '));
|
|
95
|
+
|
|
96
|
+
if (answer === 'y' || answer === 'yes') {
|
|
97
|
+
usePrivacyMode = true;
|
|
98
|
+
setPrivateRepo(true);
|
|
99
|
+
console.log(chalk.green('✓ Privacy mode enabled'));
|
|
100
|
+
console.log(chalk.dim('Repository details will never be sent to the server.'));
|
|
101
|
+
} else {
|
|
102
|
+
console.log();
|
|
103
|
+
console.log(chalk.red('Cannot proceed without privacy mode for private repos.'));
|
|
104
|
+
console.log(chalk.dim('Please make the repository public or enable privacy mode.'));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
} else if (isPublic === null) {
|
|
80
108
|
console.log(chalk.yellow('⚠️ Could not verify repository visibility'));
|
|
81
|
-
console.log(
|
|
109
|
+
console.log();
|
|
110
|
+
|
|
111
|
+
const answer = await askQuestion(chalk.green('Is this a private repository? (y/n): '));
|
|
112
|
+
|
|
113
|
+
if (answer === 'y' || answer === 'yes') {
|
|
114
|
+
usePrivacyMode = true;
|
|
115
|
+
setPrivateRepo(true);
|
|
116
|
+
console.log(chalk.green('✓ Privacy mode enabled'));
|
|
117
|
+
console.log(chalk.dim('Repository details will never be sent to the server.'));
|
|
118
|
+
} else {
|
|
119
|
+
console.log(chalk.dim('Proceeding with public repository mode...'));
|
|
120
|
+
}
|
|
82
121
|
} else {
|
|
83
122
|
console.log(chalk.green('✓ Public repository confirmed'));
|
|
84
123
|
}
|
package/src/config.ts
CHANGED
|
@@ -8,6 +8,7 @@ interface Config {
|
|
|
8
8
|
apiUrl?: string;
|
|
9
9
|
apiToken?: string;
|
|
10
10
|
syncEnabled?: boolean;
|
|
11
|
+
privateRepo?: boolean;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
// Get repo-specific config path
|
|
@@ -130,6 +131,17 @@ export function setSyncEnabled(enabled: boolean): void {
|
|
|
130
131
|
saveGlobalConfig(config);
|
|
131
132
|
}
|
|
132
133
|
|
|
134
|
+
export function isPrivateRepo(): boolean {
|
|
135
|
+
const config = getRepoConfig();
|
|
136
|
+
return config.privateRepo === true;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function setPrivateRepo(isPrivate: boolean): void {
|
|
140
|
+
const config = getRepoConfig();
|
|
141
|
+
config.privateRepo = isPrivate;
|
|
142
|
+
saveRepoConfig(config);
|
|
143
|
+
}
|
|
144
|
+
|
|
133
145
|
export function getRepoInfo(): { owner: string; name: string; url: string } | null {
|
|
134
146
|
try {
|
|
135
147
|
const remoteUrl = execSync('git config --get remote.origin.url', { encoding: 'utf-8' }).trim();
|
|
@@ -140,6 +152,16 @@ export function getRepoInfo(): { owner: string; name: string; url: string } | nu
|
|
|
140
152
|
if (match) {
|
|
141
153
|
const owner = match[1];
|
|
142
154
|
const name = match[2];
|
|
155
|
+
|
|
156
|
+
// If privacy mode is enabled, return obfuscated info
|
|
157
|
+
if (isPrivateRepo()) {
|
|
158
|
+
return {
|
|
159
|
+
owner: 'private',
|
|
160
|
+
name: 'private',
|
|
161
|
+
url: 'private',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
143
165
|
return {
|
|
144
166
|
owner,
|
|
145
167
|
name,
|