@tuskydp/cli 0.1.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/dist/bin/tuskydp.d.ts +3 -0
- package/dist/bin/tuskydp.d.ts.map +1 -0
- package/dist/bin/tuskydp.js +3 -0
- package/dist/bin/tuskydp.js.map +1 -0
- package/dist/src/client.d.ts +120 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +152 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/commands/account.d.ts +3 -0
- package/dist/src/commands/account.d.ts.map +1 -0
- package/dist/src/commands/account.js +66 -0
- package/dist/src/commands/account.js.map +1 -0
- package/dist/src/commands/auth.d.ts +3 -0
- package/dist/src/commands/auth.d.ts.map +1 -0
- package/dist/src/commands/auth.js +171 -0
- package/dist/src/commands/auth.js.map +1 -0
- package/dist/src/commands/decrypt.d.ts +15 -0
- package/dist/src/commands/decrypt.d.ts.map +1 -0
- package/dist/src/commands/decrypt.js +224 -0
- package/dist/src/commands/decrypt.js.map +1 -0
- package/dist/src/commands/download.d.ts +5 -0
- package/dist/src/commands/download.d.ts.map +1 -0
- package/dist/src/commands/download.js +67 -0
- package/dist/src/commands/download.js.map +1 -0
- package/dist/src/commands/encryption.d.ts +3 -0
- package/dist/src/commands/encryption.d.ts.map +1 -0
- package/dist/src/commands/encryption.js +254 -0
- package/dist/src/commands/encryption.js.map +1 -0
- package/dist/src/commands/export.d.ts +70 -0
- package/dist/src/commands/export.d.ts.map +1 -0
- package/dist/src/commands/export.js +178 -0
- package/dist/src/commands/export.js.map +1 -0
- package/dist/src/commands/files.d.ts +3 -0
- package/dist/src/commands/files.d.ts.map +1 -0
- package/dist/src/commands/files.js +179 -0
- package/dist/src/commands/files.js.map +1 -0
- package/dist/src/commands/mcp.d.ts +8 -0
- package/dist/src/commands/mcp.d.ts.map +1 -0
- package/dist/src/commands/mcp.js +178 -0
- package/dist/src/commands/mcp.js.map +1 -0
- package/dist/src/commands/rehydrate.d.ts +5 -0
- package/dist/src/commands/rehydrate.d.ts.map +1 -0
- package/dist/src/commands/rehydrate.js +27 -0
- package/dist/src/commands/rehydrate.js.map +1 -0
- package/dist/src/commands/tui.d.ts +3 -0
- package/dist/src/commands/tui.d.ts.map +1 -0
- package/dist/src/commands/tui.js +10 -0
- package/dist/src/commands/tui.js.map +1 -0
- package/dist/src/commands/upload.d.ts +6 -0
- package/dist/src/commands/upload.d.ts.map +1 -0
- package/dist/src/commands/upload.js +121 -0
- package/dist/src/commands/upload.js.map +1 -0
- package/dist/src/commands/vault.d.ts +3 -0
- package/dist/src/commands/vault.d.ts.map +1 -0
- package/dist/src/commands/vault.js +118 -0
- package/dist/src/commands/vault.js.map +1 -0
- package/dist/src/config.d.ts +15 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +26 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/crypto.d.ts +16 -0
- package/dist/src/crypto.d.ts.map +1 -0
- package/dist/src/crypto.js +95 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +59 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/keyring.d.ts +4 -0
- package/dist/src/lib/keyring.d.ts.map +1 -0
- package/dist/src/lib/keyring.js +51 -0
- package/dist/src/lib/keyring.js.map +1 -0
- package/dist/src/lib/output.d.ts +6 -0
- package/dist/src/lib/output.d.ts.map +1 -0
- package/dist/src/lib/output.js +37 -0
- package/dist/src/lib/output.js.map +1 -0
- package/dist/src/lib/progress.d.ts +2 -0
- package/dist/src/lib/progress.d.ts.map +1 -0
- package/dist/src/lib/progress.js +5 -0
- package/dist/src/lib/progress.js.map +1 -0
- package/dist/src/lib/resolve.d.ts +3 -0
- package/dist/src/lib/resolve.d.ts.map +1 -0
- package/dist/src/lib/resolve.js +25 -0
- package/dist/src/lib/resolve.js.map +1 -0
- package/dist/src/mcp/context.d.ts +19 -0
- package/dist/src/mcp/context.d.ts.map +1 -0
- package/dist/src/mcp/context.js +8 -0
- package/dist/src/mcp/context.js.map +1 -0
- package/dist/src/mcp/server.d.ts +13 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +113 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools/account.d.ts +7 -0
- package/dist/src/mcp/tools/account.d.ts.map +1 -0
- package/dist/src/mcp/tools/account.js +31 -0
- package/dist/src/mcp/tools/account.js.map +1 -0
- package/dist/src/mcp/tools/files.d.ts +10 -0
- package/dist/src/mcp/tools/files.d.ts.map +1 -0
- package/dist/src/mcp/tools/files.js +310 -0
- package/dist/src/mcp/tools/files.js.map +1 -0
- package/dist/src/mcp/tools/folders.d.ts +7 -0
- package/dist/src/mcp/tools/folders.d.ts.map +1 -0
- package/dist/src/mcp/tools/folders.js +67 -0
- package/dist/src/mcp/tools/folders.js.map +1 -0
- package/dist/src/mcp/tools/helpers.d.ts +15 -0
- package/dist/src/mcp/tools/helpers.d.ts.map +1 -0
- package/dist/src/mcp/tools/helpers.js +25 -0
- package/dist/src/mcp/tools/helpers.js.map +1 -0
- package/dist/src/mcp/tools/trash.d.ts +7 -0
- package/dist/src/mcp/tools/trash.d.ts.map +1 -0
- package/dist/src/mcp/tools/trash.js +46 -0
- package/dist/src/mcp/tools/trash.js.map +1 -0
- package/dist/src/mcp/tools/vaults.d.ts +7 -0
- package/dist/src/mcp/tools/vaults.d.ts.map +1 -0
- package/dist/src/mcp/tools/vaults.js +85 -0
- package/dist/src/mcp/tools/vaults.js.map +1 -0
- package/dist/src/sdk.d.ts +53 -0
- package/dist/src/sdk.d.ts.map +1 -0
- package/dist/src/sdk.js +88 -0
- package/dist/src/sdk.js.map +1 -0
- package/dist/src/tui/auth-screen.d.ts +6 -0
- package/dist/src/tui/auth-screen.d.ts.map +1 -0
- package/dist/src/tui/auth-screen.js +165 -0
- package/dist/src/tui/auth-screen.js.map +1 -0
- package/dist/src/tui/dialogs.d.ts +10 -0
- package/dist/src/tui/dialogs.d.ts.map +1 -0
- package/dist/src/tui/dialogs.js +303 -0
- package/dist/src/tui/dialogs.js.map +1 -0
- package/dist/src/tui/files-panel.d.ts +34 -0
- package/dist/src/tui/files-panel.d.ts.map +1 -0
- package/dist/src/tui/files-panel.js +135 -0
- package/dist/src/tui/files-panel.js.map +1 -0
- package/dist/src/tui/helpers.d.ts +38 -0
- package/dist/src/tui/helpers.d.ts.map +1 -0
- package/dist/src/tui/helpers.js +187 -0
- package/dist/src/tui/helpers.js.map +1 -0
- package/dist/src/tui/index.d.ts +2 -0
- package/dist/src/tui/index.d.ts.map +1 -0
- package/dist/src/tui/index.js +382 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/overview.d.ts +4 -0
- package/dist/src/tui/overview.d.ts.map +1 -0
- package/dist/src/tui/overview.js +136 -0
- package/dist/src/tui/overview.js.map +1 -0
- package/dist/src/tui/status-bar.d.ts +18 -0
- package/dist/src/tui/status-bar.d.ts.map +1 -0
- package/dist/src/tui/status-bar.js +54 -0
- package/dist/src/tui/status-bar.js.map +1 -0
- package/dist/src/tui/vaults-panel.d.ts +26 -0
- package/dist/src/tui/vaults-panel.d.ts.map +1 -0
- package/dist/src/tui/vaults-panel.js +118 -0
- package/dist/src/tui/vaults-panel.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuskydp.d.ts","sourceRoot":"","sources":["../../bin/tuskydp.ts"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuskydp.js","sourceRoot":"","sources":["../../bin/tuskydp.ts"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export declare class TuskyDPApiError extends Error {
|
|
2
|
+
statusCode: number;
|
|
3
|
+
constructor(statusCode: number, message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class TuskyDPClient {
|
|
6
|
+
private apiUrl;
|
|
7
|
+
private apiKey;
|
|
8
|
+
constructor(apiUrl: string, apiKey: string);
|
|
9
|
+
private request;
|
|
10
|
+
createVault(name: string, description?: string, visibility?: 'public' | 'private'): Promise<{
|
|
11
|
+
vault: any;
|
|
12
|
+
}>;
|
|
13
|
+
listVaults(): Promise<{
|
|
14
|
+
vaults: any[];
|
|
15
|
+
}>;
|
|
16
|
+
getVault(vaultId: string): Promise<{
|
|
17
|
+
vault: any;
|
|
18
|
+
}>;
|
|
19
|
+
updateVault(vaultId: string, updates: {
|
|
20
|
+
name?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
vault: any;
|
|
24
|
+
}>;
|
|
25
|
+
deleteVault(vaultId: string, force?: boolean): Promise<{
|
|
26
|
+
success: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
requestUpload(params: {
|
|
29
|
+
name: string;
|
|
30
|
+
mimeType: string;
|
|
31
|
+
sizeBytes: number;
|
|
32
|
+
vaultId: string;
|
|
33
|
+
wrappedKey?: string;
|
|
34
|
+
encryptionIv?: string;
|
|
35
|
+
plaintextSizeBytes?: number;
|
|
36
|
+
plaintextChecksumSha256?: string;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
fileId: string;
|
|
39
|
+
uploadUrl: string;
|
|
40
|
+
spacesKey: string;
|
|
41
|
+
}>;
|
|
42
|
+
confirmUpload(fileId: string): Promise<{
|
|
43
|
+
file: any;
|
|
44
|
+
}>;
|
|
45
|
+
getDownloadUrl(fileId: string): Promise<{
|
|
46
|
+
downloadUrl: string | null;
|
|
47
|
+
status: string;
|
|
48
|
+
encryption: any;
|
|
49
|
+
message?: string;
|
|
50
|
+
pollUrl?: string;
|
|
51
|
+
}>;
|
|
52
|
+
listFiles(params?: {
|
|
53
|
+
vaultId?: string;
|
|
54
|
+
limit?: number;
|
|
55
|
+
sortBy?: string;
|
|
56
|
+
order?: string;
|
|
57
|
+
}): Promise<{
|
|
58
|
+
files: any[];
|
|
59
|
+
nextCursor: string | null;
|
|
60
|
+
}>;
|
|
61
|
+
getFileInfo(fileId: string): Promise<any>;
|
|
62
|
+
deleteFile(fileId: string): Promise<{
|
|
63
|
+
success: boolean;
|
|
64
|
+
}>;
|
|
65
|
+
retryFile(fileId: string): Promise<{
|
|
66
|
+
file: any;
|
|
67
|
+
message: string;
|
|
68
|
+
}>;
|
|
69
|
+
retryAllFiles(): Promise<{
|
|
70
|
+
retriedCount: number;
|
|
71
|
+
message: string;
|
|
72
|
+
}>;
|
|
73
|
+
getEncryptionParams(): Promise<{
|
|
74
|
+
setupComplete: boolean;
|
|
75
|
+
salt?: string;
|
|
76
|
+
verifier?: string;
|
|
77
|
+
encryptedMasterKey?: string;
|
|
78
|
+
}>;
|
|
79
|
+
setupEncryption(salt: string, verifier: string, encryptedMasterKey: string, wrappedMasterKeyBackup: string): Promise<{
|
|
80
|
+
success: boolean;
|
|
81
|
+
}>;
|
|
82
|
+
getRecoveryData(): Promise<{
|
|
83
|
+
wrappedMasterKeyBackup: string;
|
|
84
|
+
}>;
|
|
85
|
+
resetEncryption(salt: string, verifier: string, encryptedMasterKey: string, wrappedMasterKeyBackup: string): Promise<{
|
|
86
|
+
success: boolean;
|
|
87
|
+
}>;
|
|
88
|
+
register(email: string, password: string, displayName?: string): Promise<{
|
|
89
|
+
user: any;
|
|
90
|
+
accessToken: string;
|
|
91
|
+
refreshToken: string;
|
|
92
|
+
}>;
|
|
93
|
+
login(email: string, password: string): Promise<{
|
|
94
|
+
user: any;
|
|
95
|
+
accessToken: string;
|
|
96
|
+
refreshToken: string;
|
|
97
|
+
}>;
|
|
98
|
+
createApiKeyWithJwt(accessToken: string, name: string): Promise<{
|
|
99
|
+
apiKey: string;
|
|
100
|
+
name: string;
|
|
101
|
+
keyPrefix: string;
|
|
102
|
+
}>;
|
|
103
|
+
getAccount(): Promise<any>;
|
|
104
|
+
getPlans(): Promise<{
|
|
105
|
+
plans: any[];
|
|
106
|
+
}>;
|
|
107
|
+
createApiKey(params: {
|
|
108
|
+
name: string;
|
|
109
|
+
scopes?: string[];
|
|
110
|
+
vaultIds?: string[];
|
|
111
|
+
expiresInDays?: number;
|
|
112
|
+
}): Promise<any>;
|
|
113
|
+
listApiKeys(): Promise<{
|
|
114
|
+
apiKeys: any[];
|
|
115
|
+
}>;
|
|
116
|
+
revokeApiKey(keyId: string): Promise<{
|
|
117
|
+
success: boolean;
|
|
118
|
+
}>;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
const VERSION = '0.1.0';
|
|
2
|
+
export class TuskyDPApiError extends Error {
|
|
3
|
+
statusCode;
|
|
4
|
+
constructor(statusCode, message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.statusCode = statusCode;
|
|
7
|
+
this.name = 'TuskyDPApiError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class TuskyDPClient {
|
|
11
|
+
apiUrl;
|
|
12
|
+
apiKey;
|
|
13
|
+
constructor(apiUrl, apiKey) {
|
|
14
|
+
this.apiUrl = apiUrl.replace(/\/$/, '');
|
|
15
|
+
this.apiKey = apiKey;
|
|
16
|
+
}
|
|
17
|
+
async request(method, path, body) {
|
|
18
|
+
const headers = {
|
|
19
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
20
|
+
'User-Agent': `tusky-cli/${VERSION}`,
|
|
21
|
+
};
|
|
22
|
+
if (body) {
|
|
23
|
+
headers['Content-Type'] = 'application/json';
|
|
24
|
+
}
|
|
25
|
+
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
26
|
+
method,
|
|
27
|
+
headers,
|
|
28
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
29
|
+
});
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
32
|
+
throw new TuskyDPApiError(response.status, error.error || 'Unknown error');
|
|
33
|
+
}
|
|
34
|
+
return response.json();
|
|
35
|
+
}
|
|
36
|
+
// Vaults
|
|
37
|
+
async createVault(name, description, visibility) {
|
|
38
|
+
return this.request('POST', '/api/vaults', { name, description, visibility: visibility || 'private' });
|
|
39
|
+
}
|
|
40
|
+
async listVaults() {
|
|
41
|
+
return this.request('GET', '/api/vaults');
|
|
42
|
+
}
|
|
43
|
+
async getVault(vaultId) {
|
|
44
|
+
return this.request('GET', `/api/vaults/${vaultId}`);
|
|
45
|
+
}
|
|
46
|
+
async updateVault(vaultId, updates) {
|
|
47
|
+
return this.request('PATCH', `/api/vaults/${vaultId}`, updates);
|
|
48
|
+
}
|
|
49
|
+
async deleteVault(vaultId, force = false) {
|
|
50
|
+
return this.request('DELETE', `/api/vaults/${vaultId}?force=${force}`);
|
|
51
|
+
}
|
|
52
|
+
// Files
|
|
53
|
+
async requestUpload(params) {
|
|
54
|
+
return this.request('POST', '/api/files/upload', params);
|
|
55
|
+
}
|
|
56
|
+
async confirmUpload(fileId) {
|
|
57
|
+
return this.request('POST', `/api/files/${fileId}/confirm`);
|
|
58
|
+
}
|
|
59
|
+
async getDownloadUrl(fileId) {
|
|
60
|
+
return this.request('GET', `/api/files/${fileId}/download`);
|
|
61
|
+
}
|
|
62
|
+
async listFiles(params) {
|
|
63
|
+
const qs = params ? new URLSearchParams(Object.fromEntries(Object.entries(params).filter(([, v]) => v !== undefined).map(([k, v]) => [k, String(v)]))).toString() : '';
|
|
64
|
+
return this.request('GET', `/api/files${qs ? `?${qs}` : ''}`);
|
|
65
|
+
}
|
|
66
|
+
async getFileInfo(fileId) {
|
|
67
|
+
return this.request('GET', `/api/files/${fileId}/status`);
|
|
68
|
+
}
|
|
69
|
+
async deleteFile(fileId) {
|
|
70
|
+
return this.request('DELETE', `/api/files/${fileId}`);
|
|
71
|
+
}
|
|
72
|
+
async retryFile(fileId) {
|
|
73
|
+
return this.request('POST', `/api/files/${fileId}/retry`);
|
|
74
|
+
}
|
|
75
|
+
async retryAllFiles() {
|
|
76
|
+
return this.request('POST', '/api/files/retry-all');
|
|
77
|
+
}
|
|
78
|
+
// Encryption
|
|
79
|
+
async getEncryptionParams() {
|
|
80
|
+
return this.request('GET', '/api/account/encryption/params');
|
|
81
|
+
}
|
|
82
|
+
async setupEncryption(salt, verifier, encryptedMasterKey, wrappedMasterKeyBackup) {
|
|
83
|
+
return this.request('POST', '/api/account/encryption/setup', { salt, verifier, encryptedMasterKey, wrappedMasterKeyBackup });
|
|
84
|
+
}
|
|
85
|
+
async getRecoveryData() {
|
|
86
|
+
return this.request('GET', '/api/account/encryption/recovery');
|
|
87
|
+
}
|
|
88
|
+
async resetEncryption(salt, verifier, encryptedMasterKey, wrappedMasterKeyBackup) {
|
|
89
|
+
return this.request('POST', '/api/account/encryption/reset', { salt, verifier, encryptedMasterKey, wrappedMasterKeyBackup });
|
|
90
|
+
}
|
|
91
|
+
// Auth (no stored API key needed)
|
|
92
|
+
async register(email, password, displayName) {
|
|
93
|
+
const response = await fetch(`${this.apiUrl}/api/auth/register`, {
|
|
94
|
+
method: 'POST',
|
|
95
|
+
headers: { 'Content-Type': 'application/json', 'User-Agent': `tusky-cli/${VERSION}` },
|
|
96
|
+
body: JSON.stringify({ email, password, displayName }),
|
|
97
|
+
});
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
100
|
+
throw new TuskyDPApiError(response.status, error.error || 'Unknown error');
|
|
101
|
+
}
|
|
102
|
+
return response.json();
|
|
103
|
+
}
|
|
104
|
+
async login(email, password) {
|
|
105
|
+
const response = await fetch(`${this.apiUrl}/api/auth/login`, {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
headers: { 'Content-Type': 'application/json', 'User-Agent': `tusky-cli/${VERSION}` },
|
|
108
|
+
body: JSON.stringify({ email, password }),
|
|
109
|
+
});
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
112
|
+
throw new TuskyDPApiError(response.status, error.error || 'Unknown error');
|
|
113
|
+
}
|
|
114
|
+
return response.json();
|
|
115
|
+
}
|
|
116
|
+
async createApiKeyWithJwt(accessToken, name) {
|
|
117
|
+
const response = await fetch(`${this.apiUrl}/api/auth/api-keys`, {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json',
|
|
121
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
122
|
+
'User-Agent': `tusky-cli/${VERSION}`,
|
|
123
|
+
},
|
|
124
|
+
body: JSON.stringify({ name, scopes: ['files:read', 'files:write', 'vaults:read', 'vaults:write'] }),
|
|
125
|
+
});
|
|
126
|
+
if (!response.ok) {
|
|
127
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
128
|
+
throw new TuskyDPApiError(response.status, error.error || 'Unknown error');
|
|
129
|
+
}
|
|
130
|
+
return response.json();
|
|
131
|
+
}
|
|
132
|
+
// Account
|
|
133
|
+
async getAccount() {
|
|
134
|
+
return this.request('GET', '/api/account');
|
|
135
|
+
}
|
|
136
|
+
// Plans
|
|
137
|
+
async getPlans() {
|
|
138
|
+
// Public endpoint — no auth needed but request() adds it harmlessly
|
|
139
|
+
return this.request('GET', '/api/plans');
|
|
140
|
+
}
|
|
141
|
+
// API Keys
|
|
142
|
+
async createApiKey(params) {
|
|
143
|
+
return this.request('POST', '/api/auth/api-keys', params);
|
|
144
|
+
}
|
|
145
|
+
async listApiKeys() {
|
|
146
|
+
return this.request('GET', '/api/auth/api-keys');
|
|
147
|
+
}
|
|
148
|
+
async revokeApiKey(keyId) {
|
|
149
|
+
return this.request('DELETE', `/api/auth/api-keys/${keyId}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAwEvD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { cliConfig, getApiUrl, getApiKey } from '../config.js';
|
|
3
|
+
import { createSDKClient, AuthClient } from '../sdk.js';
|
|
4
|
+
import { formatBytes } from '@tuskydp/shared/plans.js';
|
|
5
|
+
export function registerAccountCommands(program) {
|
|
6
|
+
const account = program.command('account').description('Account management');
|
|
7
|
+
account.command('info')
|
|
8
|
+
.description('Show account info')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
11
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
12
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
13
|
+
const format = program.opts().format || cliConfig.get('outputFormat');
|
|
14
|
+
const acct = await sdk.account.get();
|
|
15
|
+
if (format === 'json') {
|
|
16
|
+
console.log(JSON.stringify(acct, null, 2));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log(`Email: ${acct.email}`);
|
|
20
|
+
console.log(`Plan: ${acct.planName}`);
|
|
21
|
+
console.log(`Storage Used: ${formatBytes(acct.storageUsedBytes)} / ${formatBytes(acct.storageLimitBytes)} (${((acct.storageUsedBytes / acct.storageLimitBytes) * 100).toFixed(1)}%)`);
|
|
22
|
+
console.log(`Encryption: ${acct.encryptionSetupComplete ? chalk.green('Set up') : chalk.yellow('Not set up')}`);
|
|
23
|
+
});
|
|
24
|
+
account.command('plan')
|
|
25
|
+
.description('Show current plan and available upgrades')
|
|
26
|
+
.action(async () => {
|
|
27
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
28
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
29
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
30
|
+
const authClient = new AuthClient(apiUrl);
|
|
31
|
+
const acct = await sdk.account.get();
|
|
32
|
+
const { plans } = await authClient.getPlans();
|
|
33
|
+
const currentTier = acct.planTier;
|
|
34
|
+
console.log(chalk.bold('Available Plans:\n'));
|
|
35
|
+
for (const plan of plans) {
|
|
36
|
+
const isCurrent = plan.tier === currentTier;
|
|
37
|
+
const prefix = isCurrent ? chalk.green('> ') : ' ';
|
|
38
|
+
const label = isCurrent ? chalk.green.bold(plan.displayName) : plan.displayName;
|
|
39
|
+
const price = plan.priceMonthly === 0 ? 'Free' : `$${(plan.priceMonthly / 100).toFixed(0)}/mo`;
|
|
40
|
+
console.log(`${prefix}${label} (${price})`);
|
|
41
|
+
console.log(` Storage: ${formatBytes(plan.storageLimitBytes)}, Max file: ${formatBytes(plan.maxFileSizeBytes)}`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
account.command('usage')
|
|
45
|
+
.description('Show detailed usage breakdown')
|
|
46
|
+
.action(async () => {
|
|
47
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
48
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
49
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
50
|
+
const acct = await sdk.account.get();
|
|
51
|
+
const vaults = await sdk.vaults.list();
|
|
52
|
+
console.log(chalk.bold('Storage Usage by Vault:\n'));
|
|
53
|
+
for (const v of vaults) {
|
|
54
|
+
const icon = v.visibility === 'private' ? '[private]' : '[public]';
|
|
55
|
+
console.log(` ${v.name} ${icon} — ${v.fileCount} files, ${formatBytes(v.totalSizeBytes)}`);
|
|
56
|
+
}
|
|
57
|
+
console.log('');
|
|
58
|
+
console.log(` Total: ${formatBytes(acct.storageUsedBytes)} / ${formatBytes(acct.storageLimitBytes)}`);
|
|
59
|
+
});
|
|
60
|
+
// Default action for `tuskydp account` with no subcommand
|
|
61
|
+
account.action(async () => {
|
|
62
|
+
// Run `info` subcommand
|
|
63
|
+
await account.commands.find(c => c.name() === 'info')?.parseAsync([], { from: 'user' });
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAqLpD"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { cliConfig, getApiUrl, getApiKey } from '../config.js';
|
|
3
|
+
import { createSDKClient, AuthClient } from '../sdk.js';
|
|
4
|
+
import { createTable, formatDate } from '../lib/output.js';
|
|
5
|
+
import { clearSession } from '../lib/keyring.js';
|
|
6
|
+
export function registerAuthCommands(program) {
|
|
7
|
+
program.command('signup')
|
|
8
|
+
.description('Create a new account')
|
|
9
|
+
.argument('<email>', 'Email address')
|
|
10
|
+
.argument('<password>', 'Password')
|
|
11
|
+
.option('--name <name>', 'Display name for the account')
|
|
12
|
+
.action(async (email, password, options) => {
|
|
13
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
14
|
+
const authClient = new AuthClient(apiUrl);
|
|
15
|
+
try {
|
|
16
|
+
const { user, accessToken } = await authClient.register(email, password, options.name);
|
|
17
|
+
const keyResult = await authClient.createApiKeyWithJwt(accessToken, 'CLI Key');
|
|
18
|
+
cliConfig.set('apiKey', keyResult.apiKey);
|
|
19
|
+
cliConfig.set('apiUrl', apiUrl);
|
|
20
|
+
console.log(chalk.green(`✓ Account created: ${user.email}`));
|
|
21
|
+
console.log(chalk.dim(`API: ${apiUrl}`));
|
|
22
|
+
console.log('');
|
|
23
|
+
console.log(chalk.yellow('Save this API key — it will not be shown again:'));
|
|
24
|
+
console.log(chalk.bold(keyResult.apiKey));
|
|
25
|
+
console.log('');
|
|
26
|
+
console.log(chalk.dim('API key auto-saved to config. You\'re logged in.'));
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
console.error(chalk.red(`Signup failed: ${err.message}`));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
program.command('login')
|
|
34
|
+
.description('Authenticate with TuskyDP')
|
|
35
|
+
.option('--api-key <key>', 'Authenticate with an existing API key')
|
|
36
|
+
.option('--email <email>', 'Email address for login')
|
|
37
|
+
.option('--password <password>', 'Password for login')
|
|
38
|
+
.action(async (options) => {
|
|
39
|
+
// Check both local and parent-level --api-key (Commander.js may assign to parent)
|
|
40
|
+
const apiKey = options.apiKey || program.opts().apiKey;
|
|
41
|
+
if (apiKey) {
|
|
42
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
43
|
+
try {
|
|
44
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
45
|
+
const account = await sdk.account.get();
|
|
46
|
+
cliConfig.set('apiKey', apiKey);
|
|
47
|
+
cliConfig.set('apiUrl', apiUrl);
|
|
48
|
+
console.log(chalk.green(`Authenticated as ${account.email} (${account.planName} plan)`));
|
|
49
|
+
console.log(chalk.dim(`API: ${apiUrl}`));
|
|
50
|
+
console.log(chalk.dim(`API key stored in config`));
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
console.error(chalk.red(`Authentication failed: ${err.message}`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (options.email && options.password) {
|
|
59
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
60
|
+
const authClient = new AuthClient(apiUrl);
|
|
61
|
+
try {
|
|
62
|
+
const { accessToken } = await authClient.login(options.email, options.password);
|
|
63
|
+
const keyResult = await authClient.createApiKeyWithJwt(accessToken, 'CLI Key');
|
|
64
|
+
cliConfig.set('apiKey', keyResult.apiKey);
|
|
65
|
+
cliConfig.set('apiUrl', apiUrl);
|
|
66
|
+
console.log(chalk.green(`Authenticated as ${options.email}`));
|
|
67
|
+
console.log(chalk.dim(`API: ${apiUrl}`));
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log(chalk.yellow('Save this API key — it will not be shown again:'));
|
|
70
|
+
console.log(chalk.bold(keyResult.apiKey));
|
|
71
|
+
console.log('');
|
|
72
|
+
console.log(chalk.dim('API key auto-saved to config. You\'re logged in.'));
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.error(chalk.red(`Login failed: ${err.message}`));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.log(chalk.yellow('Please provide credentials to log in.'));
|
|
81
|
+
console.log(chalk.dim('Use: tusky login --email <email> --password <password>'));
|
|
82
|
+
console.log(chalk.dim(' or: tusky login --api-key <key>'));
|
|
83
|
+
});
|
|
84
|
+
program.command('logout')
|
|
85
|
+
.description('Clear stored credentials and encryption session')
|
|
86
|
+
.action(() => {
|
|
87
|
+
cliConfig.delete('apiKey');
|
|
88
|
+
cliConfig.delete('defaultVault');
|
|
89
|
+
clearSession();
|
|
90
|
+
console.log(chalk.green('Logged out. Credentials and session cleared.'));
|
|
91
|
+
});
|
|
92
|
+
program.command('whoami')
|
|
93
|
+
.description('Show current user, plan, and storage usage')
|
|
94
|
+
.action(async () => {
|
|
95
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
96
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
97
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
98
|
+
const account = await sdk.account.get();
|
|
99
|
+
console.log(`Email: ${account.email}`);
|
|
100
|
+
console.log(`Plan: ${account.planName} (${account.planTier})`);
|
|
101
|
+
console.log(`Storage: ${account.storageUsedFormatted} / ${account.storageLimitFormatted}`);
|
|
102
|
+
console.log(`Encryption: ${account.encryptionSetupComplete ? chalk.green('Set up') : chalk.yellow('Not set up')}`);
|
|
103
|
+
console.log(`Account ID: ${chalk.dim(account.id)}`);
|
|
104
|
+
});
|
|
105
|
+
// API Key subcommands
|
|
106
|
+
const apiKeys = program.command('api-keys').description('Manage API keys');
|
|
107
|
+
apiKeys.command('list')
|
|
108
|
+
.description('List all API keys')
|
|
109
|
+
.action(async () => {
|
|
110
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
111
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
112
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
113
|
+
const format = program.opts().format || cliConfig.get('outputFormat');
|
|
114
|
+
const keys = await sdk.apiKeys.list();
|
|
115
|
+
if (format === 'json') {
|
|
116
|
+
console.log(JSON.stringify(keys, null, 2));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (keys.length === 0) {
|
|
120
|
+
console.log(chalk.dim('No API keys found.'));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const table = createTable(['Name', 'Prefix', 'Scopes', 'Last Used', 'Created']);
|
|
124
|
+
for (const k of keys) {
|
|
125
|
+
table.push([
|
|
126
|
+
k.name,
|
|
127
|
+
chalk.dim(k.keyPrefix + '...'),
|
|
128
|
+
k.scopes?.join(', ') || chalk.dim('all'),
|
|
129
|
+
k.lastUsedAt ? formatDate(k.lastUsedAt) : chalk.dim('never'),
|
|
130
|
+
formatDate(k.createdAt),
|
|
131
|
+
]);
|
|
132
|
+
}
|
|
133
|
+
console.log(table.toString());
|
|
134
|
+
});
|
|
135
|
+
apiKeys.command('create <name>')
|
|
136
|
+
.description('Create a new API key')
|
|
137
|
+
.option('--scopes <scopes>', 'Comma-separated scopes')
|
|
138
|
+
.option('--vaults <vaults>', 'Comma-separated vault IDs')
|
|
139
|
+
.option('--expires <days>', 'Auto-expire after N days', parseInt)
|
|
140
|
+
.action(async (name, options) => {
|
|
141
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
142
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
143
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
144
|
+
const result = await sdk.apiKeys.create({
|
|
145
|
+
name,
|
|
146
|
+
scopes: options.scopes?.split(','),
|
|
147
|
+
vaultIds: options.vaults?.split(','),
|
|
148
|
+
expiresInDays: options.expires,
|
|
149
|
+
});
|
|
150
|
+
console.log(chalk.yellow('Save this API key — it will not be shown again:'));
|
|
151
|
+
console.log('');
|
|
152
|
+
console.log(chalk.bold(result.apiKey));
|
|
153
|
+
console.log('');
|
|
154
|
+
console.log(`Name: ${result.name}`);
|
|
155
|
+
console.log(`Prefix: ${result.keyPrefix}`);
|
|
156
|
+
if (result.scopes)
|
|
157
|
+
console.log(`Scopes: ${result.scopes.join(', ')}`);
|
|
158
|
+
if (result.expiresAt)
|
|
159
|
+
console.log(`Expires: ${new Date(result.expiresAt).toLocaleDateString()}`);
|
|
160
|
+
});
|
|
161
|
+
apiKeys.command('revoke <key-id>')
|
|
162
|
+
.description('Revoke an API key')
|
|
163
|
+
.action(async (keyId) => {
|
|
164
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
165
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
166
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
167
|
+
await sdk.apiKeys.revoke(keyId);
|
|
168
|
+
console.log(chalk.green('API key revoked.'));
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tusky decrypt` — Decrypt a file downloaded from Walrus.
|
|
3
|
+
*
|
|
4
|
+
* Works in two modes:
|
|
5
|
+
* 1. With --export <manifest.json> — reads wrappedKey/iv from the export
|
|
6
|
+
* manifest, derives master key from passphrase + salt. Fully offline.
|
|
7
|
+
* 2. Without --export — fetches encryption params from the Tusky API and
|
|
8
|
+
* looks up the file metadata by ID. Requires API access.
|
|
9
|
+
*
|
|
10
|
+
* In both modes, the passphrase is resolved from:
|
|
11
|
+
* --passphrase flag > TUSKYDP_PASSWORD env var > interactive prompt
|
|
12
|
+
*/
|
|
13
|
+
import type { Command } from 'commander';
|
|
14
|
+
export declare function registerDecryptCommand(program: Command): void;
|
|
15
|
+
//# sourceMappingURL=decrypt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../src/commands/decrypt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4EzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QA0LtD"}
|