git-slot-machine 1.1.1 → 1.2.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/CHANGELOG.md +35 -0
- package/README.md +5 -6
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +80 -16
- package/dist/commands/init.js.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/index.js +7 -10
- package/dist/index.js.map +1 -1
- package/dist/utils/git.d.ts +1 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +46 -0
- package/dist/utils/git.js.map +1 -1
- package/package.json +3 -2
- package/scripts/postinstall.js +27 -0
- package/src/commands/init.ts +87 -16
- package/src/config.ts +2 -2
- package/src/index.ts +7 -11
- package/src/utils/git.ts +50 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.2.0] - 2025-01-16
|
|
9
|
+
|
|
10
|
+
### Breaking Changes
|
|
11
|
+
- **Simplified command structure**: Authentication commands moved to top-level
|
|
12
|
+
- `git-slot-machine auth login <username>` → `git-slot-machine login <username>`
|
|
13
|
+
- `git-slot-machine auth status` → `git-slot-machine status`
|
|
14
|
+
- `git-slot-machine auth logout` → `git-slot-machine logout`
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **Automatic GitHub username detection** during init with smart fallback chain:
|
|
18
|
+
- GitHub CLI (`gh`) authentication
|
|
19
|
+
- Git config `github.user`
|
|
20
|
+
- GitHub noreply email pattern
|
|
21
|
+
- Manual prompt as fallback
|
|
22
|
+
- **Opt-in leaderboard prompt** during init - users choose whether to join
|
|
23
|
+
- **Postinstall script** with setup instructions (global installs only)
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- GitHub username now stored globally (not per-repo) as it represents developer identity
|
|
27
|
+
- Init flow now prompts to join leaderboard with username confirmation
|
|
28
|
+
- Authentication is now optional but encouraged during setup
|
|
29
|
+
|
|
30
|
+
### Improved
|
|
31
|
+
- Clearer onboarding experience with guided prompts
|
|
32
|
+
- Better username detection reduces manual entry
|
|
33
|
+
- More intuitive command structure (no nested `auth` subcommand)
|
|
34
|
+
|
|
35
|
+
## [1.1.2] - 2025-01-16
|
|
36
|
+
|
|
37
|
+
### Improved
|
|
38
|
+
- Enhanced privacy mode messaging with visual indicators (✓ and ✗) to clearly show what data is and isn't sent to the server
|
|
39
|
+
- Privacy mode now displays a red X for repository details that are NOT sent
|
|
40
|
+
- Public mode shows all items with green checkmarks
|
|
41
|
+
- Added explanatory note for privacy mode showing that repo details are sent as "private/private"
|
|
42
|
+
|
|
8
43
|
## [1.1.1] - 2025-01-16
|
|
9
44
|
|
|
10
45
|
### Fixed
|
package/README.md
CHANGED
|
@@ -22,13 +22,12 @@ A fun CLI tool that analyzes your commit hashes and rewards you based on pattern
|
|
|
22
22
|
# Install globally
|
|
23
23
|
npm install -g git-slot-machine
|
|
24
24
|
|
|
25
|
-
# Authenticate with your GitHub username
|
|
26
|
-
git-slot-machine auth login
|
|
27
|
-
|
|
28
25
|
# Install post-commit hook in your repo
|
|
29
26
|
cd your-repo
|
|
30
27
|
git-slot-machine init
|
|
31
28
|
|
|
29
|
+
# (during init, you'll be prompted to join the leaderboard)
|
|
30
|
+
|
|
32
31
|
# Make a commit and watch the magic happen!
|
|
33
32
|
git commit -m "feat: add new feature"
|
|
34
33
|
# 🎰 aa1bb2c • TWO PAIR +50 • Balance: 150
|
|
@@ -62,13 +61,13 @@ npm install -g git-slot-machine
|
|
|
62
61
|
|
|
63
62
|
```bash
|
|
64
63
|
# Login with your GitHub username
|
|
65
|
-
git-slot-machine
|
|
64
|
+
git-slot-machine login <your-github-username>
|
|
66
65
|
|
|
67
66
|
# Check authentication status
|
|
68
|
-
git-slot-machine
|
|
67
|
+
git-slot-machine status
|
|
69
68
|
|
|
70
69
|
# Logout
|
|
71
|
-
git-slot-machine
|
|
70
|
+
git-slot-machine logout
|
|
72
71
|
```
|
|
73
72
|
|
|
74
73
|
### Gameplay
|
|
@@ -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":"AA6CA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyLjD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,9 +2,10 @@ import * as fs from 'fs';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as readline from 'readline';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
|
-
import { isGitRepo } from '../utils/git.js';
|
|
5
|
+
import { isGitRepo, detectGitHubUsername } from '../utils/git.js';
|
|
6
6
|
import { POST_COMMIT_HOOK } from '../templates/post-commit.js';
|
|
7
7
|
import { getRepoInfo, setGitHubUsername, getGitHubUsername, setPrivateRepo } from '../config.js';
|
|
8
|
+
import { authLoginCommand } from './auth.js';
|
|
8
9
|
async function isRepoPublic(owner, repo) {
|
|
9
10
|
try {
|
|
10
11
|
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {
|
|
@@ -44,7 +45,7 @@ export async function initCommand() {
|
|
|
44
45
|
console.log(chalk.dim('Run this command from the root of a git repository'));
|
|
45
46
|
process.exit(1);
|
|
46
47
|
}
|
|
47
|
-
//
|
|
48
|
+
// Check for GitHub remote
|
|
48
49
|
const repoInfo = getRepoInfo();
|
|
49
50
|
if (!repoInfo) {
|
|
50
51
|
console.log();
|
|
@@ -57,10 +58,26 @@ export async function initCommand() {
|
|
|
57
58
|
console.log();
|
|
58
59
|
process.exit(1);
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
// Detect GitHub username (not repo owner)
|
|
62
|
+
let githubUsername = getGitHubUsername();
|
|
63
|
+
if (!githubUsername) {
|
|
64
|
+
// Try to detect from git config
|
|
65
|
+
githubUsername = detectGitHubUsername();
|
|
66
|
+
if (githubUsername) {
|
|
67
|
+
console.log(chalk.dim(`Detected GitHub username: ${githubUsername}`));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Couldn't detect, prompt user
|
|
71
|
+
console.log();
|
|
72
|
+
console.log(chalk.yellow('GitHub username not detected'));
|
|
73
|
+
console.log(chalk.dim('We need your GitHub username (not the repo owner) for the leaderboard'));
|
|
74
|
+
githubUsername = await askQuestion(chalk.cyan('Enter your GitHub username: '));
|
|
75
|
+
if (!githubUsername) {
|
|
76
|
+
console.log(chalk.red('GitHub username is required'));
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
setGitHubUsername(githubUsername);
|
|
64
81
|
}
|
|
65
82
|
// Check if repository is public
|
|
66
83
|
console.log(chalk.dim('Checking repository visibility...'));
|
|
@@ -124,20 +141,67 @@ export async function initCommand() {
|
|
|
124
141
|
fs.writeFileSync(hookPath, POST_COMMIT_HOOK, { mode: 0o755 });
|
|
125
142
|
console.log(chalk.green('✓ Post-commit hook installed'));
|
|
126
143
|
console.log();
|
|
127
|
-
|
|
128
|
-
|
|
144
|
+
// Ask if they want to join the leaderboard
|
|
145
|
+
const joinLeaderboard = await askQuestion(chalk.cyan('Join the global leaderboard? (Y/n): '));
|
|
129
146
|
console.log();
|
|
130
|
-
|
|
147
|
+
if (joinLeaderboard === 'n' || joinLeaderboard === 'no') {
|
|
148
|
+
console.log(chalk.green('✓ Git Slot Machine is ready (local mode only)'));
|
|
149
|
+
console.log(chalk.dim('Every commit will spin the slot machine locally.'));
|
|
150
|
+
console.log();
|
|
151
|
+
console.log(chalk.dim('To join the leaderboard later:'));
|
|
152
|
+
console.log(chalk.cyan(' git-slot-machine login your-username'));
|
|
153
|
+
console.log();
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Confirm detected username
|
|
157
|
+
console.log(chalk.dim(`Detected GitHub username: ${githubUsername}`));
|
|
158
|
+
const isCorrect = await askQuestion(chalk.cyan('Is this correct? (Y/n): '));
|
|
159
|
+
console.log();
|
|
160
|
+
if (isCorrect === 'n' || isCorrect === 'no') {
|
|
161
|
+
githubUsername = await askQuestion(chalk.cyan('Enter your GitHub username: '));
|
|
162
|
+
if (!githubUsername) {
|
|
163
|
+
console.log(chalk.yellow('Skipping authentication - you can join later'));
|
|
164
|
+
console.log(chalk.cyan(' git-slot-machine login your-username'));
|
|
165
|
+
console.log();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
setGitHubUsername(githubUsername);
|
|
169
|
+
console.log();
|
|
170
|
+
}
|
|
171
|
+
// Authenticate
|
|
172
|
+
console.log(chalk.dim('Authenticating...'));
|
|
173
|
+
try {
|
|
174
|
+
await authLoginCommand(githubUsername);
|
|
175
|
+
console.log(chalk.green('✓ You\'re on the leaderboard!'));
|
|
176
|
+
console.log(chalk.dim('View it at: https://gitslotmachine.com'));
|
|
177
|
+
console.log();
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.log(chalk.yellow('⚠️ Authentication failed'));
|
|
181
|
+
console.log(chalk.dim('Your commits will work locally, but won\'t appear on the leaderboard'));
|
|
182
|
+
console.log(chalk.dim(`Try again: git-slot-machine login ${githubUsername}`));
|
|
183
|
+
console.log();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
console.log(chalk.cyan('Try it out:'));
|
|
131
187
|
console.log(chalk.dim(' git commit --allow-empty -m "test"'));
|
|
132
188
|
console.log();
|
|
133
|
-
console.log(chalk.cyan('Optional: Sync with the API'));
|
|
134
|
-
console.log(chalk.dim(` git-slot-machine auth login ${repoInfo?.owner || 'your-github-username'}`));
|
|
135
|
-
console.log();
|
|
136
189
|
console.log(chalk.yellow('What gets sent to the server:'));
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
190
|
+
if (usePrivacyMode) {
|
|
191
|
+
// Privacy mode - show what is NOT sent
|
|
192
|
+
console.log(chalk.green(' ✓ Commit hash (7 and 40 character versions)'));
|
|
193
|
+
console.log(chalk.red(' ✗ Repository URL, owner, and name'));
|
|
194
|
+
console.log(chalk.dim(' (Sent as "private/private" instead)'));
|
|
195
|
+
console.log(chalk.green(' ✓ GitHub username'));
|
|
196
|
+
console.log(chalk.green(' ✓ Pattern type, payout, and balance'));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Public mode - everything is sent
|
|
200
|
+
console.log(chalk.green(' ✓ Commit hash (7 and 40 character versions)'));
|
|
201
|
+
console.log(chalk.green(' ✓ Repository URL, owner, and name'));
|
|
202
|
+
console.log(chalk.green(' ✓ GitHub username'));
|
|
203
|
+
console.log(chalk.green(' ✓ Pattern type, payout, and balance'));
|
|
204
|
+
}
|
|
141
205
|
console.log();
|
|
142
206
|
console.log(chalk.dim('You can disable API sync anytime:'));
|
|
143
207
|
console.log(chalk.dim(' git-slot-machine config set sync-enabled false'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -65,9 +65,9 @@ export function getGitHubUsername() {
|
|
|
65
65
|
return config.githubUsername || null;
|
|
66
66
|
}
|
|
67
67
|
export function setGitHubUsername(username) {
|
|
68
|
-
const config =
|
|
68
|
+
const config = getGlobalConfig();
|
|
69
69
|
config.githubUsername = username;
|
|
70
|
-
|
|
70
|
+
saveGlobalConfig(config);
|
|
71
71
|
}
|
|
72
72
|
export function getApiUrl() {
|
|
73
73
|
const config = getConfig();
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -45,26 +45,23 @@ program
|
|
|
45
45
|
.action(async (options) => {
|
|
46
46
|
await testCommand(options);
|
|
47
47
|
});
|
|
48
|
-
// Auth commands
|
|
49
|
-
|
|
50
|
-
.command('auth')
|
|
51
|
-
.description('Manage API authentication');
|
|
52
|
-
auth
|
|
48
|
+
// Auth commands (top-level)
|
|
49
|
+
program
|
|
53
50
|
.command('login')
|
|
54
|
-
.description('Login with GitHub username')
|
|
51
|
+
.description('Login with GitHub username to join the leaderboard')
|
|
55
52
|
.argument('<github-username>', 'Your GitHub username')
|
|
56
53
|
.action(async (githubUsername) => {
|
|
57
54
|
await authLoginCommand(githubUsername);
|
|
58
55
|
});
|
|
59
|
-
|
|
56
|
+
program
|
|
60
57
|
.command('logout')
|
|
61
|
-
.description('Logout and clear
|
|
58
|
+
.description('Logout and clear authentication')
|
|
62
59
|
.action(async () => {
|
|
63
60
|
await authLogoutCommand();
|
|
64
61
|
});
|
|
65
|
-
|
|
62
|
+
program
|
|
66
63
|
.command('status')
|
|
67
|
-
.description('Show authentication status')
|
|
64
|
+
.description('Show authentication and sync status')
|
|
68
65
|
.action(async () => {
|
|
69
66
|
await authStatusCommand();
|
|
70
67
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC;KACjD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAY,EAAE,EAAE;IAC3C,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;IAC7B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;IAC7B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC;KACjD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAY,EAAE,EAAE;IAC3C,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;IAC7B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;IAC7B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oDAAoD,CAAC;KACjE,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,cAAsB,EAAE,EAAE;IACvC,MAAM,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,MAAM,MAAM,GAAG,OAAO;KACnB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC,CAAC;AAE3C,MAAM;KACH,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,OAAO,EAAE,gDAAgD,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;IAC5B,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEL,MAAM;KACH,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,OAAO,EAAE,2CAA2C,CAAC;KAC9D,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;IAC3C,MAAM,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/utils/git.d.ts
CHANGED
package/dist/utils/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAWjD;AAED,wBAAgB,SAAS,IAAI,OAAO,CASnC"}
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAWjD;AAED,wBAAgB,SAAS,IAAI,OAAO,CASnC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAgDpD"}
|
package/dist/utils/git.js
CHANGED
|
@@ -34,4 +34,50 @@ export function isGitRepo() {
|
|
|
34
34
|
return false;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
export function detectGitHubUsername() {
|
|
38
|
+
// Try 1: Check GitHub CLI (gh)
|
|
39
|
+
try {
|
|
40
|
+
const ghUser = execSync('gh api user --jq .login', {
|
|
41
|
+
encoding: 'utf-8',
|
|
42
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
43
|
+
}).trim();
|
|
44
|
+
if (ghUser) {
|
|
45
|
+
return ghUser;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// gh not installed or not authenticated, continue to next method
|
|
50
|
+
}
|
|
51
|
+
// Try 2: Check git config github.user
|
|
52
|
+
try {
|
|
53
|
+
const githubUser = execSync('git config github.user', {
|
|
54
|
+
encoding: 'utf-8',
|
|
55
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
56
|
+
}).trim();
|
|
57
|
+
if (githubUser) {
|
|
58
|
+
return githubUser;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// github.user not set, continue to next method
|
|
63
|
+
}
|
|
64
|
+
// Try 3: Extract from GitHub noreply email
|
|
65
|
+
try {
|
|
66
|
+
const email = execSync('git config user.email', {
|
|
67
|
+
encoding: 'utf-8',
|
|
68
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
69
|
+
}).trim();
|
|
70
|
+
// Match patterns like:
|
|
71
|
+
// - username@users.noreply.github.com
|
|
72
|
+
// - 12345+username@users.noreply.github.com (with ID prefix)
|
|
73
|
+
const match = email.match(/^(?:\d+\+)?(.+)@users\.noreply\.github\.com$/);
|
|
74
|
+
if (match) {
|
|
75
|
+
return match[1];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// user.email not set or no match
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
37
83
|
//# sourceMappingURL=git.js.map
|
package/dist/utils/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,QAAQ,CAAC,qCAAqC,EAAE;YAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,QAAQ,CAAC,qCAAqC,EAAE;YAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,yBAAyB,EAAE;YACjD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YACpD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IAED,2CAA2C;IAC3C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,uBAAuB,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,uBAAuB;QACvB,sCAAsC;QACtC,6DAA6D;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC1E,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "git-slot-machine",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Turn your git commits into a slot machine game! CLI tool with global leaderboards and win streaks.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"build": "tsc",
|
|
20
20
|
"dev": "tsc --watch",
|
|
21
21
|
"test": "jest",
|
|
22
|
-
"lint": "eslint src --ext .ts"
|
|
22
|
+
"lint": "eslint src --ext .ts",
|
|
23
|
+
"postinstall": "node scripts/postinstall.js"
|
|
23
24
|
},
|
|
24
25
|
"keywords": [
|
|
25
26
|
"git",
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
|
|
5
|
+
// Only show message for global installs (when npm_config_global is set)
|
|
6
|
+
const isGlobalInstall = process.env.npm_config_global === 'true';
|
|
7
|
+
|
|
8
|
+
if (!isGlobalInstall) {
|
|
9
|
+
// Skip message for local/dev installs
|
|
10
|
+
process.exit(0);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
console.log();
|
|
14
|
+
console.log(chalk.green.bold('🎰 Git Slot Machine installed successfully!'));
|
|
15
|
+
console.log();
|
|
16
|
+
console.log(chalk.cyan('Quick Start:'));
|
|
17
|
+
console.log();
|
|
18
|
+
console.log(chalk.white(' 1. Navigate to a git repository:'));
|
|
19
|
+
console.log(chalk.dim(' cd /path/to/your/repo'));
|
|
20
|
+
console.log();
|
|
21
|
+
console.log(chalk.white(' 2. Initialize Git Slot Machine:'));
|
|
22
|
+
console.log(chalk.cyan(' git-slot-machine init'));
|
|
23
|
+
console.log();
|
|
24
|
+
console.log(chalk.white(' 3. Make commits and watch the magic happen!'));
|
|
25
|
+
console.log();
|
|
26
|
+
console.log(chalk.dim('Learn more: https://gitslotmachine.com'));
|
|
27
|
+
console.log();
|
package/src/commands/init.ts
CHANGED
|
@@ -2,9 +2,10 @@ import * as fs from 'fs';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as readline from 'readline';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
|
-
import { isGitRepo } from '../utils/git.js';
|
|
5
|
+
import { isGitRepo, detectGitHubUsername } from '../utils/git.js';
|
|
6
6
|
import { POST_COMMIT_HOOK } from '../templates/post-commit.js';
|
|
7
7
|
import { getRepoInfo, setGitHubUsername, getGitHubUsername, setPrivateRepo } from '../config.js';
|
|
8
|
+
import { authLoginCommand } from './auth.js';
|
|
8
9
|
|
|
9
10
|
async function isRepoPublic(owner: string, repo: string): Promise<boolean | null> {
|
|
10
11
|
try {
|
|
@@ -50,7 +51,7 @@ export async function initCommand(): Promise<void> {
|
|
|
50
51
|
process.exit(1);
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
//
|
|
54
|
+
// Check for GitHub remote
|
|
54
55
|
const repoInfo = getRepoInfo();
|
|
55
56
|
|
|
56
57
|
if (!repoInfo) {
|
|
@@ -65,10 +66,29 @@ export async function initCommand(): Promise<void> {
|
|
|
65
66
|
process.exit(1);
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
// Detect GitHub username (not repo owner)
|
|
70
|
+
let githubUsername = getGitHubUsername();
|
|
71
|
+
|
|
72
|
+
if (!githubUsername) {
|
|
73
|
+
// Try to detect from git config
|
|
74
|
+
githubUsername = detectGitHubUsername();
|
|
75
|
+
|
|
76
|
+
if (githubUsername) {
|
|
77
|
+
console.log(chalk.dim(`Detected GitHub username: ${githubUsername}`));
|
|
78
|
+
} else {
|
|
79
|
+
// Couldn't detect, prompt user
|
|
80
|
+
console.log();
|
|
81
|
+
console.log(chalk.yellow('GitHub username not detected'));
|
|
82
|
+
console.log(chalk.dim('We need your GitHub username (not the repo owner) for the leaderboard'));
|
|
83
|
+
githubUsername = await askQuestion(chalk.cyan('Enter your GitHub username: '));
|
|
84
|
+
|
|
85
|
+
if (!githubUsername) {
|
|
86
|
+
console.log(chalk.red('GitHub username is required'));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
setGitHubUsername(githubUsername);
|
|
72
92
|
}
|
|
73
93
|
|
|
74
94
|
// Check if repository is public
|
|
@@ -140,20 +160,71 @@ export async function initCommand(): Promise<void> {
|
|
|
140
160
|
|
|
141
161
|
console.log(chalk.green('✓ Post-commit hook installed'));
|
|
142
162
|
console.log();
|
|
143
|
-
|
|
144
|
-
|
|
163
|
+
|
|
164
|
+
// Ask if they want to join the leaderboard
|
|
165
|
+
const joinLeaderboard = await askQuestion(chalk.cyan('Join the global leaderboard? (Y/n): '));
|
|
145
166
|
console.log();
|
|
146
|
-
|
|
167
|
+
|
|
168
|
+
if (joinLeaderboard === 'n' || joinLeaderboard === 'no') {
|
|
169
|
+
console.log(chalk.green('✓ Git Slot Machine is ready (local mode only)'));
|
|
170
|
+
console.log(chalk.dim('Every commit will spin the slot machine locally.'));
|
|
171
|
+
console.log();
|
|
172
|
+
console.log(chalk.dim('To join the leaderboard later:'));
|
|
173
|
+
console.log(chalk.cyan(' git-slot-machine login your-username'));
|
|
174
|
+
console.log();
|
|
175
|
+
} else {
|
|
176
|
+
// Confirm detected username
|
|
177
|
+
console.log(chalk.dim(`Detected GitHub username: ${githubUsername}`));
|
|
178
|
+
const isCorrect = await askQuestion(chalk.cyan('Is this correct? (Y/n): '));
|
|
179
|
+
console.log();
|
|
180
|
+
|
|
181
|
+
if (isCorrect === 'n' || isCorrect === 'no') {
|
|
182
|
+
githubUsername = await askQuestion(chalk.cyan('Enter your GitHub username: '));
|
|
183
|
+
if (!githubUsername) {
|
|
184
|
+
console.log(chalk.yellow('Skipping authentication - you can join later'));
|
|
185
|
+
console.log(chalk.cyan(' git-slot-machine login your-username'));
|
|
186
|
+
console.log();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
setGitHubUsername(githubUsername);
|
|
190
|
+
console.log();
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Authenticate
|
|
194
|
+
console.log(chalk.dim('Authenticating...'));
|
|
195
|
+
try {
|
|
196
|
+
await authLoginCommand(githubUsername);
|
|
197
|
+
console.log(chalk.green('✓ You\'re on the leaderboard!'));
|
|
198
|
+
console.log(chalk.dim('View it at: https://gitslotmachine.com'));
|
|
199
|
+
console.log();
|
|
200
|
+
} catch (error) {
|
|
201
|
+
console.log(chalk.yellow('⚠️ Authentication failed'));
|
|
202
|
+
console.log(chalk.dim('Your commits will work locally, but won\'t appear on the leaderboard'));
|
|
203
|
+
console.log(chalk.dim(`Try again: git-slot-machine login ${githubUsername}`));
|
|
204
|
+
console.log();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
console.log(chalk.cyan('Try it out:'));
|
|
147
209
|
console.log(chalk.dim(' git commit --allow-empty -m "test"'));
|
|
148
210
|
console.log();
|
|
149
|
-
console.log(chalk.cyan('Optional: Sync with the API'));
|
|
150
|
-
console.log(chalk.dim(` git-slot-machine auth login ${repoInfo?.owner || 'your-github-username'}`));
|
|
151
|
-
console.log();
|
|
152
211
|
console.log(chalk.yellow('What gets sent to the server:'));
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
212
|
+
|
|
213
|
+
if (usePrivacyMode) {
|
|
214
|
+
// Privacy mode - show what is NOT sent
|
|
215
|
+
console.log(chalk.green(' ✓ Commit hash (7 and 40 character versions)'));
|
|
216
|
+
console.log(chalk.red(' ✗ Repository URL, owner, and name'));
|
|
217
|
+
console.log(chalk.dim(' (Sent as "private/private" instead)'));
|
|
218
|
+
console.log(chalk.green(' ✓ GitHub username'));
|
|
219
|
+
console.log(chalk.green(' ✓ Pattern type, payout, and balance'));
|
|
220
|
+
} else {
|
|
221
|
+
// Public mode - everything is sent
|
|
222
|
+
console.log(chalk.green(' ✓ Commit hash (7 and 40 character versions)'));
|
|
223
|
+
console.log(chalk.green(' ✓ Repository URL, owner, and name'));
|
|
224
|
+
console.log(chalk.green(' ✓ GitHub username'));
|
|
225
|
+
console.log(chalk.green(' ✓ Pattern type, payout, and balance'));
|
|
226
|
+
}
|
|
227
|
+
|
|
157
228
|
console.log();
|
|
158
229
|
console.log(chalk.dim('You can disable API sync anytime:'));
|
|
159
230
|
console.log(chalk.dim(' git-slot-machine config set sync-enabled false'));
|
package/src/config.ts
CHANGED
|
@@ -87,9 +87,9 @@ export function getGitHubUsername(): string | null {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
export function setGitHubUsername(username: string): void {
|
|
90
|
-
const config =
|
|
90
|
+
const config = getGlobalConfig();
|
|
91
91
|
config.githubUsername = username;
|
|
92
|
-
|
|
92
|
+
saveGlobalConfig(config);
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
export function getApiUrl(): string {
|
package/src/index.ts
CHANGED
|
@@ -54,29 +54,25 @@ program
|
|
|
54
54
|
await testCommand(options);
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
// Auth commands
|
|
58
|
-
|
|
59
|
-
.command('auth')
|
|
60
|
-
.description('Manage API authentication');
|
|
61
|
-
|
|
62
|
-
auth
|
|
57
|
+
// Auth commands (top-level)
|
|
58
|
+
program
|
|
63
59
|
.command('login')
|
|
64
|
-
.description('Login with GitHub username')
|
|
60
|
+
.description('Login with GitHub username to join the leaderboard')
|
|
65
61
|
.argument('<github-username>', 'Your GitHub username')
|
|
66
62
|
.action(async (githubUsername: string) => {
|
|
67
63
|
await authLoginCommand(githubUsername);
|
|
68
64
|
});
|
|
69
65
|
|
|
70
|
-
|
|
66
|
+
program
|
|
71
67
|
.command('logout')
|
|
72
|
-
.description('Logout and clear
|
|
68
|
+
.description('Logout and clear authentication')
|
|
73
69
|
.action(async () => {
|
|
74
70
|
await authLogoutCommand();
|
|
75
71
|
});
|
|
76
72
|
|
|
77
|
-
|
|
73
|
+
program
|
|
78
74
|
.command('status')
|
|
79
|
-
.description('Show authentication status')
|
|
75
|
+
.description('Show authentication and sync status')
|
|
80
76
|
.action(async () => {
|
|
81
77
|
await authStatusCommand();
|
|
82
78
|
});
|
package/src/utils/git.ts
CHANGED
|
@@ -36,3 +36,53 @@ export function isGitRepo(): boolean {
|
|
|
36
36
|
return false;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
|
|
40
|
+
export function detectGitHubUsername(): string | null {
|
|
41
|
+
// Try 1: Check GitHub CLI (gh)
|
|
42
|
+
try {
|
|
43
|
+
const ghUser = execSync('gh api user --jq .login', {
|
|
44
|
+
encoding: 'utf-8',
|
|
45
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
46
|
+
}).trim();
|
|
47
|
+
|
|
48
|
+
if (ghUser) {
|
|
49
|
+
return ghUser;
|
|
50
|
+
}
|
|
51
|
+
} catch {
|
|
52
|
+
// gh not installed or not authenticated, continue to next method
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Try 2: Check git config github.user
|
|
56
|
+
try {
|
|
57
|
+
const githubUser = execSync('git config github.user', {
|
|
58
|
+
encoding: 'utf-8',
|
|
59
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
60
|
+
}).trim();
|
|
61
|
+
|
|
62
|
+
if (githubUser) {
|
|
63
|
+
return githubUser;
|
|
64
|
+
}
|
|
65
|
+
} catch {
|
|
66
|
+
// github.user not set, continue to next method
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Try 3: Extract from GitHub noreply email
|
|
70
|
+
try {
|
|
71
|
+
const email = execSync('git config user.email', {
|
|
72
|
+
encoding: 'utf-8',
|
|
73
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
74
|
+
}).trim();
|
|
75
|
+
|
|
76
|
+
// Match patterns like:
|
|
77
|
+
// - username@users.noreply.github.com
|
|
78
|
+
// - 12345+username@users.noreply.github.com (with ID prefix)
|
|
79
|
+
const match = email.match(/^(?:\d+\+)?(.+)@users\.noreply\.github\.com$/);
|
|
80
|
+
if (match) {
|
|
81
|
+
return match[1];
|
|
82
|
+
}
|
|
83
|
+
} catch {
|
|
84
|
+
// user.email not set or no match
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return null;
|
|
88
|
+
}
|