@trading-tazos-game/cli 1.0.3 → 2.0.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 +80 -83
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +25 -15
- package/dist/client.js +84 -12
- package/dist/client.js.map +1 -1
- package/dist/commands/battle.js +11 -3
- package/dist/commands/battle.js.map +1 -1
- package/dist/commands/stats.js +2 -2
- package/dist/commands/stats.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/game-core.d.ts +15 -0
- package/dist/lib/game-core.js +25 -0
- package/dist/lib/game-core.js.map +1 -0
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -1,137 +1,134 @@
|
|
|
1
|
-
# 🎴 @trading-tazos-game/cli
|
|
1
|
+
# 🎴 TTG CLI — @trading-tazos-game/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Official CLI for the Trading Tazos Game** — search, battle, and explore 351 digital tazos from your terminal.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@trading-tazos-game/cli)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
[](https://www.npmjs.com/package/@trading-tazos-game/cli)
|
|
10
|
-
[](./LICENSE)
|
|
11
|
-
[](https://nodejs.org)
|
|
12
|
-
[](https://github.com/smouj/trading-tazos-game-cli/pulls)
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Install
|
|
8
|
+
## Quick Start
|
|
17
9
|
|
|
18
10
|
```bash
|
|
19
|
-
|
|
11
|
+
npx @trading-tazos-game/cli search lumipuff
|
|
20
12
|
```
|
|
21
13
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## Quick Start
|
|
14
|
+
Or install globally:
|
|
25
15
|
|
|
26
16
|
```bash
|
|
27
|
-
|
|
28
|
-
tazos search lumipuff
|
|
29
|
-
|
|
30
|
-
# Get full battle stats
|
|
31
|
-
tazos info cipherion
|
|
32
|
-
|
|
33
|
-
# See collection statistics
|
|
17
|
+
npm install -g @trading-tazos-game/cli
|
|
34
18
|
tazos stats
|
|
35
|
-
|
|
36
|
-
# Top 10 by attack power
|
|
37
|
-
tazos top --stat attack
|
|
38
|
-
|
|
39
|
-
# Simulate a battle (deterministic — same seed = same result!)
|
|
40
|
-
tazos battle --player 5 --opponent 5 --seed 42
|
|
41
19
|
```
|
|
42
20
|
|
|
43
21
|
## Commands
|
|
44
22
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
| `tazos search [query]` | Search tazos by name, slug, or number |
|
|
48
|
-
| `tazos info <name>` | Show detailed 9-stat breakdown with bars |
|
|
49
|
-
| `tazos stats` | Collection statistics by franchise, rarity, condition |
|
|
50
|
-
| `tazos top` | Leaderboard by any stat (attack, defense, bounce...) |
|
|
51
|
-
| `tazos battle` | Simulate a full battle with physics and captures |
|
|
52
|
-
|
|
53
|
-
### Search Options
|
|
23
|
+
### `tazos search [query]`
|
|
24
|
+
Search tazos by name, slug, or number.
|
|
54
25
|
|
|
26
|
+
```bash
|
|
27
|
+
tazos search cipherion # Search by name
|
|
28
|
+
tazos search --franchise minimon --rarity legendary # Filter
|
|
29
|
+
tazos search --stats brotalix # Show stat breakdown
|
|
30
|
+
tazos search -l 50 # More results
|
|
55
31
|
```
|
|
56
|
-
tazos search [query] [options]
|
|
57
32
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
33
|
+
### `tazos info <name>`
|
|
34
|
+
Detailed stats for a specific tazo.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
tazos info 001-brotalix
|
|
38
|
+
tazos info cipherion
|
|
62
39
|
```
|
|
63
40
|
|
|
64
|
-
###
|
|
41
|
+
### `tazos stats`
|
|
42
|
+
Collection overview — totals, breakdowns by franchise and rarity.
|
|
65
43
|
|
|
44
|
+
```bash
|
|
45
|
+
tazos stats
|
|
66
46
|
```
|
|
67
|
-
tazos battle [options]
|
|
68
47
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
-s, --seed <n> Random seed for reproducible battles
|
|
72
|
-
-f, --fast Skip detailed turn log
|
|
73
|
-
```
|
|
48
|
+
### `tazos top`
|
|
49
|
+
Leaderboard by stat.
|
|
74
50
|
|
|
75
|
-
|
|
51
|
+
```bash
|
|
52
|
+
tazos top --stat attack --limit 10
|
|
53
|
+
tazos top --stat defense --franchise cybermon
|
|
54
|
+
```
|
|
76
55
|
|
|
77
|
-
|
|
56
|
+
### `tazos battle`
|
|
57
|
+
Simulate a battle between two random teams.
|
|
78
58
|
|
|
79
59
|
```bash
|
|
80
|
-
|
|
60
|
+
tazos battle # 5v5 battle
|
|
61
|
+
tazos battle --player 8 --opponent 8 # 8v8
|
|
62
|
+
tazos battle --seed 42 --fast # Reproducible + fast mode
|
|
81
63
|
```
|
|
82
64
|
|
|
83
|
-
|
|
65
|
+
## Options
|
|
84
66
|
|
|
85
|
-
|
|
67
|
+
| Option | Description |
|
|
68
|
+
|--------|-------------|
|
|
69
|
+
| `-f, --franchise <slug>` | Filter: minimon, dracobell, cybermon |
|
|
70
|
+
| `-r, --rarity <rarity>` | Filter: common, uncommon, rare, ultra, legendary |
|
|
71
|
+
| `-s, --stats` | Show full 9-stat breakdown |
|
|
72
|
+
| `-l, --limit <n>` | Max results (default: 15) |
|
|
73
|
+
| `--sortBy <stat>` | Sort by: attack, defense, spin, weight, etc. |
|
|
74
|
+
| `--sortOrder asc/desc` | Sort direction |
|
|
86
75
|
|
|
87
|
-
|
|
88
|
-
- 🎲 **Deterministic Battles** — Seed-based RNG, same seed = same outcome every time
|
|
89
|
-
- 📊 **Stat Bars** — ASCII bar charts for visual stat comparison
|
|
90
|
-
- 🌈 **Franchise Colors** — Minimon yellow, Dracobell orange/red, Cybermon cyan
|
|
91
|
-
- ⭐ **Rarity Stars** — ★ common through ★★★★★ legendary
|
|
92
|
-
- 🔄 **Reproducible** — Every battle can be replayed with `--seed`
|
|
76
|
+
## Battle Stats
|
|
93
77
|
|
|
94
|
-
|
|
78
|
+
Each tazo has 9 stats used in battles:
|
|
79
|
+
|
|
80
|
+
| Stat | Label | Role |
|
|
81
|
+
|------|-------|------|
|
|
82
|
+
| Attack | ATK | Raw damage potential |
|
|
83
|
+
| Defense | DEF | Damage reduction |
|
|
84
|
+
| Resistance | RES | Status/effect resistance |
|
|
85
|
+
| Weight | WGT | Physical mass (momentum) |
|
|
86
|
+
| Stability | STB | Resistance to knockback |
|
|
87
|
+
| Spin | SPN | Rotation speed |
|
|
88
|
+
| Control | CTL | Trajectory control |
|
|
89
|
+
| Bounce | BNC | Rebound elasticity |
|
|
90
|
+
| Precision | PRC | Accuracy |
|
|
95
91
|
|
|
96
|
-
|
|
92
|
+
## Game Rules (from game-core.ts)
|
|
97
93
|
|
|
98
|
-
-
|
|
99
|
-
-
|
|
94
|
+
- **Deck size**: 20 tazos
|
|
95
|
+
- **Starting hand**: 5 cards
|
|
96
|
+
- **Draw per turn**: 1 card
|
|
97
|
+
- **Max hand size**: 10 cards
|
|
100
98
|
|
|
101
|
-
|
|
99
|
+
## API
|
|
102
100
|
|
|
103
|
-
|
|
101
|
+
The CLI connects to the public TTG Backend API:
|
|
104
102
|
|
|
105
|
-
```
|
|
106
|
-
|
|
103
|
+
```
|
|
104
|
+
https://api.tradingtazosgame.com
|
|
107
105
|
```
|
|
108
106
|
|
|
109
|
-
|
|
107
|
+
No authentication required for public data endpoints (`/api/tazos`, `/api/stats`).
|
|
110
108
|
|
|
111
|
-
|
|
112
|
-
import { api } from "@trading-tazos-game/cli"
|
|
109
|
+
Set `TAZOS_API_URL` to use a custom server:
|
|
113
110
|
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
```bash
|
|
112
|
+
TAZOS_API_URL=http://localhost:3004 tazos stats
|
|
116
113
|
```
|
|
117
114
|
|
|
118
|
-
See `src/index.ts` for the full public API surface.
|
|
119
|
-
|
|
120
115
|
## Development
|
|
121
116
|
|
|
122
117
|
```bash
|
|
123
|
-
git clone https://github.com/smouj/trading-tazos-game-cli
|
|
118
|
+
git clone https://github.com/smouj/trading-tazos-game-cli
|
|
124
119
|
cd trading-tazos-game-cli
|
|
125
120
|
npm install
|
|
126
121
|
npm run build
|
|
127
|
-
|
|
122
|
+
npm start
|
|
128
123
|
```
|
|
129
124
|
|
|
130
|
-
##
|
|
125
|
+
## Links
|
|
131
126
|
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
-
|
|
127
|
+
- **Play now**: https://play.tradingtazosgame.com
|
|
128
|
+
- **Website**: https://tradingtazosgame.com
|
|
129
|
+
- **ProductHunt**: https://www.producthunt.com/products/trading-tazos-game-ttg
|
|
130
|
+
- **Source**: https://github.com/smouj/trading-tazos-game-cli
|
|
131
|
+
- **Engine**: https://github.com/smouj/TTG-Engine
|
|
135
132
|
|
|
136
133
|
## License
|
|
137
134
|
|
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,7 @@ import { infoCommand } from "./commands/info.js";
|
|
|
6
6
|
import { statsCommand } from "./commands/stats.js";
|
|
7
7
|
import { battleCommand } from "./commands/battle.js";
|
|
8
8
|
import { topCommand } from "./commands/top.js";
|
|
9
|
+
import { DECK_SIZE, STARTING_HAND_SIZE, DRAW_PER_TURN } from "./lib/game-core.js";
|
|
9
10
|
import pkg from "../package.json" with { type: "json" };
|
|
10
11
|
const program = new Command();
|
|
11
12
|
program
|
|
@@ -20,7 +21,8 @@ ${chalk.dim("Examples:")}
|
|
|
20
21
|
${chalk.cyan("$ tazos top --stat attack")} ${chalk.dim("Top 10 tazos by attack")}
|
|
21
22
|
${chalk.cyan("$ tazos battle --player 5")} ${chalk.dim("Simulate a quick battle")}
|
|
22
23
|
|
|
23
|
-
${chalk.dim("
|
|
24
|
+
${chalk.dim("Game Rules:")} Deck ${DECK_SIZE} cards · Starting hand ${STARTING_HAND_SIZE} · Draw ${DRAW_PER_TURN}/turn
|
|
25
|
+
${chalk.dim("API:")} https://api.tradingtazosgame.com
|
|
24
26
|
${chalk.dim("Repo:")} https://github.com/smouj/trading-tazos-game-cli
|
|
25
27
|
`);
|
|
26
28
|
program.addCommand(searchCommand());
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;KACnI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,WAAW,CAAC,OAAO,EAAE;EACtB,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAC5F,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACxF,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;;EAEvF,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;EACjB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;CACnB,CAAC,CAAA;AAEF,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAA;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACjF,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;KACnI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,WAAW,CAAC,OAAO,EAAE;EACtB,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAC5F,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACxF,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;;EAEvF,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,SAAS,0BAA0B,kBAAkB,WAAW,aAAa;EAC/G,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;EACjB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;CACnB,CAAC,CAAA;AAEF,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAA;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export interface Tazo {
|
|
2
2
|
id: string;
|
|
3
|
-
name: string
|
|
4
|
-
|
|
5
|
-
number: string | null;
|
|
6
|
-
slug: string;
|
|
3
|
+
name: string;
|
|
4
|
+
image: string;
|
|
7
5
|
rarity: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
color: string;
|
|
7
|
+
glow: string;
|
|
8
|
+
power: number;
|
|
9
|
+
description: string;
|
|
10
|
+
series: string;
|
|
11
|
+
isCanonical: boolean;
|
|
12
|
+
source: "static" | "db";
|
|
13
13
|
attack: number;
|
|
14
14
|
defense: number;
|
|
15
15
|
resistance: number;
|
|
@@ -19,8 +19,16 @@ export interface Tazo {
|
|
|
19
19
|
control: number;
|
|
20
20
|
bounce: number;
|
|
21
21
|
precision: number;
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
franchise?: string;
|
|
23
|
+
franchiseSlug?: string;
|
|
24
|
+
number?: string;
|
|
25
|
+
slug?: string;
|
|
26
|
+
displayName?: string;
|
|
27
|
+
condition?: string;
|
|
28
|
+
collection?: string;
|
|
29
|
+
imageUrl?: string;
|
|
30
|
+
role?: string;
|
|
31
|
+
isOwned?: boolean;
|
|
24
32
|
}
|
|
25
33
|
export interface TazoListResponse {
|
|
26
34
|
tazos: Tazo[];
|
|
@@ -28,26 +36,28 @@ export interface TazoListResponse {
|
|
|
28
36
|
}
|
|
29
37
|
export interface StatsResponse {
|
|
30
38
|
totalTazos: number;
|
|
31
|
-
ownedTazos
|
|
39
|
+
ownedTazos?: number;
|
|
32
40
|
totalFranchises: number;
|
|
33
41
|
totalCollections: number;
|
|
34
42
|
byRarity: Record<string, number>;
|
|
35
|
-
byCondition
|
|
43
|
+
byCondition?: Record<string, number>;
|
|
36
44
|
byFranchise: Record<string, number>;
|
|
37
45
|
topAttack: Tazo | null;
|
|
38
46
|
topDefense: Tazo | null;
|
|
39
47
|
}
|
|
40
48
|
export interface CollectionResponse {
|
|
41
|
-
items: {
|
|
49
|
+
items: Array<{
|
|
42
50
|
id: string;
|
|
43
51
|
quantity: number;
|
|
44
52
|
isFavorite: boolean;
|
|
45
53
|
acquiredAt: string;
|
|
46
54
|
tazo: Tazo;
|
|
47
|
-
}
|
|
55
|
+
}>;
|
|
48
56
|
total: number;
|
|
49
57
|
franchiseSummary: Record<string, number>;
|
|
50
58
|
}
|
|
59
|
+
/** Rarity EN → ES for API queries (maps EN user input to Backend ES) */
|
|
60
|
+
export declare const RARITY_EN_TO_ES: Record<string, string>;
|
|
51
61
|
export declare const api: {
|
|
52
62
|
search(query: string, opts?: {
|
|
53
63
|
franchise?: string;
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
|
-
const BASE_URL = process.env.TAZOS_API_URL || "https://tradingtazosgame.com";
|
|
1
|
+
const BASE_URL = process.env.TAZOS_API_URL || "https://api.tradingtazosgame.com";
|
|
2
2
|
const AUTH_TOKEN = process.env.TAZOS_AUTH_TOKEN || "";
|
|
3
|
+
/** Rarity mapping: Backend ES → CLI EN */
|
|
4
|
+
const RARITY_ES_TO_EN = {
|
|
5
|
+
comun: "common",
|
|
6
|
+
raro: "rare",
|
|
7
|
+
epico: "ultra",
|
|
8
|
+
legendario: "legendary",
|
|
9
|
+
};
|
|
10
|
+
/** Rarity EN → ES for API queries (maps EN user input to Backend ES) */
|
|
11
|
+
export const RARITY_EN_TO_ES = {
|
|
12
|
+
common: "comun",
|
|
13
|
+
uncommon: "raro",
|
|
14
|
+
rare: "raro",
|
|
15
|
+
ultra: "epico",
|
|
16
|
+
legendary: "legendario",
|
|
17
|
+
};
|
|
18
|
+
/** Compute role from stat profile */
|
|
19
|
+
function computeRole(t) {
|
|
20
|
+
const stats = { attack: t.attack, defense: t.defense, spin: t.spin, precision: t.precision, resistance: t.resistance };
|
|
21
|
+
const top = Object.entries(stats).reduce((a, b) => (a[1] > b[1] ? a : b));
|
|
22
|
+
if (top[1] <= 50)
|
|
23
|
+
return "balanced";
|
|
24
|
+
switch (top[0]) {
|
|
25
|
+
case "attack": return "offensive";
|
|
26
|
+
case "defense": return "defensive";
|
|
27
|
+
case "spin": return "spinner";
|
|
28
|
+
case "precision": return "sniper";
|
|
29
|
+
case "resistance": return "tank";
|
|
30
|
+
default: return "balanced";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Enrich an API tazo with CLI-compatible derived fields */
|
|
34
|
+
function enrichTazo(t) {
|
|
35
|
+
const number = t.id.match(/^\d+/)?.[0] || t.id.split("-")[0] || "";
|
|
36
|
+
return {
|
|
37
|
+
...t,
|
|
38
|
+
rarity: RARITY_ES_TO_EN[t.rarity] || t.rarity,
|
|
39
|
+
franchise: t.series,
|
|
40
|
+
franchiseSlug: t.series,
|
|
41
|
+
number,
|
|
42
|
+
slug: t.id,
|
|
43
|
+
displayName: t.name,
|
|
44
|
+
condition: "mint",
|
|
45
|
+
collection: t.series.charAt(0).toUpperCase() + t.series.slice(1),
|
|
46
|
+
imageUrl: t.image?.startsWith("http") ? t.image : `https://tradingtazosgame.com${t.image}`,
|
|
47
|
+
role: computeRole(t),
|
|
48
|
+
isOwned: false,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
3
51
|
async function apiGet(path) {
|
|
4
52
|
const headers = { "Accept": "application/json" };
|
|
5
53
|
if (AUTH_TOKEN) {
|
|
@@ -19,28 +67,52 @@ export const api = {
|
|
|
19
67
|
if (query)
|
|
20
68
|
params.set("search", query);
|
|
21
69
|
if (opts?.franchise && opts.franchise !== "all")
|
|
22
|
-
params.set("
|
|
23
|
-
if (opts?.rarity && opts.rarity !== "all")
|
|
24
|
-
params.set("rarity", opts.rarity);
|
|
70
|
+
params.set("series", opts.franchise);
|
|
71
|
+
if (opts?.rarity && opts.rarity !== "all") {
|
|
72
|
+
params.set("rarity", RARITY_EN_TO_ES[opts.rarity] || opts.rarity);
|
|
73
|
+
}
|
|
25
74
|
params.set("limit", String(opts?.limit || 20));
|
|
26
|
-
|
|
75
|
+
const data = await apiGet(`/tazos?${params}`);
|
|
76
|
+
return { tazos: data.tazos.map(enrichTazo), total: data.total };
|
|
27
77
|
},
|
|
28
78
|
async getBySlug(slug) {
|
|
29
|
-
const params = new URLSearchParams({ search: slug, limit: "
|
|
79
|
+
const params = new URLSearchParams({ search: slug, limit: "5" });
|
|
30
80
|
const data = await apiGet(`/tazos?${params}`);
|
|
31
|
-
|
|
81
|
+
const enriched = data.tazos.map(enrichTazo);
|
|
82
|
+
const match = enriched.find((t) => t.slug === slug || t.id === slug || t.slug?.includes(slug));
|
|
83
|
+
return match || enriched[0] || null;
|
|
32
84
|
},
|
|
33
85
|
async stats() {
|
|
34
|
-
|
|
86
|
+
const data = await apiGet("/stats");
|
|
87
|
+
// Map rarity keys from ES to EN
|
|
88
|
+
const byRarity = {};
|
|
89
|
+
for (const [k, v] of Object.entries(data.byRarity)) {
|
|
90
|
+
byRarity[RARITY_ES_TO_EN[k] || k] = typeof v === "number" ? v : 0;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
totalTazos: data.totalTazos,
|
|
94
|
+
totalFranchises: data.totalFranchises,
|
|
95
|
+
totalCollections: data.totalCollections,
|
|
96
|
+
byRarity,
|
|
97
|
+
byFranchise: data.byFranchise,
|
|
98
|
+
topAttack: data.topAttack ? enrichTazo(data.topAttack) : null,
|
|
99
|
+
topDefense: data.topDefense ? enrichTazo(data.topDefense) : null,
|
|
100
|
+
};
|
|
35
101
|
},
|
|
36
102
|
async topTazos(stat, limit = 10) {
|
|
37
|
-
const params = new URLSearchParams({
|
|
38
|
-
|
|
103
|
+
const params = new URLSearchParams({
|
|
104
|
+
sortBy: stat,
|
|
105
|
+
sortOrder: "desc",
|
|
106
|
+
limit: String(limit),
|
|
107
|
+
});
|
|
108
|
+
const data = await apiGet(`/tazos?${params}`);
|
|
109
|
+
return { tazos: data.tazos.map(enrichTazo), total: data.total };
|
|
39
110
|
},
|
|
40
111
|
async random(limit = 6) {
|
|
41
|
-
const params = new URLSearchParams({ limit: "
|
|
112
|
+
const params = new URLSearchParams({ limit: "50" });
|
|
42
113
|
const data = await apiGet(`/tazos?${params}`);
|
|
43
|
-
const
|
|
114
|
+
const enriched = data.tazos.map(enrichTazo);
|
|
115
|
+
const shuffled = [...enriched].sort(() => Math.random() - 0.5);
|
|
44
116
|
return { tazos: shuffled.slice(0, limit), total: limit };
|
|
45
117
|
},
|
|
46
118
|
};
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/battle.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Command } from "commander";
|
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import { api } from "../client.js";
|
|
4
4
|
import { formatBattleCard, banner } from "../lib/format.js";
|
|
5
|
+
import { DECK_SIZE, STARTING_HAND_SIZE, DRAW_PER_TURN } from "../lib/game-core.js";
|
|
5
6
|
/** Deterministic pseudo-random - same seed = same battle */
|
|
6
7
|
function mulberry32(seed) {
|
|
7
8
|
return () => { seed |= 0; seed = seed + 0x6D2B79F5 | 0; let t = Math.imul(seed ^ seed >>> 15, 1 | seed); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; };
|
|
@@ -91,11 +92,18 @@ function simulateBattle(playerTazos, opponentTazos, seed) {
|
|
|
91
92
|
}
|
|
92
93
|
export function battleCommand() {
|
|
93
94
|
return new Command("battle")
|
|
94
|
-
.description(
|
|
95
|
-
|
|
96
|
-
.option("-
|
|
95
|
+
.description(`Simulate a battle between two teams of tazos ` +
|
|
96
|
+
`(official rules: ${DECK_SIZE}-card deck, ${STARTING_HAND_SIZE}-card starting hand, ${DRAW_PER_TURN} draw/turn)`)
|
|
97
|
+
.option("-p, --player <n>", "Player team size (2-10)", "5")
|
|
98
|
+
.option("-o, --opponent <n>", "Opponent team size (2-10)", "5")
|
|
97
99
|
.option("-s, --seed <n>", "Random seed for reproducible battles")
|
|
98
100
|
.option("-f, --fast", "Skip detailed turn log")
|
|
101
|
+
.addHelpText("after", `
|
|
102
|
+
${chalk.dim("Game Rules:")}
|
|
103
|
+
${chalk.dim(`Official deck size:`)} ${chalk.bold(String(DECK_SIZE))}
|
|
104
|
+
${chalk.dim(`Starting hand: `)} ${chalk.bold(String(STARTING_HAND_SIZE))} cards
|
|
105
|
+
${chalk.dim(`Draw per turn: `)} ${chalk.bold(String(DRAW_PER_TURN))} card
|
|
106
|
+
`)
|
|
99
107
|
.action(async (opts) => {
|
|
100
108
|
try {
|
|
101
109
|
const pSize = Math.min(Math.max(parseInt(opts.player), 2), 10);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battle.js","sourceRoot":"","sources":["../../src/commands/battle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"battle.js","sourceRoot":"","sources":["../../src/commands/battle.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/stats.js
CHANGED
|
@@ -11,9 +11,9 @@ export function statsCommand() {
|
|
|
11
11
|
console.log(banner("Collection Statistics"));
|
|
12
12
|
console.log("");
|
|
13
13
|
// KPI cards
|
|
14
|
-
const completionPct = s.totalTazos > 0 ? ((s.ownedTazos / s.totalTazos) * 100).toFixed(1) : "0";
|
|
14
|
+
const completionPct = s.totalTazos > 0 ? (((s.ownedTazos ?? 0) / s.totalTazos) * 100).toFixed(1) : "0";
|
|
15
15
|
console.log(` ${chalk.bold("Total Tazos:")} ${chalk.yellowBright(s.totalTazos)}`);
|
|
16
|
-
console.log(` ${chalk.bold("Owned:")} ${chalk.green(fmt(s.ownedTazos))} (${completionPct}%)`);
|
|
16
|
+
console.log(` ${chalk.bold("Owned:")} ${chalk.green(fmt((s.ownedTazos ?? 0)))} (${completionPct}%)`);
|
|
17
17
|
console.log(` ${chalk.bold("Franchises:")} ${chalk.cyan(s.totalFranchises)}`);
|
|
18
18
|
console.log(` ${chalk.bold("Collections:")} ${chalk.magenta(s.totalCollections)}`);
|
|
19
19
|
// By franchise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE5D,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAA;YAE3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEf,YAAY;YACZ,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { api } from "./client.js";
|
|
2
2
|
export type { Tazo, TazoListResponse, StatsResponse, CollectionResponse } from "./client.js";
|
|
3
3
|
export { STAT_CONFIG, RARITY_STYLE, FRANCHISE_COLOR, formatTazo, formatBattleCard, statBar, banner, fmt } from "./lib/format.js";
|
|
4
|
+
export { DECK_SIZE, STARTING_HAND_SIZE, DRAW_PER_TURN, MAX_HAND_SIZE, GAME_RULES } from "./lib/game-core.js";
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { api } from "./client.js";
|
|
2
2
|
export { STAT_CONFIG, RARITY_STYLE, FRANCHISE_COLOR, formatTazo, formatBattleCard, statBar, banner, fmt } from "./lib/format.js";
|
|
3
|
+
export { DECK_SIZE, STARTING_HAND_SIZE, DRAW_PER_TURN, MAX_HAND_SIZE, GAME_RULES } from "./lib/game-core.js";
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChI,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Required deck size for competitive play */
|
|
2
|
+
export declare const DECK_SIZE = 20;
|
|
3
|
+
/** Cards drawn at battle start */
|
|
4
|
+
export declare const STARTING_HAND_SIZE = 5;
|
|
5
|
+
/** Cards drawn each turn */
|
|
6
|
+
export declare const DRAW_PER_TURN = 1;
|
|
7
|
+
/** Maximum cards allowed in hand */
|
|
8
|
+
export declare const MAX_HAND_SIZE = 10;
|
|
9
|
+
/** All game rules in a single const object */
|
|
10
|
+
export declare const GAME_RULES: {
|
|
11
|
+
readonly deckSize: 20;
|
|
12
|
+
readonly startingHandSize: 5;
|
|
13
|
+
readonly drawPerTurn: 1;
|
|
14
|
+
readonly maxHandSize: 10;
|
|
15
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// game-core.ts — Core game constants
|
|
3
|
+
//
|
|
4
|
+
// Kept in sync manually with:
|
|
5
|
+
// Trading-Tazos-Game/src/lib/game-core/types.ts
|
|
6
|
+
//
|
|
7
|
+
// These define the canonical game rules shared between
|
|
8
|
+
// the web app and CLI. No API/UI dependencies.
|
|
9
|
+
// ============================================================
|
|
10
|
+
/** Required deck size for competitive play */
|
|
11
|
+
export const DECK_SIZE = 20;
|
|
12
|
+
/** Cards drawn at battle start */
|
|
13
|
+
export const STARTING_HAND_SIZE = 5;
|
|
14
|
+
/** Cards drawn each turn */
|
|
15
|
+
export const DRAW_PER_TURN = 1;
|
|
16
|
+
/** Maximum cards allowed in hand */
|
|
17
|
+
export const MAX_HAND_SIZE = 10;
|
|
18
|
+
/** All game rules in a single const object */
|
|
19
|
+
export const GAME_RULES = {
|
|
20
|
+
deckSize: DECK_SIZE,
|
|
21
|
+
startingHandSize: STARTING_HAND_SIZE,
|
|
22
|
+
drawPerTurn: DRAW_PER_TURN,
|
|
23
|
+
maxHandSize: MAX_HAND_SIZE,
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=game-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-core.js","sourceRoot":"","sources":["../../src/lib/game-core.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qCAAqC;AACrC,EAAE;AACF,8BAA8B;AAC9B,kDAAkD;AAClD,EAAE;AACF,uDAAuD;AACvD,+CAA+C;AAC/C,+DAA+D;AAE/D,8CAA8C;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAA;AAE3B,kCAAkC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAEnC,4BAA4B;AAC5B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAA;AAE9B,oCAAoC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAA;AAE/B,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,SAAS;IACnB,gBAAgB,EAAE,kBAAkB;IACpC,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;CAClB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trading-tazos-game/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Official CLI for the Trading Tazos Game — search, battle, and manage your digital tazo collection from the terminal",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Trading Tazos Game <support@tradingtazosgame.com>",
|
|
7
7
|
"homepage": "https://tradingtazosgame.com",
|
|
8
|
-
"repository":
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/smouj/trading-tazos-game-cli.git"
|
|
11
|
+
},
|
|
9
12
|
"bugs": "https://github.com/smouj/trading-tazos-game-cli/issues",
|
|
10
13
|
"keywords": [
|
|
11
14
|
"tazos",
|
|
@@ -25,7 +28,7 @@
|
|
|
25
28
|
"main": "./dist/index.js",
|
|
26
29
|
"types": "./dist/index.d.ts",
|
|
27
30
|
"bin": {
|
|
28
|
-
"tazos": "
|
|
31
|
+
"tazos": "dist/cli.js"
|
|
29
32
|
},
|
|
30
33
|
"files": [
|
|
31
34
|
"dist/",
|