@nightowne/tas-cli 2.0.0 β†’ 2.3.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 CHANGED
@@ -1,183 +1,377 @@
1
- # Telegram as Storage
1
+ <p align="center">
2
+ <img src="assets/demo.gif" alt="TAS β€” Telegram as Storage" width="640">
3
+ </p>
4
+
5
+ <h1 align="center">
6
+ πŸ“¦ TAS β€” Telegram as Storage
7
+ </h1>
2
8
 
3
- [![CI](https://github.com/ixchio/tas/actions/workflows/ci.yml/badge.svg)](https://github.com/ixchio/tas/actions/workflows/ci.yml)
4
- [![npm](https://img.shields.io/npm/v/@nightowne/tas-cli)](https://www.npmjs.com/package/@nightowne/tas-cli)
5
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
9
+ <h3 align="center">
10
+ Turn Telegram into your personal encrypted cloud drive.<br>
11
+ Free forever. Zero-knowledge. No credit card. No limits.
12
+ </h3>
6
13
 
7
14
  <p align="center">
8
- <img src="assets/demo.gif" alt="Demo" width="600">
15
+ <a href="https://github.com/ixchio/tas/actions/workflows/ci.yml"><img src="https://github.com/ixchio/tas/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
16
+ <a href="https://www.npmjs.com/package/@nightowne/tas-cli"><img src="https://img.shields.io/npm/v/@nightowne/tas-cli?color=cb3837&label=npm" alt="npm version"></a>
17
+ <a href="https://www.npmjs.com/package/@nightowne/tas-cli"><img src="https://img.shields.io/npm/dm/@nightowne/tas-cli?color=blue" alt="Downloads"></a>
18
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License: MIT"></a>
19
+ <a href="https://github.com/ixchio/tas/stargazers"><img src="https://img.shields.io/github/stars/ixchio/tas?style=social" alt="GitHub Stars"></a>
9
20
  </p>
10
21
 
11
- A CLI tool that uses your Telegram bot as encrypted file storage. Files are compressed, encrypted locally, then uploaded to your private bot chat.
22
+ <p align="center">
23
+ <a href="#-quick-start">Quick Start</a> β€’
24
+ <a href="#-why-tas">Why TAS</a> β€’
25
+ <a href="#-features">Features</a> β€’
26
+ <a href="#%EF%B8%8F-security">Security</a> β€’
27
+ <a href="#-cli-reference">Docs</a> β€’
28
+ <a href="#-contributing">Contributing</a>
29
+ </p>
12
30
 
13
- ```
14
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
15
- β”‚ CLI │────▢│ Compress & │────▢│ Telegram β”‚
16
- β”‚ FUSE β”‚ β”‚ Encrypt β”‚ β”‚ Bot API β”‚
17
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
18
- β”‚ β”‚ β”‚
19
- β–Ό β–Ό β–Ό
20
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
21
- β”‚ SQLite Indexβ”‚ β”‚ 49MB Chunks β”‚ β”‚ Private Chat β”‚
22
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
23
- ```
31
+ ---
24
32
 
25
- ## Why TAS?
33
+ <br>
26
34
 
27
- | Feature | TAS | Session-based tools (e.g. teldrive) |
28
- |---------|:---:|:-----------------------------------:|
29
- | Account ban risk | None (Bot API) | High (session hijack detection) |
30
- | Encryption | AES-256-GCM | Usually none |
31
- | Dependencies | SQLite only | Rclone, external DB |
32
- | Setup complexity | 2 minutes | Docker + multiple services |
35
+ ## The Problem
33
36
 
34
- Key differences:
35
- - Uses Bot API, not session-based auth - Telegram can't ban your account
36
- - Encryption by default - files encrypted before leaving your machine
37
- - Local-first - SQLite index, no cloud dependencies
38
- - FUSE mount - use Telegram like a folder
37
+ Google Drive scans your files. Dropbox costs $12/mo. iCloud locks you into Apple. Every "free" cloud storage either **reads your data**, **charges you money**, or **caps your storage**.
39
38
 
40
- ## Security Model
39
+ Meanwhile, Telegram gives every user **unlimited storage** with a bot API β€” and nobody's using it.
41
40
 
42
- | Component | Implementation |
43
- |-----------|----------------|
44
- | Cipher | AES-256-GCM |
45
- | Key derivation | PBKDF2-SHA512, 100,000 iterations |
46
- | Salt | 32 bytes, random per file |
47
- | IV | 12 bytes, random per file |
48
- | Auth tag | 16 bytes (integrity) |
41
+ ## The Solution
49
42
 
50
- Your password never leaves your machine. Telegram stores encrypted blobs.
43
+ **TAS** compresses, encrypts, and uploads your files to your own private Telegram bot chat. Your password never leaves your machine. Telegram only sees encrypted noise. You get a real CLI-powered cloud drive β€” with mount, sync, share, and search β€” for **$0/month, forever.**
51
44
 
52
- ## Limitations
45
+ ```
46
+ Your Machine Telegram Cloud
47
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
48
+ β”‚ β”‚ Compress β”‚ β”‚
49
+ β”‚ tas push │──→ Encrypt ──→│ πŸ”’ Encrypted Blobs β”‚
50
+ β”‚ tas mount │──→ Chunk ──→│ πŸ”’ Private Bot Chat β”‚
51
+ β”‚ tas sync β”‚ β”‚ πŸ”’ Your Data, Safe β”‚
52
+ β”‚ β”‚ Decrypt β”‚ β”‚
53
+ β”‚ tas pull │←── Decomp ←──│ ← Download on demandβ”‚
54
+ β”‚ β”‚ β”‚ β”‚
55
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
56
+ SQLite Index Unlimited & Free
57
+ ```
53
58
 
54
- - Not a backup - Telegram can delete content without notice
55
- - No versioning - overwriting a file deletes the old version
56
- - 49MB chunks - files split due to Bot API limits
57
- - FUSE required - mount feature needs libfuse on Linux/macOS
58
- - Single user - designed for personal use, not multi-tenant
59
+ <br>
59
60
 
60
- ## Quick Start
61
+ ## ⚑ Quick Start
62
+
63
+ Three commands. Two minutes. Zero cost.
61
64
 
62
65
  ```bash
63
- # Install
64
66
  npm install -g @nightowne/tas-cli
65
67
 
66
- # Setup (creates bot connection + encryption password)
67
- tas init
68
+ tas init # Connect your Telegram bot (guided wizard)
69
+ tas push secret.pdf # Upload β€” encrypted, compressed, done
70
+ tas pull secret.pdf # Download β€” decrypted, verified, instant
71
+ ```
72
+
73
+ That's it. You now have encrypted cloud storage.
74
+
75
+ <br>
76
+
77
+ ## πŸ’‘ Why TAS
78
+
79
+ <table>
80
+ <tr>
81
+ <td width="50%">
82
+
83
+ ### vs. Google Drive
84
+ - ❌ Google scans & indexes your files
85
+ - ❌ 15 GB free tier
86
+ - ❌ No encryption at rest (by you)
87
+
88
+ ### vs. Dropbox
89
+ - ❌ $12/mo for 2 TB
90
+ - ❌ Can access your data
91
+ - ❌ No CLI-first experience
92
+
93
+ ### vs. Mega / pCloud
94
+ - ❌ Freemium with tight caps
95
+ - ❌ Closed source encryption
96
+ - ❌ Can't self-host or script
97
+
98
+ </td>
99
+ <td width="50%">
100
+
101
+ ### TAS gives you
102
+ - βœ… **$0/month** β€” forever, no caps
103
+ - βœ… **Zero-knowledge** β€” only you can decrypt
104
+ - βœ… **AES-256-GCM** β€” military-grade encryption
105
+ - βœ… **Mount as folder** β€” FUSE filesystem
106
+ - βœ… **Auto-sync** β€” Dropbox-style folder sync
107
+ - βœ… **Share links** β€” expiring, download-limited
108
+ - βœ… **CLI-first** β€” cron, Docker, CI/CD ready
109
+ - βœ… **Open source** β€” audit every line
110
+
111
+ </td>
112
+ </tr>
113
+ </table>
114
+
115
+ <br>
68
116
 
69
- # Upload a file
70
- tas push secret.pdf
117
+ ## πŸ”₯ Features
71
118
 
72
- # Download a file
73
- tas pull secret.pdf
119
+ ### πŸ—‚οΈ Mount as a Local Folder
120
+ Drag and drop files into Telegram storage like it's a regular drive.
74
121
 
75
- # Mount as folder (requires libfuse)
76
- tas mount ~/cloud
122
+ ```bash
123
+ tas mount ~/cloud # Mount your Telegram storage
124
+ # Now use Finder, Explorer, or any app β€” files sync to Telegram
125
+ tas unmount ~/cloud
77
126
  ```
78
127
 
79
- ### Prerequisites
80
- - Node.js β‰₯18
81
- - Telegram account + bot token from [@BotFather](https://t.me/BotFather)
82
- - `libfuse` for mount feature:
83
- ```bash
84
- # Debian/Ubuntu
85
- sudo apt install fuse libfuse-dev
86
-
87
- # Fedora
88
- sudo dnf install fuse fuse-devel
89
-
90
- # macOS
91
- brew install macfuse
92
- ```
128
+ > Requires `libfuse` β€” `apt install fuse libfuse-dev` on Linux, `brew install macfuse` on macOS.
93
129
 
94
- ## CLI Reference
130
+ ### πŸ”„ Auto-Sync Folders
131
+ Dropbox-style: register a folder, and TAS watches for changes and uploads automatically.
95
132
 
96
133
  ```bash
97
- # Core
98
- tas init # Setup wizard
99
- tas push <file> # Upload file
100
- tas pull <file|hash> # Download file
101
- tas list [-l] # List files (long format)
102
- tas delete <file|hash> # Remove file
103
- tas status # Show stats
104
-
105
- # Search & Resume (v1.1.0)
106
- tas search <query> # Search by filename
107
- tas search -t <query> # Search by tag
108
- tas resume # Resume interrupted uploads
109
-
110
- # FUSE Mount
111
- tas mount <path> # Mount as folder
112
- tas unmount <path> # Unmount
134
+ tas sync add ~/Documents # Register a folder
135
+ tas sync start # Watch & auto-upload changes
136
+ tas sync pull # Download everything back
137
+ tas sync status # See what's synced
138
+ ```
113
139
 
114
- # Tags
115
- tas tag add <file> <tags...> # Add tags
116
- tas tag remove <file> <tags...> # Remove tags
117
- tas tag list [tag] # List tags or files by tag
140
+ ### πŸ”— Share with Expiring Links
141
+ Generate one-time download links with a sleek dark-themed download page. Files are decrypted on-the-fly β€” the link holder never sees your password.
118
142
 
119
- # Sync (Dropbox-style)
120
- tas sync add <folder> # Register folder for sync
121
- tas sync start # Start watching
122
- tas sync pull # Download all to sync folders
123
- tas sync status # Show sync status
143
+ ```bash
144
+ tas share create report.pdf --expire 1h --max-downloads 3
145
+ # β†’ http://localhost:3000/d/a1b2c3d4...
124
146
 
125
- # Share (temporary links)
126
- tas share create <file> # Create download link
127
- tas share create <file> --expire 1h --max-downloads 3
128
- tas share list # Show active shares
129
- tas share revoke <token> # Revoke a share
147
+ tas share list # See active shares
148
+ tas share revoke a1b2c3d4 # Revoke anytime
149
+ ```
130
150
 
131
- # Verification
132
- tas verify # Check file integrity
151
+ ### 🏷️ Tags & Search
152
+ Organize and find files instantly.
153
+
154
+ ```bash
155
+ tas tag add report.pdf work Q4
156
+ tas search "report" # Search by filename
157
+ tas search -t work # Search by tag
133
158
  ```
134
159
 
135
- ## Automation
160
+ ### 🩺 Self-Diagnostics
161
+ One command to check if everything is healthy.
162
+
163
+ ```bash
164
+ tas doctor
165
+ # βœ“ Node.js 20.11.0
166
+ # βœ“ Config v2 (encrypted token)
167
+ # βœ“ Database: 42 files, 1.3 GB total
168
+ # βœ“ Disk space: 50 GB free (32% used)
169
+ # βœ“ Encryption: AES-256-GCM, PBKDF2-SHA512 600,000 iterations
170
+ # ✨ All systems go!
171
+ ```
136
172
 
137
- Skip password prompts for scripts and CI/CD:
173
+ ### πŸ€– Built for Automation
174
+ First-class JSON output, environment variable support, and zero interactivity mode.
138
175
 
139
176
  ```bash
140
- # Environment variable
141
- export TAS_PASSWORD="your-password"
142
- tas push file.pdf
143
- tas sync start
177
+ export TAS_PASSWORD="your-password" # Skip prompts
178
+ export TAS_DATA_DIR="/custom/path" # Custom data location
179
+
180
+ tas push backup.tar.gz # Non-interactive upload
181
+ tas list --json | jq '.[].filename' # Pipe to jq
182
+ tas status --json # Machine-readable status
183
+
184
+ # Works with: cron β€’ GitHub Actions β€’ Docker β€’ systemd β€’ any CI/CD
185
+ ```
186
+
187
+ <br>
188
+
189
+ ## πŸ›‘οΈ Security
190
+
191
+ TAS implements **zero-knowledge encryption** β€” we can't read your data, Telegram can't read your data, nobody can read your data without your password.
192
+
193
+ | Layer | Implementation | Why It Matters |
194
+ |-------|----------------|----------------|
195
+ | **Cipher** | AES-256-GCM | Same cipher used by governments & banks |
196
+ | **Key Derivation** | PBKDF2-SHA512, **600k iterations** | OWASP 2025 compliant β€” brute-force resistant |
197
+ | **Salt** | 32 bytes, cryptographically random | Unique per file β€” no rainbow tables |
198
+ | **IV** | 12 bytes, cryptographically random | Unique per file β€” no pattern analysis |
199
+ | **Auth Tag** | 16 bytes GCM authentication | Tamper detection β€” any bit flip = rejected |
200
+ | **Bot Token** | Encrypted at rest (AES-256-GCM) | Even your config file is protected |
201
+ | **Password Hash** | PBKDF2-based verification | Your password hash is computationally expensive to crack |
202
+ | **Integrity** | SHA-256 verified on every download | Bit-perfect downloads, guaranteed |
203
+ | **Share Server** | XSS-safe, RFC 6266 headers | Hardened against injection attacks |
204
+
205
+ For the full threat model, cipher rationale, and file format spec, see **[docs/security.md](docs/security.md)**.
206
+
207
+ ### What Telegram Sees
208
+
209
+ ```
210
+ πŸ“¦ a7f3b2c1e9d4.tas β€” 12.4 MB β€” application/octet-stream
211
+ ```
212
+
213
+ That's it. An opaque encrypted blob. No filename, no content, no metadata. Just noise.
214
+
215
+ <br>
216
+
217
+ ## πŸ”„ Reliability
218
+
219
+ Built like professional backup tools (inspired by restic, rclone, borg):
220
+
221
+ | Feature | Details |
222
+ |---------|---------|
223
+ | **Exponential Backoff** | Auto-retry with jitter on Telegram 429 errors and network timeouts |
224
+ | **Rate Limiting** | Built-in 1 msg/sec limiter β€” never hits Telegram's rate limits |
225
+ | **Integrity Verification** | SHA-256 hash check after every single download |
226
+ | **Resume Uploads** | Interrupted? Run `tas resume` to pick up where you left off |
227
+ | **Atomic Transactions** | Upload pipeline uses SQLite transactions β€” pipeline failure = clean rollback, zero orphaned DB rows |
228
+ | **Graceful Shutdown** | SIGINT/SIGTERM handled cleanly β€” zero data corruption risk |
229
+ | **Self-Diagnostics** | `tas doctor` validates your entire setup in seconds |
144
230
 
145
- # Or use CLI flag (recommended for CI/CD)
146
- tas push -p "password" file.pdf
231
+ <br>
232
+
233
+ ## πŸ“‹ CLI Reference
234
+
235
+ <details>
236
+ <summary><strong>Core Commands</strong></summary>
237
+
238
+ ```bash
239
+ tas init # πŸš€ Interactive setup wizard
240
+ tas push <file> # ⬆️ Upload (encrypt + compress + upload)
241
+ tas pull <file|hash> # ⬇️ Download (download + decrypt + verify)
242
+ tas list [-l] [--json] # πŸ“‹ List all files
243
+ tas delete <file|hash> # πŸ—‘οΈ Remove from index (--hard to delete from Telegram)
244
+ tas status [--json] # πŸ“Š Storage stats
245
+ tas search <query> # πŸ” Find files by name or tag
246
+ tas resume # πŸ”„ Resume interrupted uploads
247
+ tas verify # βœ… Verify all files exist & are intact
248
+ tas doctor # 🩺 System health check
147
249
  ```
148
250
 
149
- Works great with:
150
- - Cron jobs for automated backups
151
- - GitHub Actions and GitLab CI
152
- - Docker containers
153
- - Shell scripts for batch operations
251
+ </details>
252
+
253
+ <details>
254
+ <summary><strong>Mount & Sync</strong></summary>
154
255
 
155
- ## Auto-Start (systemd)
256
+ ```bash
257
+ # FUSE Mount (use Telegram like a local folder)
258
+ tas mount <path> # Mount
259
+ tas unmount <path> # Unmount
260
+
261
+ # Folder Sync (Dropbox-style auto-upload)
262
+ tas sync add <folder> # Register a folder to sync
263
+ tas sync start # Start watching for changes
264
+ tas sync pull # Download all synced files
265
+ tas sync status # Show sync status
266
+ ```
156
267
 
157
- See [systemd/README.md](systemd/README.md) for running sync as a service.
268
+ </details>
158
269
 
159
- ## Development
270
+ <details>
271
+ <summary><strong>Share & Tags</strong></summary>
160
272
 
161
273
  ```bash
162
- git clone https://github.com/ixchio/tas
163
- cd tas
164
- npm install
165
- npm test # 28 tests
274
+ # Temporary Share Links
275
+ tas share create <file> [--expire 24h] [--max-downloads 3]
276
+ tas share list # Active shares
277
+ tas share revoke <token> # Revoke a share link
278
+
279
+ # File Tags
280
+ tas tag add <file> <tags...>
281
+ tas tag remove <file> <tags...>
282
+ tas tag list [tag] # List tags or files with a specific tag
166
283
  ```
167
284
 
168
- ### Project Structure
285
+ </details>
286
+
287
+ <br>
288
+
289
+ ## πŸ—οΈ Architecture
290
+
169
291
  ```
170
292
  src/
171
- β”œβ”€β”€ cli.js # Command definitions
172
- β”œβ”€β”€ index.js # Upload/download pipeline
173
- β”œβ”€β”€ crypto/ # AES-256-GCM encryption
174
- β”œβ”€β”€ db/ # SQLite file index
175
- β”œβ”€β”€ fuse/ # FUSE filesystem mount
176
- β”œβ”€β”€ sync/ # Folder sync engine
177
- β”œβ”€β”€ telegram/ # Bot API client
178
- └── utils/ # Compression, chunking
293
+ β”œβ”€β”€ cli.js # Commander-based CLI β€” all commands
294
+ β”œβ”€β”€ index.js # Streaming upload/download pipeline
295
+ β”œβ”€β”€ crypto/
296
+ β”‚ └── encryption.js # AES-256-GCM + PBKDF2-SHA512 key derivation
297
+ β”œβ”€β”€ db/
298
+ β”‚ └── index.js # SQLite index (files, chunks, tags, shares, sync)
299
+ β”œβ”€β”€ telegram/
300
+ β”‚ └── client.js # Bot API wrapper β€” retry, rate-limit, streaming
301
+ β”œβ”€β”€ fuse/
302
+ β”‚ └── mount.js # FUSE filesystem β€” mount Telegram as a folder
303
+ β”œβ”€β”€ share/
304
+ β”‚ └── server.js # HTTP server β€” expiring download links
305
+ β”œβ”€β”€ sync/
306
+ β”‚ └── sync.js # Folder watcher β€” Dropbox-style auto-sync
307
+ └── utils/
308
+ β”œβ”€β”€ compression.js # Smart gzip (skips already-compressed formats)
309
+ β”œβ”€β”€ chunker.js # 49MB chunking with custom WAS1 file headers
310
+ β”œβ”€β”€ progress.js # Terminal progress bar with speed + ETA
311
+ β”œβ”€β”€ throttle.js # Bandwidth limiter (stream transform)
312
+ β”œβ”€β”€ branding.js # ASCII art + version (auto-synced from package.json)
313
+ └── cli-helpers.js # Password management + config resolution
314
+ ```
315
+
316
+ **Tech stack:** Node.js Β· better-sqlite3 Β· node-telegram-bot-api Β· fuse-native Β· Commander Β· Chalk Β· Ora Β· Inquirer
317
+
318
+ <br>
319
+
320
+ ## ⚠️ Good to Know
321
+
322
+ | | |
323
+ |---|---|
324
+ | πŸ“Œ **Not a backup solution** | Telegram can delete content. Use TAS alongside proper backups, not instead of them. |
325
+ | πŸ“Œ **49 MB chunks** | Files are automatically split due to Telegram Bot API limits. Fully transparent. |
326
+ | πŸ“Œ **Single-user** | Designed for personal use. Not multi-tenant. |
327
+ | πŸ“Œ **FUSE = Linux/macOS** | Mount feature requires `libfuse`. CLI works everywhere Node.js runs. |
328
+ | πŸ“Œ **No versioning (yet)** | Overwriting a file replaces the previous version. |
329
+
330
+ <br>
331
+
332
+ ## πŸ› οΈ Development
333
+
334
+ ```bash
335
+ git clone https://github.com/ixchio/tas
336
+ cd tas && npm install
337
+ npm test # 83 tests across 16 suites, all passing
179
338
  ```
180
339
 
181
- ## License
340
+ For the full developer guide (architecture, testing, conventions, gotchas), see **[docs/development.md](docs/development.md)**.
341
+
342
+ PRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
343
+
344
+ <br>
345
+
346
+ ## πŸ“š Documentation
182
347
 
183
- MIT
348
+ | Doc | What's in it |
349
+ |-----|-------------|
350
+ | [docs/development.md](docs/development.md) | Developer onboarding β€” project structure, how to add commands, testing, conventions |
351
+ | [docs/security.md](docs/security.md) | Threat model β€” what TAS protects against, cipher details, file format specs |
352
+ | [CHANGELOG.md](CHANGELOG.md) | Version history with all changes documented |
353
+ | [CONTRIBUTING.md](CONTRIBUTING.md) | How to contribute β€” fork, branch, PR |
354
+ | [SECURITY.md](SECURITY.md) | Security vulnerability reporting |
355
+
356
+ <br>
357
+
358
+ ## 🌟 Contributing
359
+
360
+ TAS is open source and we love contributions:
361
+
362
+ - πŸ› **Found a bug?** [Open an issue](https://github.com/ixchio/tas/issues)
363
+ - πŸ’‘ **Have an idea?** [Start a discussion](https://github.com/ixchio/tas/issues)
364
+ - πŸ”§ **Want to contribute?** Fork β†’ Branch β†’ PR β†’ πŸŽ‰
365
+
366
+ <br>
367
+
368
+ ## πŸ“„ License
369
+
370
+ MIT β€” use it, fork it, ship it, sell it. Do whatever you want.
371
+
372
+ ---
373
+
374
+ <p align="center">
375
+ <sub>Built with β˜• and stubbornness by <a href="https://github.com/ixchio">@ixchio</a></sub><br>
376
+ <sub>If TAS saved you money, consider giving it a ⭐</sub>
377
+ </p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nightowne/tas-cli",
3
- "version": "2.0.0",
3
+ "version": "2.3.0",
4
4
  "description": "Telegram as Storage - Automated encrypted cloud backup. Free, encrypted, scriptable. Mount as folder or use with cron/Docker.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -46,11 +46,13 @@
46
46
  "better-sqlite3": "^12.6.2",
47
47
  "chalk": "^5.3.0",
48
48
  "commander": "^12.1.0",
49
- "fuse-native": "^2.2.6",
50
49
  "inquirer": "^12.2.0",
51
50
  "node-telegram-bot-api": "^0.66.0",
52
51
  "ora": "^8.1.1"
53
52
  },
53
+ "optionalDependencies": {
54
+ "fuse-native": "^2.2.6"
55
+ },
54
56
  "engines": {
55
57
  "node": ">=18.0.0"
56
58
  }