@nightowne/tas-cli 2.1.0 β†’ 2.4.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,162 +1,362 @@
1
1
  <p align="center">
2
- <img src="assets/demo.gif" alt="TAS Demo" width="600">
2
+ <img src="assets/demo.gif" alt="TAS β€” Telegram as Storage" width="640">
3
3
  </p>
4
4
 
5
- <h1 align="center">Telegram as Storage</h1>
5
+ <h1 align="center">
6
+ πŸ“¦ TAS β€” Telegram as Storage
7
+ </h1>
8
+
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
- <strong>Free, encrypted, unlimited cloud storage β€” inside Telegram.</strong>
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
22
  <p align="center">
12
- <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>
13
- <a href="https://www.npmjs.com/package/@nightowne/tas-cli"><img src="https://img.shields.io/npm/v/@nightowne/tas-cli" alt="npm"></a>
14
- <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
15
- <a href="https://www.npmjs.com/package/@nightowne/tas-cli"><img src="https://img.shields.io/npm/dm/@nightowne/tas-cli" alt="Downloads"></a>
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>
16
29
  </p>
17
30
 
18
31
  ---
19
32
 
20
- I built this because I wanted encrypted cloud storage that's actually free. Google Drive reads your files. Dropbox costs money. Telegram gives you unlimited storage with a bot API β€” so I wrote a CLI that turns it into a proper encrypted drive.
33
+ <br>
34
+
35
+ ## The Problem
36
+
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**.
21
38
 
22
- **What this does:** Compresses, encrypts (AES-256-GCM), and uploads your files to your own private Telegram bot chat. Mount it as a folder, sync directories, or share files with expiring links.
39
+ Meanwhile, Telegram gives every user **unlimited storage** with a bot API β€” and nobody's using it.
40
+
41
+ ## The Solution
42
+
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.**
23
44
 
24
45
  ```
25
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
26
- β”‚ CLI │────▢│ Compress & │────▢│ Telegram β”‚
27
- β”‚ FUSE β”‚ β”‚ Encrypt β”‚ β”‚ Bot API β”‚
28
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
29
- β”‚ β”‚ β”‚
30
- β–Ό β–Ό β–Ό
31
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
32
- β”‚ SQLite Indexβ”‚ β”‚ 49MB Chunks β”‚ β”‚ Private Chat β”‚
33
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
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
34
57
  ```
35
58
 
59
+ <br>
60
+
36
61
  ## ⚑ Quick Start
37
62
 
63
+ Three commands. Two minutes. Zero cost.
64
+
38
65
  ```bash
39
66
  npm install -g @nightowne/tas-cli
40
- tas init # 2-minute setup wizard
41
- tas push secret.pdf
42
- tas pull secret.pdf
67
+
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
43
71
  ```
44
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>
116
+
45
117
  ## πŸ”₯ Features
46
118
 
47
- ### Mount as a folder
119
+ ### πŸ—‚οΈ Mount as a Local Folder
120
+ Drag and drop files into Telegram storage like it's a regular drive.
121
+
48
122
  ```bash
49
- tas mount ~/cloud # FUSE mount β€” drag & drop files
123
+ tas mount ~/cloud # Mount your Telegram storage
124
+ # Now use Finder, Explorer, or any app β€” files sync to Telegram
50
125
  tas unmount ~/cloud
51
126
  ```
52
- Requires `libfuse` (`apt install fuse libfuse-dev` on Debian/Ubuntu, `brew install macfuse` on macOS).
53
127
 
54
- ### Auto-sync folders
128
+ > Requires `libfuse` β€” `apt install fuse libfuse-dev` on Linux, `brew install macfuse` on macOS.
129
+
130
+ ### πŸ”„ Auto-Sync Folders
131
+ Dropbox-style: register a folder, and TAS watches for changes and uploads automatically.
132
+
55
133
  ```bash
56
- tas sync add ~/Documents # Register
57
- tas sync start # Watch for changes, auto-upload
134
+ tas sync add ~/Documents # Register a folder
135
+ tas sync start # Watch & auto-upload changes
58
136
  tas sync pull # Download everything back
137
+ tas sync status # See what's synced
59
138
  ```
60
139
 
61
- ### Share files with expiring links
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.
142
+
62
143
  ```bash
63
- tas share create secret.pdf --expire 1h --max-downloads 3
144
+ tas share create report.pdf --expire 1h --max-downloads 3
64
145
  # β†’ http://localhost:3000/d/a1b2c3d4...
65
146
 
66
- tas share list # Active shares
67
- tas share revoke a1b2c3d4 # Revoke
147
+ tas share list # See active shares
148
+ tas share revoke a1b2c3d4 # Revoke anytime
149
+ ```
150
+
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
158
+ ```
159
+
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
+ ```
172
+
173
+ ### πŸ€– Built for Automation
174
+ First-class JSON output, environment variable support, and zero interactivity mode.
175
+
176
+ ```bash
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
68
185
  ```
69
- Spins up a local HTTP server. File is downloaded from Telegram, decrypted, and served. Dark-themed download page with file info.
186
+
187
+ <br>
70
188
 
71
189
  ## πŸ›‘οΈ Security
72
190
 
73
- | Component | Implementation |
74
- |-----------|----------------|
75
- | Cipher | AES-256-GCM |
76
- | Key derivation | PBKDF2-SHA512, 100k iterations |
77
- | Salt | 32 bytes, random per file |
78
- | IV | 12 bytes, random per file |
79
- | Auth tag | 16 bytes (integrity verification) |
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** | Timing-safe PBKDF2 verification | Resistant to timing side-channel attacks |
202
+ | **Config Permissions** | `chmod 600` on config.json | Other users on your system can't read your credentials |
203
+ | **Integrity** | SHA-256 verified on every download | Bit-perfect downloads, guaranteed |
204
+ | **Share Server** | Localhost-only, XSS-safe, RFC 6266 | Binds to 127.0.0.1 by default β€” your LAN doesn't see it |
205
+
206
+ ### What Telegram Sees
207
+
208
+ ```
209
+ πŸ“¦ a7f3b2c1e9d4.tas β€” 12.4 MB β€” application/octet-stream
210
+ ```
211
+
212
+ That's it. An opaque encrypted blob. No filename, no content, no metadata. Just noise.
213
+
214
+ <br>
215
+
216
+ ## πŸ”„ Reliability
217
+
218
+ Built like professional backup tools (inspired by restic, rclone, borg):
80
219
 
81
- Your password **never** leaves your machine. Telegram only sees encrypted blobs. Even if someone accesses your bot chat, they get meaningless data without your password.
220
+ | Feature | Details |
221
+ |---------|---------|
222
+ | **Exponential Backoff** | Auto-retry with jitter on Telegram 429 errors and network timeouts |
223
+ | **Rate Limiting** | Built-in 1 msg/sec limiter β€” never hits Telegram's rate limits |
224
+ | **Integrity Verification** | SHA-256 hash check after every single download |
225
+ | **Resume Uploads** | Interrupted? Run `tas resume` to pick up where you left off |
226
+ | **Graceful Shutdown** | SIGINT/SIGTERM handled cleanly β€” zero data corruption risk |
227
+ | **Self-Diagnostics** | `tas doctor` validates your entire setup in seconds |
82
228
 
83
- ## πŸ“‹ Full CLI Reference
229
+ <br>
230
+
231
+ ## πŸ“‹ CLI Reference
232
+
233
+ <details>
234
+ <summary><strong>Core Commands</strong></summary>
235
+
236
+ ```bash
237
+ tas init # πŸš€ Interactive setup wizard
238
+ tas push <file> # ⬆️ Upload (encrypt + compress + upload)
239
+ tas pull <file|hash> # ⬇️ Download (download + decrypt + verify)
240
+ tas list [-l] [--json] # πŸ“‹ List all files
241
+ tas delete <file|hash> # πŸ—‘οΈ Remove from index (--hard to delete from Telegram)
242
+ tas status [--json] # πŸ“Š Storage stats
243
+ tas search <query> # πŸ” Find files by name or tag
244
+ tas resume # πŸ”„ Resume interrupted uploads
245
+ tas verify # βœ… Verify all files exist & are intact
246
+ tas doctor # 🩺 System health check
247
+ ```
248
+
249
+ </details>
250
+
251
+ <details>
252
+ <summary><strong>Mount & Sync</strong></summary>
84
253
 
85
254
  ```bash
86
- # Core
87
- tas init # Setup wizard
88
- tas push <file> # Upload
89
- tas pull <file|hash> # Download
90
- tas list [-l] # List files
91
- tas delete <file|hash> # Delete
92
- tas status # Stats
93
- tas search <query> # Search files
94
- tas resume # Resume interrupted uploads
95
- tas verify # Check integrity
96
-
97
- # FUSE Mount
98
- tas mount <path> # Mount as folder
255
+ # FUSE Mount (use Telegram like a local folder)
256
+ tas mount <path> # Mount
99
257
  tas unmount <path> # Unmount
100
258
 
101
- # Sync
102
- tas sync add <folder> # Register folder
103
- tas sync start # Start watching
104
- tas sync pull # Download all
105
- tas sync status # Show status
259
+ # Folder Sync (Dropbox-style auto-upload)
260
+ tas sync add <folder> # Register a folder to sync
261
+ tas sync start # Start watching for changes
262
+ tas sync pull # Download all synced files
263
+ tas sync status # Show sync status
264
+ ```
265
+
266
+ </details>
267
+
268
+ <details>
269
+ <summary><strong>Share & Tags</strong></summary>
106
270
 
107
- # Share
108
- tas share create <file> # Create download link
271
+ ```bash
272
+ # Temporary Share Links
273
+ tas share create <file> [--expire 24h] [--max-downloads 3]
109
274
  tas share list # Active shares
110
- tas share revoke <token> # Revoke
275
+ tas share revoke <token> # Revoke a share link
111
276
 
112
- # Tags
277
+ # File Tags
113
278
  tas tag add <file> <tags...>
114
279
  tas tag remove <file> <tags...>
115
- tas tag list [tag]
280
+ tas tag list [tag] # List tags or files with a specific tag
116
281
  ```
117
282
 
118
- ## πŸ€– Automation
283
+ </details>
119
284
 
120
- ```bash
121
- # Skip password prompts
122
- export TAS_PASSWORD="your-password"
123
- tas push file.pdf
285
+ <br>
286
+
287
+ ## πŸ—οΈ Architecture
124
288
 
125
- # Or inline
126
- tas push -p "password" file.pdf
289
+ ```
290
+ src/
291
+ β”œβ”€β”€ cli.js # Commander-based CLI β€” all commands
292
+ β”œβ”€β”€ index.js # Streaming upload/download pipeline
293
+ β”œβ”€β”€ crypto/
294
+ β”‚ └── encryption.js # AES-256-GCM + PBKDF2-SHA512 key derivation
295
+ β”œβ”€β”€ db/
296
+ β”‚ └── index.js # SQLite index (files, chunks, tags, shares, sync)
297
+ β”œβ”€β”€ telegram/
298
+ β”‚ └── client.js # Bot API wrapper β€” retry, rate-limit, streaming
299
+ β”œβ”€β”€ fuse/
300
+ β”‚ └── mount.js # FUSE filesystem β€” mount Telegram as a folder
301
+ β”œβ”€β”€ share/
302
+ β”‚ └── server.js # HTTP server β€” expiring download links
303
+ β”œβ”€β”€ sync/
304
+ β”‚ └── sync.js # Folder watcher β€” Dropbox-style auto-sync
305
+ └── utils/
306
+ β”œβ”€β”€ download-stream.js # Shared Telegramβ†’Decryptβ†’Decompress pipeline
307
+ β”œβ”€β”€ compression.js # Smart gzip (skips already-compressed formats)
308
+ β”œβ”€β”€ chunker.js # 49MB chunking with custom WAS1 file headers
309
+ β”œβ”€β”€ progress.js # Terminal progress bar with speed + ETA
310
+ β”œβ”€β”€ throttle.js # Bandwidth limiter (stream transform)
311
+ β”œβ”€β”€ branding.js # ASCII art + formatting
312
+ └── cli-helpers.js # Password management + config resolution
127
313
  ```
128
314
 
129
- Works with cron, GitHub Actions, Docker, or any CI/CD.
315
+ **Tech stack:** Node.js Β· better-sqlite3 Β· node-telegram-bot-api Β· fuse-native Β· Commander Β· Chalk Β· Ora Β· Inquirer
130
316
 
131
- ## ⚠️ Limitations
317
+ <br>
132
318
 
133
- - **Not a backup** β€” Telegram can delete content without notice
134
- - **No versioning** β€” overwriting deletes the old version
135
- - **49MB chunks** β€” files split due to Bot API limits
136
- - **Single user** β€” personal use, not multi-tenant
137
- - **FUSE required** β€” mount feature needs libfuse
319
+ ## ⚠️ Good to Know
320
+
321
+ | | |
322
+ |---|---|
323
+ | πŸ“Œ **Not a backup solution** | Telegram can delete content. Use TAS alongside proper backups, not instead of them. |
324
+ | πŸ“Œ **49 MB chunks** | Files are automatically split due to Telegram Bot API limits. Fully transparent. |
325
+ | πŸ“Œ **Single-user** | Designed for personal use. Not multi-tenant. |
326
+ | πŸ“Œ **FUSE = Linux/macOS** | Mount feature requires `libfuse`. CLI works everywhere Node.js runs. |
327
+ | πŸ“Œ **No versioning (yet)** | Overwriting a file replaces the previous version. |
328
+
329
+ <br>
138
330
 
139
331
  ## πŸ› οΈ Development
140
332
 
141
333
  ```bash
142
334
  git clone https://github.com/ixchio/tas
143
335
  cd tas && npm install
144
- npm test # 43 tests
336
+ npm test # 71 tests, all passing
145
337
  ```
146
338
 
147
- ```
148
- src/
149
- β”œβ”€β”€ cli.js # Commands
150
- β”œβ”€β”€ index.js # Upload/download pipeline
151
- β”œβ”€β”€ crypto/ # AES-256-GCM
152
- β”œβ”€β”€ db/ # SQLite index
153
- β”œβ”€β”€ fuse/ # FUSE filesystem
154
- β”œβ”€β”€ share/ # HTTP share server
155
- β”œβ”€β”€ sync/ # Folder sync engine
156
- β”œβ”€β”€ telegram/ # Bot API client
157
- └── utils/ # Compression, chunking
158
- ```
339
+ PRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
340
+
341
+ <br>
342
+
343
+ ## 🌟 Contributing
344
+
345
+ TAS is open source and we love contributions:
346
+
347
+ - πŸ› **Found a bug?** [Open an issue](https://github.com/ixchio/tas/issues)
348
+ - πŸ’‘ **Have an idea?** [Start a discussion](https://github.com/ixchio/tas/issues)
349
+ - πŸ”§ **Want to contribute?** Fork β†’ Branch β†’ PR β†’ πŸŽ‰
350
+
351
+ <br>
159
352
 
160
353
  ## πŸ“„ License
161
354
 
162
- MIT β€” do whatever you want with it.
355
+ MIT β€” use it, fork it, ship it, sell it. Do whatever you want.
356
+
357
+ ---
358
+
359
+ <p align="center">
360
+ <sub>Built with β˜• and stubbornness by <a href="https://github.com/ixchio">@ixchio</a></sub><br>
361
+ <sub>If TAS saved you money, consider giving it a ⭐</sub>
362
+ </p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nightowne/tas-cli",
3
- "version": "2.1.0",
3
+ "version": "2.4.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,12 +46,14 @@
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
  }
57
- }
59
+ }