@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":"mcp.js","sourceRoot":"","sources":["../../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rehydrate.d.ts","sourceRoot":"","sources":["../../../src/commands/rehydrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,EAAE,QAAQ,EAAE,OAAO,iBAwBnB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { writeFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { resolveWalrusConfig } from '@tuskydp/shared/walrus-networks.js';
|
|
4
|
+
import { formatBytes } from '../lib/output.js';
|
|
5
|
+
import { createSpinner } from '../lib/progress.js';
|
|
6
|
+
export async function rehydrateCommand(blobId, options, _program) {
|
|
7
|
+
const spinner = createSpinner('Fetching blob from Walrus...');
|
|
8
|
+
spinner.start();
|
|
9
|
+
try {
|
|
10
|
+
const tuskyEnv = process.env.TUSKY_ENV || 'development';
|
|
11
|
+
const walrus = resolveWalrusConfig(tuskyEnv);
|
|
12
|
+
const url = `${walrus.aggregatorUrl}/v1/blobs/${blobId}`;
|
|
13
|
+
const response = await fetch(url);
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`Walrus fetch failed: ${response.status} ${response.statusText}`);
|
|
16
|
+
}
|
|
17
|
+
const arrayBuf = await response.arrayBuffer();
|
|
18
|
+
const fileBuffer = Buffer.from(new Uint8Array(arrayBuf));
|
|
19
|
+
const outputPath = options.output || join(process.cwd(), `blob-${blobId}`);
|
|
20
|
+
writeFileSync(outputPath, fileBuffer);
|
|
21
|
+
spinner.succeed(`Downloaded -> ${outputPath} (${formatBytes(fileBuffer.length)})`);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
spinner.fail(`Rehydrate failed: ${err.message}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=rehydrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rehydrate.js","sourceRoot":"","sources":["../../../src/commands/rehydrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAEtD,EAAE,QAAiB;IAClB,MAAM,OAAO,GAAG,aAAa,CAAC,8BAA8B,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,aAAa,CAAC;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,aAAa,MAAM,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,MAAM,EAAE,CAAC,CAAC;QAC3E,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,CAAC,OAAO,CAAC,iBAAiB,UAAU,KAAK,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../../src/commands/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QAOlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../../src/commands/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCzC,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,EAAE,OAAO,EAAE,OAAO,iBA6FlB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { readFileSync, statSync, readdirSync } from 'fs';
|
|
2
|
+
import { basename, join, resolve } from 'path';
|
|
3
|
+
import { lookup } from 'mime-types';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { getApiUrl, getApiKey } from '../config.js';
|
|
6
|
+
import { createSDKClient } from '../sdk.js';
|
|
7
|
+
import { resolveVault } from '../lib/resolve.js';
|
|
8
|
+
import { formatBytes } from '../lib/output.js';
|
|
9
|
+
import { createSpinner } from '../lib/progress.js';
|
|
10
|
+
import { encryptBuffer } from '../crypto.js';
|
|
11
|
+
import { loadMasterKey } from '../lib/keyring.js';
|
|
12
|
+
async function expandPaths(paths, recursive) {
|
|
13
|
+
const result = [];
|
|
14
|
+
for (const p of paths) {
|
|
15
|
+
const resolved = resolve(p);
|
|
16
|
+
const stat = statSync(resolved, { throwIfNoEntry: false });
|
|
17
|
+
if (!stat) {
|
|
18
|
+
console.warn(chalk.yellow(`Warning: ${p} not found, skipping`));
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (stat.isFile()) {
|
|
22
|
+
result.push(resolved);
|
|
23
|
+
}
|
|
24
|
+
else if (stat.isDirectory() && recursive) {
|
|
25
|
+
const entries = readdirSync(resolved, { withFileTypes: true });
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
if (entry.isFile()) {
|
|
28
|
+
result.push(join(resolved, entry.name));
|
|
29
|
+
}
|
|
30
|
+
else if (entry.isDirectory()) {
|
|
31
|
+
const subFiles = await expandPaths([join(resolved, entry.name)], true);
|
|
32
|
+
result.push(...subFiles);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (stat.isDirectory()) {
|
|
37
|
+
console.warn(chalk.yellow(`Warning: ${p} is a directory. Use --recursive to upload contents.`));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
export async function uploadCommand(paths, options, program) {
|
|
43
|
+
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
44
|
+
const apiKey = getApiKey(program.opts().apiKey);
|
|
45
|
+
const sdk = createSDKClient(apiUrl, apiKey);
|
|
46
|
+
const vaultId = await resolveVault(sdk, options.vault);
|
|
47
|
+
const vault = await sdk.vaults.get(vaultId);
|
|
48
|
+
const isPrivate = vault.visibility === 'private';
|
|
49
|
+
let masterKey = null;
|
|
50
|
+
if (isPrivate) {
|
|
51
|
+
masterKey = loadMasterKey();
|
|
52
|
+
if (!masterKey) {
|
|
53
|
+
console.error(chalk.red('Encryption session not unlocked. Run: tusky encryption unlock'));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const filePaths = await expandPaths(paths, options.recursive);
|
|
58
|
+
if (filePaths.length === 0) {
|
|
59
|
+
console.log(chalk.yellow('No files to upload.'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
let totalSize = 0;
|
|
63
|
+
let successCount = 0;
|
|
64
|
+
for (const filePath of filePaths) {
|
|
65
|
+
const spinner = createSpinner(`Uploading ${basename(filePath)}`);
|
|
66
|
+
spinner.start();
|
|
67
|
+
try {
|
|
68
|
+
const stat = statSync(filePath);
|
|
69
|
+
const fileBuffer = readFileSync(filePath);
|
|
70
|
+
const mimeType = lookup(filePath) || 'application/octet-stream';
|
|
71
|
+
let uploadBody;
|
|
72
|
+
let encryptionMeta = {};
|
|
73
|
+
if (isPrivate && masterKey) {
|
|
74
|
+
spinner.text = `Encrypting ${basename(filePath)}...`;
|
|
75
|
+
const { ciphertext, wrappedKey, iv, plaintextChecksum } = encryptBuffer(fileBuffer, masterKey);
|
|
76
|
+
uploadBody = ciphertext;
|
|
77
|
+
encryptionMeta = {
|
|
78
|
+
wrappedKey,
|
|
79
|
+
encryptionIv: iv,
|
|
80
|
+
plaintextSizeBytes: stat.size,
|
|
81
|
+
plaintextChecksumSha256: plaintextChecksum,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
uploadBody = fileBuffer;
|
|
86
|
+
}
|
|
87
|
+
// Request presigned URL
|
|
88
|
+
spinner.text = `Requesting upload URL for ${basename(filePath)}...`;
|
|
89
|
+
const { fileId, uploadUrl } = await sdk.files.requestUpload({
|
|
90
|
+
name: basename(filePath),
|
|
91
|
+
mimeType,
|
|
92
|
+
sizeBytes: uploadBody.length,
|
|
93
|
+
vaultId,
|
|
94
|
+
...encryptionMeta,
|
|
95
|
+
});
|
|
96
|
+
// Upload to Spaces via presigned URL
|
|
97
|
+
spinner.text = `Uploading ${basename(filePath)} (${formatBytes(uploadBody.length)})...`;
|
|
98
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
99
|
+
method: 'PUT',
|
|
100
|
+
headers: { 'Content-Type': 'application/octet-stream' },
|
|
101
|
+
body: new Uint8Array(uploadBody),
|
|
102
|
+
});
|
|
103
|
+
if (!uploadResponse.ok)
|
|
104
|
+
throw new Error(`Upload failed: ${uploadResponse.status}`);
|
|
105
|
+
// Confirm
|
|
106
|
+
spinner.text = `Confirming ${basename(filePath)}...`;
|
|
107
|
+
await sdk.files.confirmUpload(fileId);
|
|
108
|
+
spinner.succeed(`${basename(filePath)} -> ${fileId} (${formatBytes(uploadBody.length)})`);
|
|
109
|
+
totalSize += uploadBody.length;
|
|
110
|
+
successCount++;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
spinner.fail(`Failed: ${basename(filePath)} — ${err.message}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (filePaths.length > 1) {
|
|
117
|
+
const icon = isPrivate ? 'private' : 'public';
|
|
118
|
+
console.log(`\nUploaded ${successCount} file(s) (${formatBytes(totalSize)}) to vault "${vault.name}" [${icon}]`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,KAAK,UAAU,WAAW,CAAC,KAAe,EAAE,SAAmB;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChE,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,CAAC;qBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBACvE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAe,EAAE,OAGpD,EAAE,OAAgB;IACjB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC;IAEjD,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,GAAG,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,0BAA0B,CAAC;YAEhE,IAAI,UAAkB,CAAC;YACvB,IAAI,cAAc,GAKd,EAAE,CAAC;YAEP,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,GAAG,cAAc,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACrD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC/F,UAAU,GAAG,UAAU,CAAC;gBACxB,cAAc,GAAG;oBACf,UAAU;oBACV,YAAY,EAAE,EAAE;oBAChB,kBAAkB,EAAE,IAAI,CAAC,IAAI;oBAC7B,uBAAuB,EAAE,iBAAiB;iBAC3C,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,UAAU,CAAC;YAC1B,CAAC;YAED,wBAAwB;YACxB,OAAO,CAAC,IAAI,GAAG,6BAA6B,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;gBAC1D,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBACxB,QAAQ;gBACR,SAAS,EAAE,UAAU,CAAC,MAAM;gBAC5B,OAAO;gBACP,GAAG,cAAc;aAClB,CAAC,CAAC;YAEH,qCAAqC;YACrC,OAAO,CAAC,IAAI,GAAG,aAAa,QAAQ,CAAC,QAAQ,CAAC,KAAK,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;YACxF,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBAC5C,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE;gBACvD,IAAI,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC;aACjC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;YAEnF,UAAU;YACV,OAAO,CAAC,IAAI,GAAG,cAAc,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrD,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAEtC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1F,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC;YAC/B,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,YAAY,aAAa,WAAW,CAAC,SAAS,CAAC,eAAe,KAAK,CAAC,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;IACnH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/commands/vault.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA2HrD"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { cliConfig } from '../config.js';
|
|
4
|
+
import { getSDKClientFromParent } from '../sdk.js';
|
|
5
|
+
import { createTable, formatBytes, shortId } from '../lib/output.js';
|
|
6
|
+
import { resolveVault } from '../lib/resolve.js';
|
|
7
|
+
export function registerVaultCommands(program) {
|
|
8
|
+
const vault = program.command('vault').description('Manage vaults');
|
|
9
|
+
vault.command('create <name>')
|
|
10
|
+
.description('Create a new vault (private/encrypted by default)')
|
|
11
|
+
.option('--public', 'Create as public vault (unencrypted, shareable via URL)')
|
|
12
|
+
.option('--description <text>', 'Vault description')
|
|
13
|
+
.action(async (name, options) => {
|
|
14
|
+
const sdk = getSDKClientFromParent(vault);
|
|
15
|
+
const visibility = options.public ? 'public' : 'private';
|
|
16
|
+
if (visibility === 'private') {
|
|
17
|
+
try {
|
|
18
|
+
const { setupComplete } = await sdk.account.getEncryptionParams();
|
|
19
|
+
if (!setupComplete) {
|
|
20
|
+
console.log(chalk.red('Encryption must be set up before creating private vaults.'));
|
|
21
|
+
console.log(chalk.dim(' Run: tusky encryption setup'));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// If endpoint fails, proceed anyway
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const created = await sdk.vaults.create({ name, description: options.description, visibility });
|
|
30
|
+
const icon = visibility === 'private' ? 'private' : 'public';
|
|
31
|
+
console.log(chalk.green(`Created ${visibility} vault [${icon}] "${created.name}" (${created.id})`));
|
|
32
|
+
});
|
|
33
|
+
vault.command('list')
|
|
34
|
+
.description('List all vaults')
|
|
35
|
+
.action(async () => {
|
|
36
|
+
const sdk = getSDKClientFromParent(vault);
|
|
37
|
+
const format = program.opts().format || cliConfig.get('outputFormat');
|
|
38
|
+
const vaults = await sdk.vaults.list();
|
|
39
|
+
if (format === 'json') {
|
|
40
|
+
console.log(JSON.stringify(vaults, null, 2));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (vaults.length === 0) {
|
|
44
|
+
console.log(chalk.dim('No vaults found.'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const table = createTable(['Name', 'Slug', 'Visibility', 'Files', 'Size', 'ID']);
|
|
48
|
+
for (const v of vaults) {
|
|
49
|
+
const visIcon = v.visibility === 'private' ? 'private' : 'public';
|
|
50
|
+
table.push([
|
|
51
|
+
v.isDefault ? `${v.name} ${chalk.dim('(default)')}` : v.name,
|
|
52
|
+
v.slug,
|
|
53
|
+
visIcon,
|
|
54
|
+
String(v.fileCount),
|
|
55
|
+
formatBytes(v.totalSizeBytes),
|
|
56
|
+
chalk.dim(shortId(v.id)),
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
console.log(table.toString());
|
|
60
|
+
});
|
|
61
|
+
vault.command('info <vault>')
|
|
62
|
+
.description('Show vault details')
|
|
63
|
+
.action(async (vaultRef) => {
|
|
64
|
+
const sdk = getSDKClientFromParent(vault);
|
|
65
|
+
const format = program.opts().format || cliConfig.get('outputFormat');
|
|
66
|
+
const vaultId = await resolveVault(sdk, vaultRef);
|
|
67
|
+
const v = await sdk.vaults.get(vaultId);
|
|
68
|
+
if (format === 'json') {
|
|
69
|
+
console.log(JSON.stringify(v, null, 2));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.log(`Name: ${v.name}`);
|
|
73
|
+
console.log(`Slug: ${v.slug}`);
|
|
74
|
+
console.log(`Visibility: ${v.visibility === 'private' ? 'private' : 'public'}`);
|
|
75
|
+
console.log(`Description: ${v.description || chalk.dim('(none)')}`);
|
|
76
|
+
console.log(`Files: ${v.fileCount}`);
|
|
77
|
+
console.log(`Total Size: ${formatBytes(v.totalSizeBytes)}`);
|
|
78
|
+
console.log(`Default: ${v.isDefault ? 'Yes' : 'No'}`);
|
|
79
|
+
console.log(`Created: ${new Date(v.createdAt).toLocaleString()}`);
|
|
80
|
+
console.log(`ID: ${v.id}`);
|
|
81
|
+
});
|
|
82
|
+
vault.command('rename <vault> <new-name>')
|
|
83
|
+
.description('Rename a vault')
|
|
84
|
+
.action(async (vaultRef, newName) => {
|
|
85
|
+
const sdk = getSDKClientFromParent(vault);
|
|
86
|
+
const vaultId = await resolveVault(sdk, vaultRef);
|
|
87
|
+
await sdk.vaults.update(vaultId, { name: newName });
|
|
88
|
+
console.log(chalk.green(`Vault renamed to "${newName}"`));
|
|
89
|
+
});
|
|
90
|
+
vault.command('delete <vault>')
|
|
91
|
+
.description('Delete a vault')
|
|
92
|
+
.option('--force', 'Delete vault and all its files')
|
|
93
|
+
.action(async (vaultRef, options) => {
|
|
94
|
+
const sdk = getSDKClientFromParent(vault);
|
|
95
|
+
const vaultId = await resolveVault(sdk, vaultRef);
|
|
96
|
+
if (!options.force) {
|
|
97
|
+
const answers = await inquirer.prompt([{
|
|
98
|
+
type: 'confirm',
|
|
99
|
+
name: 'confirm',
|
|
100
|
+
message: 'Delete vault? This cannot be undone.',
|
|
101
|
+
default: false,
|
|
102
|
+
}]);
|
|
103
|
+
if (!answers.confirm)
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
await sdk.vaults.delete(vaultId, { force: options.force });
|
|
107
|
+
console.log(chalk.green('Vault deleted.'));
|
|
108
|
+
});
|
|
109
|
+
vault.command('set-default <vault>')
|
|
110
|
+
.description('Set the default vault for uploads')
|
|
111
|
+
.action(async (vaultRef) => {
|
|
112
|
+
const sdk = getSDKClientFromParent(vault);
|
|
113
|
+
const vaultId = await resolveVault(sdk, vaultRef);
|
|
114
|
+
cliConfig.set('defaultVault', vaultId);
|
|
115
|
+
console.log(chalk.green(`Default vault set to ${vaultRef}`));
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/commands/vault.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
export interface TuskyDPConfig {
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
defaultVault?: string;
|
|
6
|
+
outputFormat: 'table' | 'json' | 'plain';
|
|
7
|
+
encryptionEnabled: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const cliConfig: Conf<TuskyDPConfig>;
|
|
10
|
+
/** Default dev API URL (local API server) */
|
|
11
|
+
export declare const DEV_API_URL = "http://localhost:8000";
|
|
12
|
+
export declare function getApiUrl(override?: string): string;
|
|
13
|
+
export declare function getApiKey(override?: string): string;
|
|
14
|
+
export declare function getOutputFormat(override?: string): 'table' | 'json' | 'plain';
|
|
15
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACzC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,SAAS,qBAOpB,CAAC;AAEH,6CAA6C;AAC7C,eAAO,MAAM,WAAW,0BAA0B,CAAC;AAEnD,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAE7E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
export const cliConfig = new Conf({
|
|
3
|
+
projectName: 'tuskydp',
|
|
4
|
+
defaults: {
|
|
5
|
+
apiUrl: 'https://api.tusky.dev',
|
|
6
|
+
outputFormat: 'table',
|
|
7
|
+
encryptionEnabled: true,
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
/** Default dev API URL (local API server) */
|
|
11
|
+
export const DEV_API_URL = 'http://localhost:8000';
|
|
12
|
+
export function getApiUrl(override) {
|
|
13
|
+
return override || process.env.TUSKYDP_API_URL || cliConfig.get('apiUrl');
|
|
14
|
+
}
|
|
15
|
+
export function getApiKey(override) {
|
|
16
|
+
const key = override || process.env.TUSKYDP_API_KEY || cliConfig.get('apiKey');
|
|
17
|
+
if (!key) {
|
|
18
|
+
console.error('Not authenticated. Run: tusky login');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
return key;
|
|
22
|
+
}
|
|
23
|
+
export function getOutputFormat(override) {
|
|
24
|
+
return override || cliConfig.get('outputFormat');
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAgB;IAC/C,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE;QACR,MAAM,EAAE,uBAAuB;QAC/B,YAAY,EAAE,OAAO;QACrB,iBAAiB,EAAE,IAAI;KACxB;CACF,CAAC,CAAC;AAEH,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,QAAiB;IACzC,OAAO,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAiB;IACzC,MAAM,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/E,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,OAAQ,QAAgB,IAAI,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function deriveMasterKey(passphrase: string, salt: Buffer): Buffer;
|
|
2
|
+
export declare function computeVerifier(masterKey: Buffer): Buffer;
|
|
3
|
+
export declare function verifyPassphrase(masterKey: Buffer, expectedVerifier: Buffer): boolean;
|
|
4
|
+
export declare function generateSalt(): Buffer;
|
|
5
|
+
export declare function generateRecoveryKey(): Buffer;
|
|
6
|
+
export declare function generateMasterKey(): Buffer;
|
|
7
|
+
export declare function wrapMasterKey(masterKey: Buffer, recoveryKey: Buffer): Buffer;
|
|
8
|
+
export declare function unwrapMasterKey(wrappedData: Buffer, recoveryKey: Buffer): Buffer;
|
|
9
|
+
export declare function encryptBuffer(plaintext: Buffer, masterKey: Buffer): {
|
|
10
|
+
ciphertext: Buffer;
|
|
11
|
+
wrappedKey: string;
|
|
12
|
+
iv: string;
|
|
13
|
+
plaintextChecksum: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function decryptBuffer(ciphertext: Buffer, wrappedKeyBase64: string, ivBase64: string, masterKey: Buffer, expectedChecksum?: string): Buffer;
|
|
16
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAaA,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAMrF;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAOhF;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CA2BA;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CA6BR"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createHash, createHmac, randomBytes, createCipheriv, createDecipheriv, pbkdf2Sync, } from 'crypto';
|
|
2
|
+
const PBKDF2_ITERATIONS = 600_000;
|
|
3
|
+
const AES_ALGO = 'aes-256-gcm';
|
|
4
|
+
const VERIFIER_CONTEXT = 'tuskydp-key-verifier-v1';
|
|
5
|
+
export function deriveMasterKey(passphrase, salt) {
|
|
6
|
+
return pbkdf2Sync(passphrase, salt, PBKDF2_ITERATIONS, 32, 'sha256');
|
|
7
|
+
}
|
|
8
|
+
export function computeVerifier(masterKey) {
|
|
9
|
+
return createHmac('sha256', masterKey)
|
|
10
|
+
.update(VERIFIER_CONTEXT)
|
|
11
|
+
.digest();
|
|
12
|
+
}
|
|
13
|
+
export function verifyPassphrase(masterKey, expectedVerifier) {
|
|
14
|
+
const computed = computeVerifier(masterKey);
|
|
15
|
+
if (computed.length !== expectedVerifier.length)
|
|
16
|
+
return false;
|
|
17
|
+
let diff = 0;
|
|
18
|
+
for (let i = 0; i < computed.length; i++)
|
|
19
|
+
diff |= computed[i] ^ expectedVerifier[i];
|
|
20
|
+
return diff === 0;
|
|
21
|
+
}
|
|
22
|
+
export function generateSalt() {
|
|
23
|
+
return randomBytes(16);
|
|
24
|
+
}
|
|
25
|
+
export function generateRecoveryKey() {
|
|
26
|
+
return randomBytes(32);
|
|
27
|
+
}
|
|
28
|
+
export function generateMasterKey() {
|
|
29
|
+
return randomBytes(32);
|
|
30
|
+
}
|
|
31
|
+
export function wrapMasterKey(masterKey, recoveryKey) {
|
|
32
|
+
const wrapIv = randomBytes(12);
|
|
33
|
+
const cipher = createCipheriv(AES_ALGO, recoveryKey, wrapIv);
|
|
34
|
+
const wrapped = Buffer.concat([cipher.update(masterKey), cipher.final()]);
|
|
35
|
+
const tag = cipher.getAuthTag();
|
|
36
|
+
return Buffer.concat([wrapIv, wrapped, tag]);
|
|
37
|
+
}
|
|
38
|
+
export function unwrapMasterKey(wrappedData, recoveryKey) {
|
|
39
|
+
const wrapIv = wrappedData.subarray(0, 12);
|
|
40
|
+
const wrapped = wrappedData.subarray(12, wrappedData.length - 16);
|
|
41
|
+
const tag = wrappedData.subarray(wrappedData.length - 16);
|
|
42
|
+
const decipher = createDecipheriv(AES_ALGO, recoveryKey, wrapIv);
|
|
43
|
+
decipher.setAuthTag(tag);
|
|
44
|
+
return Buffer.concat([decipher.update(wrapped), decipher.final()]);
|
|
45
|
+
}
|
|
46
|
+
export function encryptBuffer(plaintext, masterKey) {
|
|
47
|
+
// Hash plaintext
|
|
48
|
+
const plaintextChecksum = createHash('sha256').update(plaintext).digest('hex');
|
|
49
|
+
// Generate random per-file key and IV
|
|
50
|
+
const fileKey = randomBytes(32);
|
|
51
|
+
const fileIv = randomBytes(12);
|
|
52
|
+
// Encrypt file
|
|
53
|
+
const cipher = createCipheriv(AES_ALGO, fileKey, fileIv);
|
|
54
|
+
const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
55
|
+
const authTag = cipher.getAuthTag();
|
|
56
|
+
const ciphertext = Buffer.concat([encrypted, authTag]);
|
|
57
|
+
// Wrap file key with master key
|
|
58
|
+
const wrapIv = randomBytes(12);
|
|
59
|
+
const wrapCipher = createCipheriv(AES_ALGO, masterKey, wrapIv);
|
|
60
|
+
const wrappedKeyData = Buffer.concat([wrapCipher.update(fileKey), wrapCipher.final()]);
|
|
61
|
+
const wrapTag = wrapCipher.getAuthTag();
|
|
62
|
+
const wrappedKeyFull = Buffer.concat([wrapIv, wrappedKeyData, wrapTag]);
|
|
63
|
+
return {
|
|
64
|
+
ciphertext,
|
|
65
|
+
wrappedKey: wrappedKeyFull.toString('base64'),
|
|
66
|
+
iv: fileIv.toString('base64'),
|
|
67
|
+
plaintextChecksum,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function decryptBuffer(ciphertext, wrappedKeyBase64, ivBase64, masterKey, expectedChecksum) {
|
|
71
|
+
// Unwrap file key
|
|
72
|
+
const wrappedKeyFull = Buffer.from(wrappedKeyBase64, 'base64');
|
|
73
|
+
const wrapIv = wrappedKeyFull.subarray(0, 12);
|
|
74
|
+
const wrappedKeyData = wrappedKeyFull.subarray(12, wrappedKeyFull.length - 16);
|
|
75
|
+
const wrapTag = wrappedKeyFull.subarray(wrappedKeyFull.length - 16);
|
|
76
|
+
const unwrapDecipher = createDecipheriv(AES_ALGO, masterKey, wrapIv);
|
|
77
|
+
unwrapDecipher.setAuthTag(wrapTag);
|
|
78
|
+
const fileKey = Buffer.concat([unwrapDecipher.update(wrappedKeyData), unwrapDecipher.final()]);
|
|
79
|
+
// Decrypt file
|
|
80
|
+
const fileIv = Buffer.from(ivBase64, 'base64');
|
|
81
|
+
const authTag = ciphertext.subarray(ciphertext.length - 16);
|
|
82
|
+
const encryptedData = ciphertext.subarray(0, ciphertext.length - 16);
|
|
83
|
+
const decipher = createDecipheriv(AES_ALGO, fileKey, fileIv);
|
|
84
|
+
decipher.setAuthTag(authTag);
|
|
85
|
+
const plaintext = Buffer.concat([decipher.update(encryptedData), decipher.final()]);
|
|
86
|
+
// Verify integrity
|
|
87
|
+
if (expectedChecksum) {
|
|
88
|
+
const actualChecksum = createHash('sha256').update(plaintext).digest('hex');
|
|
89
|
+
if (actualChecksum !== expectedChecksum) {
|
|
90
|
+
throw new Error('Integrity check failed — file may be corrupted');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return plaintext;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { registerAuthCommands } from './commands/auth.js';
|
|
3
|
+
import { registerEncryptionCommands } from './commands/encryption.js';
|
|
4
|
+
import { registerVaultCommands } from './commands/vault.js';
|
|
5
|
+
import { registerFileCommands } from './commands/files.js';
|
|
6
|
+
import { registerAccountCommands } from './commands/account.js';
|
|
7
|
+
import { uploadCommand } from './commands/upload.js';
|
|
8
|
+
import { downloadCommand } from './commands/download.js';
|
|
9
|
+
import { rehydrateCommand } from './commands/rehydrate.js';
|
|
10
|
+
import { registerTuiCommand } from './commands/tui.js';
|
|
11
|
+
import { registerMcpCommands } from './commands/mcp.js';
|
|
12
|
+
import { registerExportCommand } from './commands/export.js';
|
|
13
|
+
import { registerDecryptCommand } from './commands/decrypt.js';
|
|
14
|
+
const VERSION = '0.1.0';
|
|
15
|
+
const program = new Command();
|
|
16
|
+
program
|
|
17
|
+
.name('tusky')
|
|
18
|
+
.description('Tusky — Encrypted decentralized storage for developers, apps, and agents')
|
|
19
|
+
.version(VERSION)
|
|
20
|
+
.option('--api-key <key>', 'Override API key')
|
|
21
|
+
.option('--api-url <url>', 'Override API URL')
|
|
22
|
+
.option('--format <fmt>', 'Output format: table, json, plain', 'table')
|
|
23
|
+
.option('--quiet', 'Suppress non-essential output')
|
|
24
|
+
.option('--verbose', 'Show debug output')
|
|
25
|
+
.option('--no-color', 'Disable colored output');
|
|
26
|
+
registerAuthCommands(program);
|
|
27
|
+
registerEncryptionCommands(program);
|
|
28
|
+
registerVaultCommands(program);
|
|
29
|
+
registerFileCommands(program);
|
|
30
|
+
registerAccountCommands(program);
|
|
31
|
+
registerTuiCommand(program);
|
|
32
|
+
registerMcpCommands(program);
|
|
33
|
+
registerExportCommand(program);
|
|
34
|
+
registerDecryptCommand(program);
|
|
35
|
+
// Direct shortcuts for common operations
|
|
36
|
+
program.command('upload <paths...>')
|
|
37
|
+
.description('Upload files')
|
|
38
|
+
.option('--vault <vault>', 'Target vault')
|
|
39
|
+
.option('--recursive', 'Upload directory contents')
|
|
40
|
+
.action(async (paths, options) => {
|
|
41
|
+
await uploadCommand(paths, options, program);
|
|
42
|
+
});
|
|
43
|
+
program.command('download <file-id>')
|
|
44
|
+
.description('Download a file')
|
|
45
|
+
.option('--output <path>', 'Output path')
|
|
46
|
+
.action(async (fileId, options) => {
|
|
47
|
+
await downloadCommand(fileId, options, program);
|
|
48
|
+
});
|
|
49
|
+
program.command('rehydrate <blob-id>')
|
|
50
|
+
.description('Download a file directly from Walrus by blob ID')
|
|
51
|
+
.option('--output <path>', 'Output file path')
|
|
52
|
+
.action(async (blobId, options) => {
|
|
53
|
+
await rehydrateCommand(blobId, options, program);
|
|
54
|
+
});
|
|
55
|
+
program.parseAsync().catch((err) => {
|
|
56
|
+
console.error(err.message);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|