git-slot-machine 1.0.0 → 1.1.1
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 +15 -0
- package/dist/animation/slotMachine.d.ts +1 -1
- package/dist/animation/slotMachine.d.ts.map +1 -1
- package/dist/animation/slotMachine.js +15 -22
- package/dist/animation/slotMachine.js.map +1 -1
- package/dist/api.js +11 -19
- package/dist/api.js.map +1 -1
- package/dist/balance.js +7 -46
- package/dist/balance.js.map +1 -1
- package/dist/commands/auth.js +40 -48
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/balance.js +14 -20
- package/dist/commands/balance.js.map +1 -1
- package/dist/commands/config.js +19 -26
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +87 -90
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/play.js +31 -37
- package/dist/commands/play.js.map +1 -1
- package/dist/commands/spin.js +6 -9
- package/dist/commands/spin.js.map +1 -1
- package/dist/commands/sync.js +23 -29
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/test.js +3 -6
- package/dist/commands/test.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +49 -52
- package/dist/config.js.map +1 -1
- package/dist/index.js +21 -23
- package/dist/index.js.map +1 -1
- package/dist/patterns.js +3 -7
- package/dist/patterns.js.map +1 -1
- package/dist/templates/post-commit.js +1 -4
- package/dist/templates/post-commit.js.map +1 -1
- package/dist/utils/git.js +7 -12
- package/dist/utils/git.js.map +1 -1
- package/package.json +2 -1
- package/src/animation/slotMachine.ts +1 -1
- package/src/api.ts +1 -1
- package/src/commands/auth.ts +2 -2
- package/src/commands/balance.ts +1 -1
- package/src/commands/config.ts +1 -1
- package/src/commands/init.ts +56 -17
- package/src/commands/play.ts +5 -5
- package/src/commands/spin.ts +2 -2
- package/src/commands/sync.ts +2 -2
- package/src/commands/test.ts +1 -1
- package/src/config.ts +22 -0
- package/src/index.ts +8 -8
- package/src/patterns.test.ts +1 -1
- package/tsconfig.json +2 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.1.1] - 2025-01-16
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Fixed ES Module compatibility issue with chalk v5+ by converting from CommonJS to ES Modules
|
|
12
|
+
- Added explicit `.js` file extensions to all relative imports as required by ES modules
|
|
13
|
+
- Updated TypeScript configuration to compile to ES2022 modules instead of CommonJS
|
|
14
|
+
- Added `"type": "module"` to package.json
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Module system: CommonJS → ES Modules (ESM)
|
|
18
|
+
- TypeScript compiler target now outputs ES2022 modules
|
|
19
|
+
- All import statements now include explicit `.js` extensions
|
|
20
|
+
|
|
21
|
+
## [1.1.0] - Previous Release
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- Global leaderboards and win tracking
|
|
25
|
+
- Authentication with GitHub username
|
|
26
|
+
- Balance syncing across repositories
|
|
27
|
+
- Win streak tracking
|
|
28
|
+
- Multiple gameplay modes (animated and compact)
|
|
29
|
+
|
|
30
|
+
### Features
|
|
31
|
+
- Automatic post-commit hook installation
|
|
32
|
+
- Offline mode with sync when available
|
|
33
|
+
- Configuration management
|
|
34
|
+
- Pattern detection for commit hashes
|
|
35
|
+
- Shareable win URLs
|
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.
|
|
@@ -300,6 +307,14 @@ Contributions welcome! Please feel free to:
|
|
|
300
307
|
|
|
301
308
|
---
|
|
302
309
|
|
|
310
|
+
## Support
|
|
311
|
+
|
|
312
|
+
Enjoying Git Slot Machine? Consider sponsoring development:
|
|
313
|
+
|
|
314
|
+
[](https://github.com/sponsors/than)
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
303
318
|
## License
|
|
304
319
|
|
|
305
320
|
MIT License - see [LICENSE](LICENSE) file for details
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotMachine.d.ts","sourceRoot":"","sources":["../../src/animation/slotMachine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"slotMachine.d.ts","sourceRoot":"","sources":["../../src/animation/slotMachine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO/C,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAgED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD1E;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBxE"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.animateSlotMachine = animateSlotMachine;
|
|
7
|
-
exports.animateSmallMode = animateSmallMode;
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
1
|
+
import chalk from 'chalk';
|
|
9
2
|
const HEX_CHARS = '0123456789abcdef'.split('');
|
|
10
3
|
const ANIMATION_SPEED = 50; // ms per frame
|
|
11
4
|
const SPIN_DURATION = 2000; // total animation time
|
|
@@ -18,8 +11,8 @@ function clearLine() {
|
|
|
18
11
|
}
|
|
19
12
|
function drawSlotMachine(chars, spinning, highlightIndices = [], flash = false) {
|
|
20
13
|
// Casino color palette: red borders, white title
|
|
21
|
-
const borderColor =
|
|
22
|
-
const titleColor =
|
|
14
|
+
const borderColor = chalk.rgb(220, 20, 60); // Crimson red
|
|
15
|
+
const titleColor = chalk.white; // White
|
|
23
16
|
const borderWidth = 39;
|
|
24
17
|
const border = '═'.repeat(borderWidth);
|
|
25
18
|
const topBorder = borderColor('╔' + border + '╗');
|
|
@@ -30,7 +23,7 @@ function drawSlotMachine(chars, spinning, highlightIndices = [], flash = false)
|
|
|
30
23
|
const titleVisualWidth = 2 + 2 + titleText.length + 2 + 2; // emoji + spaces + text + spaces + emoji
|
|
31
24
|
const titlePadding = Math.floor((borderWidth - titleVisualWidth) / 2);
|
|
32
25
|
const titleRightPad = borderWidth - titleVisualWidth - titlePadding;
|
|
33
|
-
const titleLine = borderColor('║') + ' '.repeat(titlePadding) +
|
|
26
|
+
const titleLine = borderColor('║') + ' '.repeat(titlePadding) + chalk.rgb(255, 255, 255)('🎰 ' + titleText + ' 🎰') + ' '.repeat(titleRightPad) + borderColor('║');
|
|
34
27
|
console.log(topBorder);
|
|
35
28
|
console.log(titleLine);
|
|
36
29
|
console.log(middleBorder);
|
|
@@ -38,22 +31,22 @@ function drawSlotMachine(chars, spinning, highlightIndices = [], flash = false)
|
|
|
38
31
|
const display = chars.map((char, i) => {
|
|
39
32
|
if (spinning) {
|
|
40
33
|
// Spinning - white blur
|
|
41
|
-
return
|
|
34
|
+
return chalk.rgb(255, 255, 255).bold(char);
|
|
42
35
|
}
|
|
43
36
|
else {
|
|
44
37
|
// Check if this character should be highlighted
|
|
45
38
|
const isHighlighted = highlightIndices.includes(i);
|
|
46
39
|
if (isHighlighted && flash) {
|
|
47
40
|
// Flash state - yellow inverse (yellow background, black text)
|
|
48
|
-
return
|
|
41
|
+
return chalk.bgRgb(255, 255, 0).rgb(0, 0, 0).bold(char);
|
|
49
42
|
}
|
|
50
43
|
else if (isHighlighted) {
|
|
51
44
|
// Normal highlighted state - yellow inverse (yellow background, black text)
|
|
52
|
-
return
|
|
45
|
+
return chalk.bgRgb(255, 255, 0).rgb(0, 0, 0).bold(char);
|
|
53
46
|
}
|
|
54
47
|
else {
|
|
55
48
|
// Not highlighted - white text
|
|
56
|
-
return
|
|
49
|
+
return chalk.rgb(255, 255, 255)(char);
|
|
57
50
|
}
|
|
58
51
|
}
|
|
59
52
|
}).join(' ');
|
|
@@ -65,7 +58,7 @@ function drawSlotMachine(chars, spinning, highlightIndices = [], flash = false)
|
|
|
65
58
|
console.log(displayLine);
|
|
66
59
|
console.log(bottomBorder);
|
|
67
60
|
}
|
|
68
|
-
async function animateSlotMachine(config) {
|
|
61
|
+
export async function animateSlotMachine(config) {
|
|
69
62
|
const { finalHash, patternResult } = config;
|
|
70
63
|
const highlightIndices = patternResult?.highlightIndices || [];
|
|
71
64
|
// Clear screen
|
|
@@ -112,28 +105,28 @@ async function animateSlotMachine(config) {
|
|
|
112
105
|
console.clear();
|
|
113
106
|
drawSlotMachine(finalChars, false, highlightIndices, false);
|
|
114
107
|
}
|
|
115
|
-
async function animateSmallMode(config) {
|
|
108
|
+
export async function animateSmallMode(config) {
|
|
116
109
|
const { finalHash, patternResult } = config;
|
|
117
110
|
const highlightIndices = patternResult?.highlightIndices || [];
|
|
118
111
|
// Single line, rapid character flicker
|
|
119
|
-
process.stdout.write(
|
|
112
|
+
process.stdout.write(chalk.cyan('🎰 '));
|
|
120
113
|
for (let frame = 0; frame < 20; frame++) {
|
|
121
114
|
const chars = Array(7).fill(0).map(() => getRandomHexChar()).join('');
|
|
122
115
|
clearLine();
|
|
123
|
-
process.stdout.write(
|
|
116
|
+
process.stdout.write(chalk.cyan('🎰 ') + chalk.rgb(255, 255, 255)(chars));
|
|
124
117
|
await new Promise(resolve => setTimeout(resolve, 50));
|
|
125
118
|
}
|
|
126
119
|
// Final with highlighting - don't add newline, let the caller add result info
|
|
127
120
|
clearLine();
|
|
128
121
|
const display = finalHash.split('').map((char, i) => {
|
|
129
122
|
if (highlightIndices.includes(i)) {
|
|
130
|
-
return
|
|
123
|
+
return chalk.bgRgb(255, 255, 0).rgb(0, 0, 0).bold(char);
|
|
131
124
|
}
|
|
132
125
|
else {
|
|
133
|
-
return
|
|
126
|
+
return chalk.rgb(255, 255, 255)(char);
|
|
134
127
|
}
|
|
135
128
|
}).join('');
|
|
136
|
-
process.stdout.write(
|
|
129
|
+
process.stdout.write(chalk.cyan('🎰 ') + display);
|
|
137
130
|
// Don't write newline - let caller continue on same line
|
|
138
131
|
}
|
|
139
132
|
//# sourceMappingURL=slotMachine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotMachine.js","sourceRoot":"","sources":["../../src/animation/slotMachine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slotMachine.js","sourceRoot":"","sources":["../../src/animation/slotMachine.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isApiAvailable = isApiAvailable;
|
|
4
|
-
exports.sendPlayToAPI = sendPlayToAPI;
|
|
5
|
-
exports.getBalance = getBalance;
|
|
6
|
-
exports.createToken = createToken;
|
|
7
|
-
exports.verifyToken = verifyToken;
|
|
8
|
-
exports.logout = logout;
|
|
9
|
-
const config_1 = require("./config");
|
|
1
|
+
import { getApiUrl, getApiToken, isSyncEnabled } from './config.js';
|
|
10
2
|
// Fallback domains to try in order (if primary fails)
|
|
11
3
|
const FALLBACK_DOMAINS = [
|
|
12
4
|
'https://gitslotmachinecom-main-vilmm1.laravel.cloud',
|
|
@@ -17,19 +9,19 @@ function getHeaders() {
|
|
|
17
9
|
'Content-Type': 'application/json',
|
|
18
10
|
'Accept': 'application/json',
|
|
19
11
|
};
|
|
20
|
-
const token =
|
|
12
|
+
const token = getApiToken();
|
|
21
13
|
if (token) {
|
|
22
14
|
headers['Authorization'] = `Bearer ${token}`;
|
|
23
15
|
}
|
|
24
16
|
return headers;
|
|
25
17
|
}
|
|
26
18
|
// Check if API sync is enabled and available
|
|
27
|
-
function isApiAvailable() {
|
|
28
|
-
return
|
|
19
|
+
export function isApiAvailable() {
|
|
20
|
+
return isSyncEnabled() && getApiToken() !== null;
|
|
29
21
|
}
|
|
30
22
|
// Helper to try API call with fallback domains
|
|
31
23
|
async function fetchWithFallback(endpoint, options) {
|
|
32
|
-
const configuredUrl =
|
|
24
|
+
const configuredUrl = getApiUrl();
|
|
33
25
|
// Build list of URLs to try: configured URL first, then fallbacks (excluding duplicates)
|
|
34
26
|
const urlsToTry = [
|
|
35
27
|
configuredUrl,
|
|
@@ -53,7 +45,7 @@ async function fetchWithFallback(endpoint, options) {
|
|
|
53
45
|
return null;
|
|
54
46
|
}
|
|
55
47
|
// Send play data to API
|
|
56
|
-
async function sendPlayToAPI(data) {
|
|
48
|
+
export async function sendPlayToAPI(data) {
|
|
57
49
|
if (!isApiAvailable()) {
|
|
58
50
|
return null;
|
|
59
51
|
}
|
|
@@ -76,7 +68,7 @@ async function sendPlayToAPI(data) {
|
|
|
76
68
|
}
|
|
77
69
|
}
|
|
78
70
|
// Get balance from API
|
|
79
|
-
async function getBalance() {
|
|
71
|
+
export async function getBalance() {
|
|
80
72
|
if (!isApiAvailable()) {
|
|
81
73
|
return null;
|
|
82
74
|
}
|
|
@@ -96,7 +88,7 @@ async function getBalance() {
|
|
|
96
88
|
}
|
|
97
89
|
}
|
|
98
90
|
// Create API token (simplified - just pass github username)
|
|
99
|
-
async function createToken(githubUsername) {
|
|
91
|
+
export async function createToken(githubUsername) {
|
|
100
92
|
try {
|
|
101
93
|
const response = await fetchWithFallback('/auth/token', {
|
|
102
94
|
method: 'POST',
|
|
@@ -119,7 +111,7 @@ async function createToken(githubUsername) {
|
|
|
119
111
|
}
|
|
120
112
|
}
|
|
121
113
|
// Verify token is valid
|
|
122
|
-
async function verifyToken(token) {
|
|
114
|
+
export async function verifyToken(token) {
|
|
123
115
|
try {
|
|
124
116
|
const response = await fetchWithFallback('/auth/user', {
|
|
125
117
|
method: 'GET',
|
|
@@ -136,8 +128,8 @@ async function verifyToken(token) {
|
|
|
136
128
|
}
|
|
137
129
|
}
|
|
138
130
|
// Logout (revoke token)
|
|
139
|
-
async function logout() {
|
|
140
|
-
if (!
|
|
131
|
+
export async function logout() {
|
|
132
|
+
if (!getApiToken()) {
|
|
141
133
|
return true;
|
|
142
134
|
}
|
|
143
135
|
try {
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/balance.js
CHANGED
|
@@ -1,45 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.getBalance = getBalance;
|
|
37
|
-
exports.updateBalance = updateBalance;
|
|
38
|
-
exports.setBalance = setBalance;
|
|
39
|
-
exports.getRepoStats = getRepoStats;
|
|
40
|
-
const fs = __importStar(require("fs"));
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
|
-
const os = __importStar(require("os"));
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
43
4
|
const BALANCE_FILE = path.join(os.homedir(), '.git-slot-machine-balance.json');
|
|
44
5
|
function getRepoPath() {
|
|
45
6
|
try {
|
|
@@ -64,7 +25,7 @@ function loadBalance() {
|
|
|
64
25
|
function saveBalance(data) {
|
|
65
26
|
fs.writeFileSync(BALANCE_FILE, JSON.stringify(data, null, 2));
|
|
66
27
|
}
|
|
67
|
-
function getBalance() {
|
|
28
|
+
export function getBalance() {
|
|
68
29
|
const repoPath = getRepoPath() || 'global';
|
|
69
30
|
const data = loadBalance();
|
|
70
31
|
if (!data.repos[repoPath]) {
|
|
@@ -80,7 +41,7 @@ function getBalance() {
|
|
|
80
41
|
}
|
|
81
42
|
return data.repos[repoPath].balance;
|
|
82
43
|
}
|
|
83
|
-
function updateBalance(hash, payout) {
|
|
44
|
+
export function updateBalance(hash, payout) {
|
|
84
45
|
const repoPath = getRepoPath() || 'global';
|
|
85
46
|
const data = loadBalance();
|
|
86
47
|
if (!data.repos[repoPath]) {
|
|
@@ -106,7 +67,7 @@ function updateBalance(hash, payout) {
|
|
|
106
67
|
saveBalance(data);
|
|
107
68
|
return repo.balance;
|
|
108
69
|
}
|
|
109
|
-
function setBalance(newBalance) {
|
|
70
|
+
export function setBalance(newBalance) {
|
|
110
71
|
const repoPath = getRepoPath() || 'global';
|
|
111
72
|
const data = loadBalance();
|
|
112
73
|
if (!data.repos[repoPath]) {
|
|
@@ -123,7 +84,7 @@ function setBalance(newBalance) {
|
|
|
123
84
|
}
|
|
124
85
|
saveBalance(data);
|
|
125
86
|
}
|
|
126
|
-
function getRepoStats() {
|
|
87
|
+
export function getRepoStats() {
|
|
127
88
|
const repoPath = getRepoPath() || 'global';
|
|
128
89
|
const data = loadBalance();
|
|
129
90
|
return data.repos[repoPath] || null;
|
package/dist/balance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../src/balance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../src/balance.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -1,90 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.authLoginCommand = authLoginCommand;
|
|
7
|
-
exports.authLogoutCommand = authLogoutCommand;
|
|
8
|
-
exports.authStatusCommand = authStatusCommand;
|
|
9
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
-
const api_1 = require("../api");
|
|
11
|
-
const config_1 = require("../config");
|
|
12
|
-
async function authLoginCommand(githubUsername) {
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createToken, logout as apiLogout, verifyToken } from '../api.js';
|
|
3
|
+
import { setApiToken, clearApiToken, getApiToken, getApiUrl, setGitHubUsername } from '../config.js';
|
|
4
|
+
export async function authLoginCommand(githubUsername) {
|
|
13
5
|
try {
|
|
14
|
-
console.log(
|
|
6
|
+
console.log(chalk.dim(`Generating token for ${githubUsername}...`));
|
|
15
7
|
// Generate token from GitHub username
|
|
16
|
-
const token = await
|
|
8
|
+
const token = await createToken(githubUsername);
|
|
17
9
|
if (!token) {
|
|
18
|
-
console.error(
|
|
10
|
+
console.error(chalk.red('Failed to generate token. Please check your GitHub username.'));
|
|
19
11
|
process.exit(1);
|
|
20
12
|
}
|
|
21
13
|
// Save token and username
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
console.log(
|
|
25
|
-
console.log(
|
|
26
|
-
console.log(
|
|
14
|
+
setApiToken(token);
|
|
15
|
+
setGitHubUsername(githubUsername);
|
|
16
|
+
console.log(chalk.green('Successfully authenticated!'));
|
|
17
|
+
console.log(chalk.dim(`Token saved. API URL: ${getApiUrl()}`));
|
|
18
|
+
console.log(chalk.dim(`GitHub Username: ${githubUsername}`));
|
|
27
19
|
console.log();
|
|
28
|
-
console.log(
|
|
29
|
-
console.log(
|
|
30
|
-
console.log(
|
|
31
|
-
console.log(
|
|
32
|
-
console.log(
|
|
20
|
+
console.log(chalk.yellow('Data sent to server on each commit:'));
|
|
21
|
+
console.log(chalk.dim(' • Commit hash (7 and 40 character versions)'));
|
|
22
|
+
console.log(chalk.dim(' • Repository URL, owner, and name'));
|
|
23
|
+
console.log(chalk.dim(' • GitHub username'));
|
|
24
|
+
console.log(chalk.dim(' • Pattern type, payout, and balance'));
|
|
33
25
|
console.log();
|
|
34
|
-
console.log(
|
|
26
|
+
console.log(chalk.dim('To disable sync: git-slot-machine config set sync-enabled false'));
|
|
35
27
|
}
|
|
36
28
|
catch (error) {
|
|
37
|
-
console.error(
|
|
29
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
38
30
|
process.exit(1);
|
|
39
31
|
}
|
|
40
32
|
}
|
|
41
|
-
async function authLogoutCommand() {
|
|
33
|
+
export async function authLogoutCommand() {
|
|
42
34
|
try {
|
|
43
|
-
const token =
|
|
35
|
+
const token = getApiToken();
|
|
44
36
|
if (!token) {
|
|
45
|
-
console.log(
|
|
37
|
+
console.log(chalk.yellow('Not currently authenticated.'));
|
|
46
38
|
return;
|
|
47
39
|
}
|
|
48
40
|
// Try to revoke token on server
|
|
49
|
-
await (
|
|
41
|
+
await apiLogout();
|
|
50
42
|
// Clear local token
|
|
51
|
-
|
|
52
|
-
console.log(
|
|
43
|
+
clearApiToken();
|
|
44
|
+
console.log(chalk.green('Successfully logged out.'));
|
|
53
45
|
}
|
|
54
46
|
catch (error) {
|
|
55
|
-
console.error(
|
|
47
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
56
48
|
process.exit(1);
|
|
57
49
|
}
|
|
58
50
|
}
|
|
59
|
-
async function authStatusCommand() {
|
|
51
|
+
export async function authStatusCommand() {
|
|
60
52
|
try {
|
|
61
|
-
const token =
|
|
62
|
-
const apiUrl =
|
|
53
|
+
const token = getApiToken();
|
|
54
|
+
const apiUrl = getApiUrl();
|
|
63
55
|
if (!token) {
|
|
64
|
-
console.log(
|
|
65
|
-
console.log(
|
|
56
|
+
console.log(chalk.yellow('Not authenticated.'));
|
|
57
|
+
console.log(chalk.dim(`API URL: ${apiUrl}`));
|
|
66
58
|
console.log();
|
|
67
59
|
console.log('To authenticate, run:');
|
|
68
|
-
console.log(
|
|
60
|
+
console.log(chalk.cyan(' git-slot-machine auth login <your-github-username>'));
|
|
69
61
|
return;
|
|
70
62
|
}
|
|
71
63
|
// Verify token is still valid
|
|
72
|
-
const isValid = await
|
|
64
|
+
const isValid = await verifyToken(token);
|
|
73
65
|
if (isValid) {
|
|
74
|
-
console.log(
|
|
75
|
-
console.log(
|
|
76
|
-
console.log(
|
|
66
|
+
console.log(chalk.green('Authenticated'));
|
|
67
|
+
console.log(chalk.dim(`API URL: ${apiUrl}`));
|
|
68
|
+
console.log(chalk.dim(`Token: ${token.substring(0, 10)}...`));
|
|
77
69
|
}
|
|
78
70
|
else {
|
|
79
|
-
console.log(
|
|
80
|
-
console.log(
|
|
71
|
+
console.log(chalk.red('Authentication expired or invalid.'));
|
|
72
|
+
console.log(chalk.dim(`API URL: ${apiUrl}`));
|
|
81
73
|
console.log();
|
|
82
74
|
console.log('Please login again:');
|
|
83
|
-
console.log(
|
|
75
|
+
console.log(chalk.cyan(' git-slot-machine auth login <your-github-username>'));
|
|
84
76
|
}
|
|
85
77
|
}
|
|
86
78
|
catch (error) {
|
|
87
|
-
console.error(
|
|
79
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
88
80
|
process.exit(1);
|
|
89
81
|
}
|
|
90
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/balance.js
CHANGED
|
@@ -1,31 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.balanceCommand = balanceCommand;
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const balance_1 = require("../balance");
|
|
9
|
-
function balanceCommand() {
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getRepoStats } from '../balance.js';
|
|
3
|
+
export function balanceCommand() {
|
|
10
4
|
try {
|
|
11
|
-
const stats =
|
|
5
|
+
const stats = getRepoStats();
|
|
12
6
|
if (!stats) {
|
|
13
|
-
console.log(
|
|
14
|
-
console.log(
|
|
7
|
+
console.log(chalk.yellow('No balance data for this repository'));
|
|
8
|
+
console.log(chalk.dim('Run a commit or use "git-slot-machine spin" to start playing'));
|
|
15
9
|
return;
|
|
16
10
|
}
|
|
17
11
|
console.log();
|
|
18
|
-
console.log(
|
|
19
|
-
console.log(
|
|
20
|
-
console.log(
|
|
21
|
-
console.log(
|
|
22
|
-
console.log(
|
|
23
|
-
console.log(
|
|
24
|
-
console.log(
|
|
12
|
+
console.log(chalk.cyan.bold('Repository Stats'));
|
|
13
|
+
console.log(chalk.dim('━'.repeat(40)));
|
|
14
|
+
console.log(chalk.white(`Balance: ${stats.balance >= 0 ? chalk.green(stats.balance) : chalk.red(stats.balance)} points`));
|
|
15
|
+
console.log(chalk.white(`Total Commits: ${stats.totalCommits}`));
|
|
16
|
+
console.log(chalk.white(`Total Winnings: ${chalk.yellow(stats.totalWinnings)} points`));
|
|
17
|
+
console.log(chalk.white(`Biggest Win: ${chalk.yellow(stats.biggestWin)} points`));
|
|
18
|
+
console.log(chalk.white(`Last Commit: ${chalk.dim(stats.lastCommit)}`));
|
|
25
19
|
console.log();
|
|
26
20
|
}
|
|
27
21
|
catch (error) {
|
|
28
|
-
console.error(
|
|
22
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
29
23
|
process.exit(1);
|
|
30
24
|
}
|
|
31
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACjI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|