@savestate/cli 0.3.0 → 0.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 +30 -12
- package/dist/cli.js +9 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/cloud.d.ts +29 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +356 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/schedule.d.ts +1 -1
- package/dist/commands/schedule.d.ts.map +1 -1
- package/dist/commands/schedule.js +49 -5
- package/dist/commands/schedule.js.map +1 -1
- package/dist/storage/resolve.d.ts +4 -0
- package/dist/storage/resolve.d.ts.map +1 -1
- package/dist/storage/resolve.js +11 -12
- package/dist/storage/resolve.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ npx savestate diff v3 v5 # What changed between snapshots
|
|
|
32
32
|
- 📦 **Open archive format** — The SaveState Archive Format (SAF) is an open spec. No vendor lock-in.
|
|
33
33
|
- 🔌 **Platform adapters** — Works with ChatGPT, Claude, Gemini, Clawdbot, OpenAI Assistants, and more.
|
|
34
34
|
- 📊 **Incremental** — Like git — only captures what changed. Full history, tiny storage.
|
|
35
|
-
- 💾 **Flexible storage** — Local filesystem
|
|
35
|
+
- 💾 **Flexible storage** — Local filesystem (free) or SaveState Cloud (Pro/Team).
|
|
36
36
|
- ⏰ **Scheduled backups** — Set it and forget it. Auto-snapshot on your schedule.
|
|
37
37
|
- 🖥️ **CLI-first** — Built for developers. Also has a web dashboard (coming soon).
|
|
38
38
|
|
|
@@ -158,25 +158,43 @@ savestate migrate Migration wizard between platforms
|
|
|
158
158
|
--dry-run Preview migration plan
|
|
159
159
|
```
|
|
160
160
|
|
|
161
|
-
## Storage
|
|
161
|
+
## Storage
|
|
162
|
+
|
|
163
|
+
### Local Storage (Free)
|
|
162
164
|
|
|
163
165
|
```bash
|
|
164
|
-
#
|
|
166
|
+
# Default — snapshots stored in ~/.savestate/
|
|
165
167
|
savestate config --set storage.type=local
|
|
166
168
|
|
|
167
|
-
#
|
|
168
|
-
savestate config --set storage.
|
|
169
|
-
|
|
169
|
+
# Custom path (e.g., Dropbox, iCloud sync folder)
|
|
170
|
+
savestate config --set storage.options.path=~/Dropbox/savestate
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Cloud Storage (Pro/Team)
|
|
170
174
|
|
|
171
|
-
|
|
172
|
-
savestate config --set storage.type=r2
|
|
175
|
+
Cloud storage is managed through the SaveState API with server-side subscription verification:
|
|
173
176
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
savestate
|
|
177
|
+
```bash
|
|
178
|
+
# Authenticate first
|
|
179
|
+
savestate login
|
|
180
|
+
|
|
181
|
+
# Push local snapshots to cloud
|
|
182
|
+
savestate cloud push # Push latest snapshot
|
|
183
|
+
savestate cloud push --all # Push all snapshots
|
|
184
|
+
|
|
185
|
+
# Pull snapshots from cloud
|
|
186
|
+
savestate cloud pull # Pull latest
|
|
187
|
+
savestate cloud pull --id abc123 # Pull specific snapshot
|
|
188
|
+
|
|
189
|
+
# List cloud snapshots
|
|
190
|
+
savestate cloud list # Shows usage stats
|
|
177
191
|
```
|
|
178
192
|
|
|
179
|
-
|
|
193
|
+
Cloud storage quotas:
|
|
194
|
+
- **Pro ($9/mo)**: 10 GB
|
|
195
|
+
- **Team ($29/mo)**: 100 GB
|
|
196
|
+
|
|
197
|
+
All data is **encrypted locally** before upload. Zero-knowledge by design.
|
|
180
198
|
|
|
181
199
|
## Contributing
|
|
182
200
|
|
package/dist/cli.js
CHANGED
|
@@ -109,6 +109,15 @@ program
|
|
|
109
109
|
.option('--dry-run', 'Show migration plan without making changes')
|
|
110
110
|
.option('-l, --list', 'List available platforms and their capabilities')
|
|
111
111
|
.action(migrateCommand);
|
|
112
|
+
// ─── savestate cloud ─────────────────────────────────────────
|
|
113
|
+
import { cloudCommand } from './commands/cloud.js';
|
|
114
|
+
program
|
|
115
|
+
.command('cloud <subcommand>')
|
|
116
|
+
.description('Cloud storage commands (Pro/Team)')
|
|
117
|
+
.option('--id <id>', 'Specific snapshot ID')
|
|
118
|
+
.option('--all', 'Process all snapshots')
|
|
119
|
+
.option('-f, --force', 'Overwrite existing files')
|
|
120
|
+
.action(cloudCommand);
|
|
112
121
|
// ─── Parse & run ─────────────────────────────────────────────
|
|
113
122
|
program.parse();
|
|
114
123
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* savestate cloud — Cloud storage commands (Pro/Team)
|
|
3
|
+
*
|
|
4
|
+
* Manages cloud backups through the SaveState API.
|
|
5
|
+
* Requires Pro or Team subscription.
|
|
6
|
+
*/
|
|
7
|
+
interface CloudOptions {
|
|
8
|
+
id?: string;
|
|
9
|
+
all?: boolean;
|
|
10
|
+
force?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Push local snapshots to cloud
|
|
14
|
+
*/
|
|
15
|
+
export declare function cloudPushCommand(options: CloudOptions): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Pull snapshots from cloud
|
|
18
|
+
*/
|
|
19
|
+
export declare function cloudPullCommand(options: CloudOptions): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* List cloud snapshots
|
|
22
|
+
*/
|
|
23
|
+
export declare function cloudListCommand(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Main cloud command handler
|
|
26
|
+
*/
|
|
27
|
+
export declare function cloudCommand(subcommand: string, options: CloudOptions): Promise<void>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=cloud.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/commands/cloud.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqHD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgH3E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF3E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CA6CtD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB3F"}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* savestate cloud — Cloud storage commands (Pro/Team)
|
|
3
|
+
*
|
|
4
|
+
* Manages cloud backups through the SaveState API.
|
|
5
|
+
* Requires Pro or Team subscription.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import ora from 'ora';
|
|
9
|
+
import { existsSync, readFileSync, createWriteStream, statSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { pipeline } from 'node:stream/promises';
|
|
12
|
+
import { isInitialized, loadConfig, localConfigDir } from '../config.js';
|
|
13
|
+
import { loadIndex } from '../index-file.js';
|
|
14
|
+
/** Get the snapshots directory */
|
|
15
|
+
function getSnapshotsDir() {
|
|
16
|
+
return join(localConfigDir(), 'snapshots');
|
|
17
|
+
}
|
|
18
|
+
const API_BASE = process.env.SAVESTATE_API_URL || 'https://savestate.dev/api';
|
|
19
|
+
/**
|
|
20
|
+
* Verify subscription is Pro or Team
|
|
21
|
+
*/
|
|
22
|
+
async function verifySubscription() {
|
|
23
|
+
const config = await loadConfig();
|
|
24
|
+
const extConfig = config;
|
|
25
|
+
const apiKey = extConfig.apiKey;
|
|
26
|
+
if (!apiKey) {
|
|
27
|
+
return { valid: false, error: 'Not logged in. Run `savestate login` first.' };
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const res = await fetch(`${API_BASE}/account`, {
|
|
31
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
32
|
+
});
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
return { valid: false, error: 'Could not verify subscription.' };
|
|
35
|
+
}
|
|
36
|
+
const data = await res.json();
|
|
37
|
+
const tier = (data.tier || 'free').toLowerCase();
|
|
38
|
+
const cloudStorageUsed = data.cloudStorageUsed || 0;
|
|
39
|
+
const cloudStorageLimit = data.cloudStorageLimit || 0;
|
|
40
|
+
if (tier === 'pro' || tier === 'team') {
|
|
41
|
+
return { valid: true, tier, cloudStorageUsed, cloudStorageLimit };
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
valid: false,
|
|
45
|
+
tier,
|
|
46
|
+
error: 'Cloud storage requires a Pro or Team subscription.'
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return { valid: false, error: 'Could not verify subscription. Check your internet connection.' };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get presigned upload URL from API
|
|
55
|
+
*/
|
|
56
|
+
async function getUploadUrl(snapshotId, size) {
|
|
57
|
+
const config = await loadConfig();
|
|
58
|
+
const extConfig = config;
|
|
59
|
+
const apiKey = extConfig.apiKey;
|
|
60
|
+
try {
|
|
61
|
+
const res = await fetch(`${API_BASE}/storage/upload-url`, {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
headers: {
|
|
64
|
+
Authorization: `Bearer ${apiKey}`,
|
|
65
|
+
'Content-Type': 'application/json',
|
|
66
|
+
},
|
|
67
|
+
body: JSON.stringify({ snapshotId, size }),
|
|
68
|
+
});
|
|
69
|
+
if (!res.ok)
|
|
70
|
+
return null;
|
|
71
|
+
return await res.json();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get presigned download URL from API
|
|
79
|
+
*/
|
|
80
|
+
async function getDownloadUrl(snapshotId) {
|
|
81
|
+
const config = await loadConfig();
|
|
82
|
+
const extConfig = config;
|
|
83
|
+
const apiKey = extConfig.apiKey;
|
|
84
|
+
try {
|
|
85
|
+
const res = await fetch(`${API_BASE}/storage/download-url?id=${snapshotId}`, {
|
|
86
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
87
|
+
});
|
|
88
|
+
if (!res.ok)
|
|
89
|
+
return null;
|
|
90
|
+
const data = await res.json();
|
|
91
|
+
return data.url;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* List cloud snapshots from API
|
|
99
|
+
*/
|
|
100
|
+
async function listCloudSnapshots() {
|
|
101
|
+
const config = await loadConfig();
|
|
102
|
+
const extConfig = config;
|
|
103
|
+
const apiKey = extConfig.apiKey;
|
|
104
|
+
try {
|
|
105
|
+
const res = await fetch(`${API_BASE}/storage/list`, {
|
|
106
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
107
|
+
});
|
|
108
|
+
if (!res.ok)
|
|
109
|
+
return [];
|
|
110
|
+
const data = await res.json();
|
|
111
|
+
return data.snapshots || [];
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Push local snapshots to cloud
|
|
119
|
+
*/
|
|
120
|
+
export async function cloudPushCommand(options) {
|
|
121
|
+
console.log();
|
|
122
|
+
if (!isInitialized()) {
|
|
123
|
+
console.log(chalk.red('✗ SaveState not initialized. Run `savestate init` first.'));
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
// Verify subscription
|
|
127
|
+
const spinner = ora('Verifying subscription...').start();
|
|
128
|
+
const sub = await verifySubscription();
|
|
129
|
+
if (!sub.valid) {
|
|
130
|
+
spinner.fail('Subscription required');
|
|
131
|
+
console.log();
|
|
132
|
+
console.log(chalk.red(` ${sub.error}`));
|
|
133
|
+
if (sub.tier === 'free') {
|
|
134
|
+
console.log();
|
|
135
|
+
console.log(chalk.dim(' Upgrade at: https://savestate.dev/#pricing'));
|
|
136
|
+
}
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
spinner.succeed(`Subscription verified (${sub.tier})`);
|
|
140
|
+
// Show storage usage
|
|
141
|
+
if (sub.cloudStorageLimit) {
|
|
142
|
+
const usedMB = Math.round((sub.cloudStorageUsed || 0) / 1024 / 1024);
|
|
143
|
+
const limitMB = Math.round(sub.cloudStorageLimit / 1024 / 1024);
|
|
144
|
+
console.log(chalk.dim(` Cloud storage: ${usedMB} MB / ${limitMB} MB`));
|
|
145
|
+
}
|
|
146
|
+
console.log();
|
|
147
|
+
// Get local snapshots
|
|
148
|
+
const index = await loadIndex();
|
|
149
|
+
const entries = index.snapshots || [];
|
|
150
|
+
if (entries.length === 0) {
|
|
151
|
+
console.log(chalk.yellow('No local snapshots to push.'));
|
|
152
|
+
console.log(chalk.dim(' Run `savestate snapshot` to create one.'));
|
|
153
|
+
process.exit(0);
|
|
154
|
+
}
|
|
155
|
+
// Filter to specific snapshot or all
|
|
156
|
+
let toPush = entries;
|
|
157
|
+
if (options.id) {
|
|
158
|
+
toPush = entries.filter(e => e.id === options.id || e.id.startsWith(options.id));
|
|
159
|
+
if (toPush.length === 0) {
|
|
160
|
+
console.log(chalk.red(`Snapshot not found: ${options.id}`));
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (!options.all) {
|
|
165
|
+
// Default: push latest only
|
|
166
|
+
toPush = [entries[entries.length - 1]];
|
|
167
|
+
}
|
|
168
|
+
console.log(chalk.blue(`Pushing ${toPush.length} snapshot(s) to cloud...`));
|
|
169
|
+
console.log();
|
|
170
|
+
const snapshotsDir = getSnapshotsDir();
|
|
171
|
+
let success = 0;
|
|
172
|
+
let failed = 0;
|
|
173
|
+
for (const entry of toPush) {
|
|
174
|
+
const filePath = join(snapshotsDir, `${entry.id}.saf.enc`);
|
|
175
|
+
if (!existsSync(filePath)) {
|
|
176
|
+
console.log(chalk.yellow(` ⚠ ${entry.id.slice(0, 8)} — file not found, skipping`));
|
|
177
|
+
failed++;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
const stat = statSync(filePath);
|
|
181
|
+
const uploadSpinner = ora(` Uploading ${entry.id.slice(0, 8)}... (${Math.round(stat.size / 1024)} KB)`).start();
|
|
182
|
+
try {
|
|
183
|
+
const uploadInfo = await getUploadUrl(entry.id, stat.size);
|
|
184
|
+
if (!uploadInfo) {
|
|
185
|
+
uploadSpinner.fail(` ${entry.id.slice(0, 8)} — failed to get upload URL`);
|
|
186
|
+
failed++;
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
// Upload the file
|
|
190
|
+
const fileBuffer = readFileSync(filePath);
|
|
191
|
+
const uploadRes = await fetch(uploadInfo.url, {
|
|
192
|
+
method: 'PUT',
|
|
193
|
+
body: fileBuffer,
|
|
194
|
+
headers: { 'Content-Type': 'application/octet-stream' },
|
|
195
|
+
});
|
|
196
|
+
if (!uploadRes.ok) {
|
|
197
|
+
uploadSpinner.fail(` ${entry.id.slice(0, 8)} — upload failed (${uploadRes.status})`);
|
|
198
|
+
failed++;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
uploadSpinner.succeed(` ${entry.id.slice(0, 8)} — uploaded`);
|
|
202
|
+
success++;
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
uploadSpinner.fail(` ${entry.id.slice(0, 8)} — ${err instanceof Error ? err.message : 'failed'}`);
|
|
206
|
+
failed++;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
console.log();
|
|
210
|
+
if (success > 0) {
|
|
211
|
+
console.log(chalk.green(`✓ Pushed ${success} snapshot(s) to cloud`));
|
|
212
|
+
}
|
|
213
|
+
if (failed > 0) {
|
|
214
|
+
console.log(chalk.yellow(`⚠ ${failed} snapshot(s) failed`));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Pull snapshots from cloud
|
|
219
|
+
*/
|
|
220
|
+
export async function cloudPullCommand(options) {
|
|
221
|
+
console.log();
|
|
222
|
+
if (!isInitialized()) {
|
|
223
|
+
console.log(chalk.red('✗ SaveState not initialized. Run `savestate init` first.'));
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
// Verify subscription
|
|
227
|
+
const spinner = ora('Verifying subscription...').start();
|
|
228
|
+
const sub = await verifySubscription();
|
|
229
|
+
if (!sub.valid) {
|
|
230
|
+
spinner.fail('Subscription required');
|
|
231
|
+
console.log();
|
|
232
|
+
console.log(chalk.red(` ${sub.error}`));
|
|
233
|
+
process.exit(1);
|
|
234
|
+
}
|
|
235
|
+
spinner.succeed(`Subscription verified (${sub.tier})`);
|
|
236
|
+
console.log();
|
|
237
|
+
// Get cloud snapshots
|
|
238
|
+
const listSpinner = ora('Fetching cloud snapshots...').start();
|
|
239
|
+
const cloudSnapshots = await listCloudSnapshots();
|
|
240
|
+
listSpinner.stop();
|
|
241
|
+
if (cloudSnapshots.length === 0) {
|
|
242
|
+
console.log(chalk.yellow('No snapshots in cloud storage.'));
|
|
243
|
+
console.log(chalk.dim(' Run `savestate cloud push` to upload snapshots.'));
|
|
244
|
+
process.exit(0);
|
|
245
|
+
}
|
|
246
|
+
// Filter
|
|
247
|
+
let toPull = cloudSnapshots;
|
|
248
|
+
if (options.id) {
|
|
249
|
+
toPull = cloudSnapshots.filter(s => s.id === options.id || s.id.startsWith(options.id));
|
|
250
|
+
if (toPull.length === 0) {
|
|
251
|
+
console.log(chalk.red(`Snapshot not found in cloud: ${options.id}`));
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (!options.all) {
|
|
256
|
+
toPull = [cloudSnapshots[cloudSnapshots.length - 1]];
|
|
257
|
+
}
|
|
258
|
+
console.log(chalk.blue(`Pulling ${toPull.length} snapshot(s) from cloud...`));
|
|
259
|
+
console.log();
|
|
260
|
+
const snapshotsDir = getSnapshotsDir();
|
|
261
|
+
let success = 0;
|
|
262
|
+
for (const snap of toPull) {
|
|
263
|
+
const filePath = join(snapshotsDir, `${snap.id}.saf.enc`);
|
|
264
|
+
if (existsSync(filePath) && !options.force) {
|
|
265
|
+
console.log(chalk.dim(` ⏭ ${snap.id.slice(0, 8)} — already exists locally`));
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
const dlSpinner = ora(` Downloading ${snap.id.slice(0, 8)}...`).start();
|
|
269
|
+
try {
|
|
270
|
+
const url = await getDownloadUrl(snap.id);
|
|
271
|
+
if (!url) {
|
|
272
|
+
dlSpinner.fail(` ${snap.id.slice(0, 8)} — failed to get download URL`);
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
const res = await fetch(url);
|
|
276
|
+
if (!res.ok || !res.body) {
|
|
277
|
+
dlSpinner.fail(` ${snap.id.slice(0, 8)} — download failed`);
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
const fileStream = createWriteStream(filePath);
|
|
281
|
+
await pipeline(res.body, fileStream);
|
|
282
|
+
dlSpinner.succeed(` ${snap.id.slice(0, 8)} — downloaded`);
|
|
283
|
+
success++;
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
dlSpinner.fail(` ${snap.id.slice(0, 8)} — ${err instanceof Error ? err.message : 'failed'}`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
console.log();
|
|
290
|
+
console.log(chalk.green(`✓ Pulled ${success} snapshot(s) from cloud`));
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* List cloud snapshots
|
|
294
|
+
*/
|
|
295
|
+
export async function cloudListCommand() {
|
|
296
|
+
console.log();
|
|
297
|
+
// Verify subscription
|
|
298
|
+
const spinner = ora('Verifying subscription...').start();
|
|
299
|
+
const sub = await verifySubscription();
|
|
300
|
+
if (!sub.valid) {
|
|
301
|
+
spinner.fail('Subscription required');
|
|
302
|
+
console.log();
|
|
303
|
+
console.log(chalk.red(` ${sub.error}`));
|
|
304
|
+
process.exit(1);
|
|
305
|
+
}
|
|
306
|
+
spinner.text = 'Fetching cloud snapshots...';
|
|
307
|
+
const snapshots = await listCloudSnapshots();
|
|
308
|
+
spinner.stop();
|
|
309
|
+
console.log(chalk.blue(`Cloud Storage (${sub.tier})`));
|
|
310
|
+
if (sub.cloudStorageLimit) {
|
|
311
|
+
const usedMB = Math.round((sub.cloudStorageUsed || 0) / 1024 / 1024);
|
|
312
|
+
const limitMB = Math.round(sub.cloudStorageLimit / 1024 / 1024);
|
|
313
|
+
const pct = Math.round((sub.cloudStorageUsed || 0) / sub.cloudStorageLimit * 100);
|
|
314
|
+
console.log(chalk.dim(` Usage: ${usedMB} MB / ${limitMB} MB (${pct}%)`));
|
|
315
|
+
}
|
|
316
|
+
console.log();
|
|
317
|
+
if (snapshots.length === 0) {
|
|
318
|
+
console.log(chalk.yellow(' No snapshots in cloud.'));
|
|
319
|
+
console.log(chalk.dim(' Run `savestate cloud push` to upload.'));
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
console.log(chalk.dim(' ID Size Date'));
|
|
323
|
+
console.log(chalk.dim(' ───────── ───────── ──────────────────'));
|
|
324
|
+
for (const snap of snapshots) {
|
|
325
|
+
const sizeKB = Math.round(snap.size / 1024);
|
|
326
|
+
const date = new Date(snap.createdAt).toLocaleDateString();
|
|
327
|
+
console.log(` ${snap.id.slice(0, 8)} ${String(sizeKB).padStart(6)} KB ${date}`);
|
|
328
|
+
}
|
|
329
|
+
console.log();
|
|
330
|
+
console.log(chalk.dim(` ${snapshots.length} snapshot(s) in cloud`));
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Main cloud command handler
|
|
334
|
+
*/
|
|
335
|
+
export async function cloudCommand(subcommand, options) {
|
|
336
|
+
switch (subcommand) {
|
|
337
|
+
case 'push':
|
|
338
|
+
await cloudPushCommand(options);
|
|
339
|
+
break;
|
|
340
|
+
case 'pull':
|
|
341
|
+
await cloudPullCommand(options);
|
|
342
|
+
break;
|
|
343
|
+
case 'list':
|
|
344
|
+
await cloudListCommand();
|
|
345
|
+
break;
|
|
346
|
+
default:
|
|
347
|
+
console.log(chalk.red(`Unknown cloud command: ${subcommand}`));
|
|
348
|
+
console.log();
|
|
349
|
+
console.log('Usage:');
|
|
350
|
+
console.log(' savestate cloud push [--id <id>] [--all] Push snapshots to cloud');
|
|
351
|
+
console.log(' savestate cloud pull [--id <id>] [--all] Pull snapshots from cloud');
|
|
352
|
+
console.log(' savestate cloud list List cloud snapshots');
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=cloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/commands/cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* savestate schedule — Configure automatic backup schedules
|
|
3
3
|
*
|
|
4
4
|
* Uses launchd (macOS) or systemd timers (Linux) for reliable scheduling.
|
|
5
|
-
* Requires Pro or Team
|
|
5
|
+
* Requires Pro or Team subscription.
|
|
6
6
|
*/
|
|
7
7
|
interface ScheduleOptions {
|
|
8
8
|
every?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsCD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C7E"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* savestate schedule — Configure automatic backup schedules
|
|
3
3
|
*
|
|
4
4
|
* Uses launchd (macOS) or systemd timers (Linux) for reliable scheduling.
|
|
5
|
-
* Requires Pro or Team
|
|
5
|
+
* Requires Pro or Team subscription.
|
|
6
6
|
*/
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import ora from 'ora';
|
|
@@ -10,26 +10,70 @@ import { existsSync, mkdirSync, writeFileSync, readFileSync, unlinkSync } from '
|
|
|
10
10
|
import { join } from 'node:path';
|
|
11
11
|
import { homedir, platform } from 'node:os';
|
|
12
12
|
import { execSync } from 'node:child_process';
|
|
13
|
-
import { isInitialized } from '../config.js';
|
|
13
|
+
import { isInitialized, loadConfig } from '../config.js';
|
|
14
|
+
const API_BASE = 'https://savestate.dev/api';
|
|
14
15
|
const LABEL = 'dev.savestate.autobackup';
|
|
16
|
+
/**
|
|
17
|
+
* Verify subscription is Pro or Team
|
|
18
|
+
*/
|
|
19
|
+
async function verifySubscription() {
|
|
20
|
+
const config = await loadConfig();
|
|
21
|
+
const extConfig = config;
|
|
22
|
+
const apiKey = extConfig.apiKey;
|
|
23
|
+
if (!apiKey) {
|
|
24
|
+
return { valid: false, error: 'Not logged in. Run `savestate login` first.' };
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const res = await fetch(`${API_BASE}/account`, {
|
|
28
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
29
|
+
});
|
|
30
|
+
if (!res.ok) {
|
|
31
|
+
return { valid: false, error: 'Invalid or expired API key. Run `savestate login` to re-authenticate.' };
|
|
32
|
+
}
|
|
33
|
+
const account = await res.json();
|
|
34
|
+
const tier = account.tier.toLowerCase();
|
|
35
|
+
if (tier === 'pro' || tier === 'team') {
|
|
36
|
+
return { valid: true, tier };
|
|
37
|
+
}
|
|
38
|
+
return { valid: false, tier, error: 'Scheduled backups require a Pro or Team subscription.' };
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return { valid: false, error: 'Could not verify subscription. Check your internet connection.' };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
15
44
|
export async function scheduleCommand(options) {
|
|
16
45
|
console.log();
|
|
17
46
|
if (!isInitialized()) {
|
|
18
47
|
console.log(chalk.red('✗ SaveState not initialized. Run `savestate init` first.'));
|
|
19
48
|
process.exit(1);
|
|
20
49
|
}
|
|
21
|
-
// Status check
|
|
50
|
+
// Status check - allowed for everyone
|
|
22
51
|
if (options.status || (!options.every && !options.disable)) {
|
|
23
52
|
await showStatus();
|
|
24
53
|
return;
|
|
25
54
|
}
|
|
26
|
-
// Disable
|
|
55
|
+
// Disable - allowed for everyone (in case subscription lapses)
|
|
27
56
|
if (options.disable) {
|
|
28
57
|
await disableSchedule();
|
|
29
58
|
return;
|
|
30
59
|
}
|
|
31
|
-
// Enable with interval
|
|
60
|
+
// Enable with interval - requires Pro/Team
|
|
32
61
|
if (options.every) {
|
|
62
|
+
// Verify subscription first
|
|
63
|
+
const spinner = ora('Verifying subscription...').start();
|
|
64
|
+
const { valid, tier, error } = await verifySubscription();
|
|
65
|
+
if (!valid) {
|
|
66
|
+
spinner.fail('Subscription required');
|
|
67
|
+
console.log();
|
|
68
|
+
console.log(chalk.red(` ${error}`));
|
|
69
|
+
if (tier === 'free') {
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(chalk.dim(' Upgrade at: https://savestate.dev/#pricing'));
|
|
72
|
+
}
|
|
73
|
+
console.log();
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
spinner.succeed(`Subscription verified (${tier.toUpperCase()})`);
|
|
33
77
|
await enableSchedule(options.every);
|
|
34
78
|
return;
|
|
35
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
* Storage Backend Resolver
|
|
3
3
|
*
|
|
4
4
|
* Creates a storage backend instance from config.
|
|
5
|
+
* Cloud storage (S3/R2/B2) requires Pro or Team subscription.
|
|
5
6
|
*/
|
|
6
7
|
import type { SaveStateConfig, StorageBackend } from '../types.js';
|
|
7
8
|
/**
|
|
8
9
|
* Create a storage backend from the config's storage section.
|
|
10
|
+
*
|
|
11
|
+
* Note: Direct cloud storage (s3/r2/b2) has been removed from the CLI.
|
|
12
|
+
* Use `savestate cloud push/pull` for cloud backups (requires Pro subscription).
|
|
9
13
|
*/
|
|
10
14
|
export declare function resolveStorage(config: SaveStateConfig): StorageBackend;
|
|
11
15
|
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/storage/resolve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/storage/resolve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGnE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CA2BtE"}
|
package/dist/storage/resolve.js
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
* Storage Backend Resolver
|
|
3
3
|
*
|
|
4
4
|
* Creates a storage backend instance from config.
|
|
5
|
+
* Cloud storage (S3/R2/B2) requires Pro or Team subscription.
|
|
5
6
|
*/
|
|
6
7
|
import { LocalStorageBackend } from './local.js';
|
|
7
|
-
import { S3Storage } from './s3.js';
|
|
8
8
|
/**
|
|
9
9
|
* Create a storage backend from the config's storage section.
|
|
10
|
+
*
|
|
11
|
+
* Note: Direct cloud storage (s3/r2/b2) has been removed from the CLI.
|
|
12
|
+
* Use `savestate cloud push/pull` for cloud backups (requires Pro subscription).
|
|
10
13
|
*/
|
|
11
14
|
export function resolveStorage(config) {
|
|
12
15
|
const { type, options } = config.storage;
|
|
@@ -18,19 +21,15 @@ export function resolveStorage(config) {
|
|
|
18
21
|
case 's3':
|
|
19
22
|
case 'r2':
|
|
20
23
|
case 'b2':
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
prefix: options.prefix,
|
|
28
|
-
timeoutMs: options.timeoutMs,
|
|
29
|
-
maxRetries: options.maxRetries,
|
|
30
|
-
});
|
|
24
|
+
throw new Error(`Direct cloud storage (${type}) has been removed.\n\n` +
|
|
25
|
+
`Cloud backups are now managed through the SaveState API:\n` +
|
|
26
|
+
` savestate cloud push Push local snapshots to cloud (Pro)\n` +
|
|
27
|
+
` savestate cloud pull Pull snapshots from cloud (Pro)\n` +
|
|
28
|
+
` savestate cloud list List cloud snapshots (Pro)\n\n` +
|
|
29
|
+
`Upgrade at: https://savestate.dev/#pricing`);
|
|
31
30
|
default:
|
|
32
31
|
throw new Error(`Unknown storage backend: ${type}. ` +
|
|
33
|
-
`Supported: local
|
|
32
|
+
`Supported: local (use 'savestate cloud' for cloud storage).`);
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
35
|
//# sourceMappingURL=resolve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/storage/resolve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/storage/resolve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB;IACpD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;IAEzC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,mBAAmB,CAAC;gBAC7B,IAAI,EAAE,OAAO,CAAC,IAA0B;aACzC,CAAC,CAAC;QAEL,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACP,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,yBAAyB;gBACtD,4DAA4D;gBAC5D,kEAAkE;gBAClE,8DAA8D;gBAC9D,2DAA2D;gBAC3D,4CAA4C,CAC7C,CAAC;QAEJ;YACE,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,IAAI;gBACpC,6DAA6D,CAC9D,CAAC;IACN,CAAC;AACH,CAAC"}
|