@tuskydp/cli 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/src/commands/decrypt.d.ts.map +1 -1
- package/dist/src/commands/decrypt.js +53 -21
- package/dist/src/commands/decrypt.js.map +1 -1
- package/dist/src/commands/download.d.ts +1 -0
- package/dist/src/commands/download.d.ts.map +1 -1
- package/dist/src/commands/download.js +81 -11
- package/dist/src/commands/download.js.map +1 -1
- package/dist/src/commands/export.d.ts +6 -0
- package/dist/src/commands/export.d.ts.map +1 -1
- package/dist/src/commands/export.js +29 -17
- package/dist/src/commands/export.js.map +1 -1
- package/dist/src/commands/files.d.ts.map +1 -1
- package/dist/src/commands/files.js +89 -10
- package/dist/src/commands/files.js.map +1 -1
- package/dist/src/commands/folder.d.ts +3 -0
- package/dist/src/commands/folder.d.ts.map +1 -0
- package/dist/src/commands/folder.js +151 -0
- package/dist/src/commands/folder.js.map +1 -0
- package/dist/src/commands/rehydrate.d.ts +1 -0
- package/dist/src/commands/rehydrate.d.ts.map +1 -1
- package/dist/src/commands/rehydrate.js +15 -7
- package/dist/src/commands/rehydrate.js.map +1 -1
- package/dist/src/commands/trash.d.ts +3 -0
- package/dist/src/commands/trash.d.ts.map +1 -0
- package/dist/src/commands/trash.js +109 -0
- package/dist/src/commands/trash.js.map +1 -0
- package/dist/src/commands/upload.d.ts +4 -0
- package/dist/src/commands/upload.d.ts.map +1 -1
- package/dist/src/commands/upload.js +104 -3
- package/dist/src/commands/upload.js.map +1 -1
- package/dist/src/commands/wallet.d.ts +3 -0
- package/dist/src/commands/wallet.d.ts.map +1 -0
- package/dist/src/commands/wallet.js +126 -0
- package/dist/src/commands/wallet.js.map +1 -0
- package/dist/src/commands/webhook.d.ts +3 -0
- package/dist/src/commands/webhook.d.ts.map +1 -0
- package/dist/src/commands/webhook.js +172 -0
- package/dist/src/commands/webhook.js.map +1 -0
- package/dist/src/crypto.d.ts +16 -0
- package/dist/src/crypto.d.ts.map +1 -1
- package/dist/src/crypto.js +26 -0
- package/dist/src/crypto.js.map +1 -1
- package/dist/src/index.js +17 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +2 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/files.d.ts.map +1 -1
- package/dist/src/mcp/tools/files.js +40 -5
- package/dist/src/mcp/tools/files.js.map +1 -1
- package/dist/src/seal.d.ts +16 -0
- package/dist/src/seal.d.ts.map +1 -1
- package/dist/src/seal.js +23 -0
- package/dist/src/seal.js.map +1 -1
- package/dist/src/tui/files-panel.d.ts +31 -1
- package/dist/src/tui/files-panel.d.ts.map +1 -1
- package/dist/src/tui/files-panel.js +118 -11
- package/dist/src/tui/files-panel.js.map +1 -1
- package/dist/src/tui/index.d.ts.map +1 -1
- package/dist/src/tui/index.js +272 -33
- package/dist/src/tui/index.js.map +1 -1
- package/dist/src/tui/overview.d.ts.map +1 -1
- package/dist/src/tui/overview.js +24 -8
- package/dist/src/tui/overview.js.map +1 -1
- package/dist/src/tui/trash-screen.d.ts +4 -0
- package/dist/src/tui/trash-screen.d.ts.map +1 -0
- package/dist/src/tui/trash-screen.js +190 -0
- package/dist/src/tui/trash-screen.js.map +1 -0
- package/dist/src/tui/vaults-panel.d.ts +8 -0
- package/dist/src/tui/vaults-panel.d.ts.map +1 -1
- package/dist/src/tui/vaults-panel.js +45 -6
- package/dist/src/tui/vaults-panel.js.map +1 -1
- package/dist/src/version.d.ts +2 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +21 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +3 -3
- package/src/commands/decrypt.ts +56 -23
- package/src/commands/download.ts +82 -11
- package/src/commands/export.ts +35 -19
- package/src/commands/files.ts +93 -9
- package/src/commands/folder.ts +169 -0
- package/src/commands/rehydrate.ts +15 -8
- package/src/commands/trash.ts +121 -0
- package/src/commands/upload.ts +126 -3
- package/src/commands/wallet.ts +183 -0
- package/src/commands/webhook.ts +193 -0
- package/src/crypto.ts +35 -0
- package/src/index.ts +17 -6
- package/src/mcp/server.ts +2 -1
- package/src/mcp/tools/files.ts +43 -5
- package/src/seal.ts +34 -1
- package/src/tui/files-panel.ts +139 -11
- package/src/tui/index.ts +289 -33
- package/src/tui/overview.ts +22 -8
- package/src/tui/trash-screen.ts +203 -0
- package/src/tui/vaults-panel.ts +55 -6
- package/src/version.ts +21 -0
- package/vitest.config.ts +1 -0
- package/dist/src/client.d.ts +0 -120
- package/dist/src/client.d.ts.map +0 -1
- package/dist/src/client.js +0 -152
- package/dist/src/client.js.map +0 -1
|
@@ -8,9 +8,17 @@ import { createSDKClient } from '../sdk.js';
|
|
|
8
8
|
import { resolveVault } from '../lib/resolve.js';
|
|
9
9
|
import { formatBytes } from '../lib/output.js';
|
|
10
10
|
import { createSpinner } from '../lib/progress.js';
|
|
11
|
-
import { encryptBuffer } from '../crypto.js';
|
|
11
|
+
import { encryptBuffer, encryptMetadata } from '../crypto.js';
|
|
12
12
|
import { loadMasterKey } from '../lib/keyring.js';
|
|
13
|
-
import { isSealConfigured, sealEncrypt, getSuiKeypair } from '../seal.js';
|
|
13
|
+
import { isSealConfigured, sealEncrypt, sealEncryptMetadata, getSuiKeypair } from '../seal.js';
|
|
14
|
+
async function readStdin() {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
const chunks = [];
|
|
17
|
+
process.stdin.on('data', (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
|
|
18
|
+
process.stdin.on('end', () => resolve(Buffer.concat(chunks)));
|
|
19
|
+
process.stdin.on('error', reject);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
14
22
|
async function expandPaths(paths, recursive) {
|
|
15
23
|
const result = [];
|
|
16
24
|
for (const p of paths) {
|
|
@@ -45,6 +53,96 @@ export async function uploadCommand(paths, options, program) {
|
|
|
45
53
|
const apiUrl = getApiUrl(program.opts().apiUrl);
|
|
46
54
|
const apiKey = getApiKey(program.opts().apiKey);
|
|
47
55
|
const sdk = createSDKClient(apiUrl, apiKey);
|
|
56
|
+
// ── Inline content / stdin mode ──────────────────────────────────
|
|
57
|
+
if (options.content !== undefined || options.stdin) {
|
|
58
|
+
if (!options.name) {
|
|
59
|
+
console.error(chalk.red('--name <filename> is required when using --content or --stdin'));
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
const fileName = options.name;
|
|
63
|
+
let fileBuffer;
|
|
64
|
+
if (options.stdin) {
|
|
65
|
+
fileBuffer = await readStdin();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
fileBuffer = Buffer.from(options.content, 'utf8');
|
|
69
|
+
}
|
|
70
|
+
const vaultId = await resolveVault(sdk, options.vault);
|
|
71
|
+
const vault = await sdk.vaults.get(vaultId);
|
|
72
|
+
const isPrivate = vault.visibility === 'private';
|
|
73
|
+
const isShared = vault.visibility === 'shared' && isSealConfigured(vault);
|
|
74
|
+
let masterKey = null;
|
|
75
|
+
if (isPrivate) {
|
|
76
|
+
masterKey = loadMasterKey();
|
|
77
|
+
if (!masterKey) {
|
|
78
|
+
console.error(chalk.red('Encryption session not unlocked. Run: tusky encryption unlock'));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const spinner = createSpinner(`Uploading ${fileName}`);
|
|
83
|
+
spinner.start();
|
|
84
|
+
try {
|
|
85
|
+
const mimeType = lookup(fileName) || 'application/octet-stream';
|
|
86
|
+
let uploadBody;
|
|
87
|
+
let encryptionMeta = {};
|
|
88
|
+
if (isPrivate && masterKey) {
|
|
89
|
+
spinner.text = `Encrypting ${fileName}...`;
|
|
90
|
+
const { ciphertext, wrappedKey, iv, plaintextChecksum } = encryptBuffer(fileBuffer, masterKey);
|
|
91
|
+
uploadBody = ciphertext;
|
|
92
|
+
encryptionMeta = {
|
|
93
|
+
wrappedKey,
|
|
94
|
+
encryptionIv: iv,
|
|
95
|
+
plaintextSizeBytes: fileBuffer.length,
|
|
96
|
+
plaintextChecksumSha256: plaintextChecksum,
|
|
97
|
+
encryptedName: encryptMetadata(fileName, mimeType, masterKey),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
else if (isShared) {
|
|
101
|
+
spinner.text = `SEAL encrypting ${fileName}...`;
|
|
102
|
+
const fileNonce = randomUUID();
|
|
103
|
+
const sealResult = await sealEncrypt(new Uint8Array(fileBuffer), vault, fileNonce);
|
|
104
|
+
uploadBody = Buffer.from(sealResult.encryptedData);
|
|
105
|
+
encryptionMeta = {
|
|
106
|
+
sealIdentity: sealResult.sealIdentity,
|
|
107
|
+
sealEncryptedObject: sealResult.sealEncryptedObject,
|
|
108
|
+
plaintextSizeBytes: fileBuffer.length,
|
|
109
|
+
encryptedMetadata: await sealEncryptMetadata(fileName, mimeType, vault, fileNonce),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
uploadBody = fileBuffer;
|
|
114
|
+
}
|
|
115
|
+
spinner.text = `Requesting upload URL for ${fileName}...`;
|
|
116
|
+
const { fileId, uploadUrl } = await sdk.files.requestUpload({
|
|
117
|
+
name: fileName,
|
|
118
|
+
mimeType,
|
|
119
|
+
sizeBytes: uploadBody.length,
|
|
120
|
+
vaultId,
|
|
121
|
+
...(options.folder ? { folderId: options.folder } : {}),
|
|
122
|
+
...encryptionMeta,
|
|
123
|
+
});
|
|
124
|
+
spinner.text = `Uploading ${fileName} (${formatBytes(uploadBody.length)})...`;
|
|
125
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
126
|
+
method: 'PUT',
|
|
127
|
+
headers: { 'Content-Type': 'application/octet-stream' },
|
|
128
|
+
body: new Uint8Array(uploadBody),
|
|
129
|
+
});
|
|
130
|
+
if (!uploadResponse.ok)
|
|
131
|
+
throw new Error(`Upload failed: ${uploadResponse.status}`);
|
|
132
|
+
spinner.text = `Confirming ${fileName}...`;
|
|
133
|
+
await sdk.files.confirmUpload(fileId);
|
|
134
|
+
spinner.succeed(`${fileName} -> ${fileId} (${formatBytes(uploadBody.length)})`);
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
spinner.fail(`Failed: ${fileName} — ${err.message}`);
|
|
138
|
+
if (err.statusCode === 402) {
|
|
139
|
+
console.error(chalk.yellow(' This may require topping up your wallet balance.'));
|
|
140
|
+
console.error(chalk.dim(' Check your wallet: tusky wallet info'));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// ── File path mode (original behavior) ───────────────────────────
|
|
48
146
|
const vaultId = await resolveVault(sdk, options.vault);
|
|
49
147
|
const vault = await sdk.vaults.get(vaultId);
|
|
50
148
|
const isPrivate = vault.visibility === 'private';
|
|
@@ -89,6 +187,7 @@ export async function uploadCommand(paths, options, program) {
|
|
|
89
187
|
encryptionIv: iv,
|
|
90
188
|
plaintextSizeBytes: stat.size,
|
|
91
189
|
plaintextChecksumSha256: plaintextChecksum,
|
|
190
|
+
encryptedName: encryptMetadata(basename(filePath), mimeType, masterKey),
|
|
92
191
|
};
|
|
93
192
|
}
|
|
94
193
|
else if (isShared) {
|
|
@@ -100,6 +199,7 @@ export async function uploadCommand(paths, options, program) {
|
|
|
100
199
|
sealIdentity: sealResult.sealIdentity,
|
|
101
200
|
sealEncryptedObject: sealResult.sealEncryptedObject,
|
|
102
201
|
plaintextSizeBytes: stat.size,
|
|
202
|
+
encryptedMetadata: await sealEncryptMetadata(basename(filePath), mimeType, vault, fileNonce),
|
|
103
203
|
};
|
|
104
204
|
}
|
|
105
205
|
else {
|
|
@@ -112,6 +212,7 @@ export async function uploadCommand(paths, options, program) {
|
|
|
112
212
|
mimeType,
|
|
113
213
|
sizeBytes: uploadBody.length,
|
|
114
214
|
vaultId,
|
|
215
|
+
...(options.folder ? { folderId: options.folder } : {}),
|
|
115
216
|
...encryptionMeta,
|
|
116
217
|
});
|
|
117
218
|
// Upload to Spaces via presigned URL
|
|
@@ -135,7 +236,7 @@ export async function uploadCommand(paths, options, program) {
|
|
|
135
236
|
// Surface PPU payment details if present (402 errors)
|
|
136
237
|
if (err.statusCode === 402) {
|
|
137
238
|
console.error(chalk.yellow(' This may require topping up your wallet balance.'));
|
|
138
|
-
console.error(chalk.dim(' Check your wallet: tusky
|
|
239
|
+
console.error(chalk.dim(' Check your wallet: tusky wallet info'));
|
|
139
240
|
}
|
|
140
241
|
}
|
|
141
242
|
}
|
|
@@ -1 +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,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,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;AAClD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1E,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;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE1E,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,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC,CAAC;YACjH,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,GAOd,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,IAAI,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,GAAG,mBAAmB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1D,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBACnF,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;gBACnD,cAAc,GAAG;oBACf,YAAY,EAAE,UAAU,CAAC,YAAY;oBACrC,mBAAmB,EAAE,UAAU,CAAC,mBAAmB;oBACnD,kBAAkB,EAAE,IAAI,CAAC,IAAI;iBAC9B,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;YAC/D,sDAAsD;YACtD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBAClF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,cAAc,YAAY,aAAa,WAAW,CAAC,SAAS,CAAC,eAAe,KAAK,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC;IACpH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6DzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAyHtD"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
|
|
3
|
+
import { cliConfig, getApiUrl, getApiKey } from '../config.js';
|
|
4
|
+
import { createTable, formatDate } from '../lib/output.js';
|
|
5
|
+
/**
|
|
6
|
+
* Lightweight fetch helper that uses the API key for auth.
|
|
7
|
+
* The SDK does not have a wallet resource, so we call the API directly.
|
|
8
|
+
*/
|
|
9
|
+
async function walletFetch(apiUrl, apiKey, path, init) {
|
|
10
|
+
const url = `${apiUrl.replace(/\/$/, '')}${path}`;
|
|
11
|
+
const response = await fetch(url, {
|
|
12
|
+
...init,
|
|
13
|
+
headers: {
|
|
14
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
...(init?.headers || {}),
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
if (!response.ok) {
|
|
20
|
+
const body = await response.json().catch(() => ({ error: response.statusText }));
|
|
21
|
+
throw new Error(body.error || `HTTP ${response.status}`);
|
|
22
|
+
}
|
|
23
|
+
return response.json();
|
|
24
|
+
}
|
|
25
|
+
export function registerWalletCommands(program) {
|
|
26
|
+
const wallet = program.command('wallet').description('Manage wallet and payments (PPU)');
|
|
27
|
+
// ── info ────────────────────────────────────────────────────────────
|
|
28
|
+
wallet.command('info')
|
|
29
|
+
.description('Show wallet balances and address')
|
|
30
|
+
.action(async () => {
|
|
31
|
+
const root = wallet.parent || wallet;
|
|
32
|
+
const apiUrl = getApiUrl(root.opts().apiUrl);
|
|
33
|
+
const apiKey = getApiKey(root.opts().apiKey);
|
|
34
|
+
const format = root.opts().format || cliConfig.get('outputFormat');
|
|
35
|
+
const w = await walletFetch(apiUrl, apiKey, '/api/wallet');
|
|
36
|
+
if (format === 'json') {
|
|
37
|
+
console.log(JSON.stringify(w, null, 2));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
console.log(chalk.bold('Wallet'));
|
|
41
|
+
console.log(` Address: ${w.suiAddress}`);
|
|
42
|
+
console.log(` WAL: ${w.walBalanceFormatted}`);
|
|
43
|
+
console.log(` SUI: ${w.suiBalanceFormatted}`);
|
|
44
|
+
if (w.usdcBalanceFormatted) {
|
|
45
|
+
console.log(` USDC: ${w.usdcBalanceFormatted}`);
|
|
46
|
+
}
|
|
47
|
+
console.log(` Created: ${new Date(w.createdAt).toLocaleString()}`);
|
|
48
|
+
});
|
|
49
|
+
// ── deposit ─────────────────────────────────────────────────────────
|
|
50
|
+
wallet.command('deposit')
|
|
51
|
+
.description('Show deposit address and supported tokens')
|
|
52
|
+
.action(async () => {
|
|
53
|
+
const root = wallet.parent || wallet;
|
|
54
|
+
const apiUrl = getApiUrl(root.opts().apiUrl);
|
|
55
|
+
const apiKey = getApiKey(root.opts().apiKey);
|
|
56
|
+
const format = root.opts().format || cliConfig.get('outputFormat');
|
|
57
|
+
const d = await walletFetch(apiUrl, apiKey, '/api/wallet/deposit-info');
|
|
58
|
+
if (format === 'json') {
|
|
59
|
+
console.log(JSON.stringify(d, null, 2));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log(chalk.bold('Deposit Info'));
|
|
63
|
+
console.log(` Address: ${d.suiAddress}`);
|
|
64
|
+
console.log(` Network: ${d.network}`);
|
|
65
|
+
console.log(` Tokens: ${d.supportedTokens.join(', ')}`);
|
|
66
|
+
console.log('');
|
|
67
|
+
console.log(chalk.dim('Send WAL, SUI, or USDC to the address above on the Sui network.'));
|
|
68
|
+
});
|
|
69
|
+
// ── payments ────────────────────────────────────────────────────────
|
|
70
|
+
wallet.command('payments')
|
|
71
|
+
.description('List payment history')
|
|
72
|
+
.option('--limit <n>', 'Max results', '20')
|
|
73
|
+
.action(async (options) => {
|
|
74
|
+
const root = wallet.parent || wallet;
|
|
75
|
+
const apiUrl = getApiUrl(root.opts().apiUrl);
|
|
76
|
+
const apiKey = getApiKey(root.opts().apiKey);
|
|
77
|
+
const format = root.opts().format || cliConfig.get('outputFormat');
|
|
78
|
+
const data = await walletFetch(apiUrl, apiKey, `/api/wallet/payments?limit=${options.limit}`);
|
|
79
|
+
if (format === 'json') {
|
|
80
|
+
console.log(JSON.stringify(data, null, 2));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (data.payments.length === 0) {
|
|
84
|
+
console.log(chalk.dim('No payments found.'));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const table = createTable(['Type', 'WAL', 'SUI Gas', 'Epochs', 'File', 'Date']);
|
|
88
|
+
for (const p of data.payments) {
|
|
89
|
+
table.push([
|
|
90
|
+
p.type,
|
|
91
|
+
p.walMist,
|
|
92
|
+
p.suiGasMist,
|
|
93
|
+
String(p.epochs),
|
|
94
|
+
chalk.dim(p.fileId.slice(0, 8) + '...'),
|
|
95
|
+
formatDate(p.createdAt),
|
|
96
|
+
]);
|
|
97
|
+
}
|
|
98
|
+
console.log(table.toString());
|
|
99
|
+
console.log(chalk.dim(`\nTotal spent: ${data.totalSpentWalFormatted}`));
|
|
100
|
+
});
|
|
101
|
+
// ── generate ─────────────────────────────────────────────────────
|
|
102
|
+
wallet.command('generate')
|
|
103
|
+
.description('Generate a new Sui Ed25519 keypair for use with shared vaults (SEAL encryption)')
|
|
104
|
+
.action(async () => {
|
|
105
|
+
const root = wallet.parent || wallet;
|
|
106
|
+
const format = root.opts().format || cliConfig.get('outputFormat');
|
|
107
|
+
const keypair = Ed25519Keypair.generate();
|
|
108
|
+
const address = keypair.toSuiAddress();
|
|
109
|
+
const privateKey = keypair.getSecretKey(); // bech32 suiprivkey1... format
|
|
110
|
+
if (format === 'json') {
|
|
111
|
+
console.log(JSON.stringify({ address, privateKey }, null, 2));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
console.log(chalk.bold('Generated Sui Ed25519 Keypair'));
|
|
115
|
+
console.log(` Address: ${chalk.cyan(address)}`);
|
|
116
|
+
console.log(` Private key: ${chalk.yellow(privateKey)}`);
|
|
117
|
+
console.log('');
|
|
118
|
+
console.log(chalk.dim('Set TUSKYDP_SUI_PRIVATE_KEY=<private key> to use this keypair for shared vault encryption.'));
|
|
119
|
+
console.log(chalk.dim('Link the address to your Tusky account: tusky account link-sui ' + address));
|
|
120
|
+
});
|
|
121
|
+
// Default action for `tusky wallet` with no subcommand → run info
|
|
122
|
+
wallet.action(async () => {
|
|
123
|
+
await wallet.commands.find(c => c.name() === 'info')?.parseAsync([], { from: 'user' });
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/commands/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAsLvD"}
|
|
@@ -0,0 +1,172 @@
|
|
|
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, formatDate, shortId } from '../lib/output.js';
|
|
6
|
+
export function registerWebhookCommands(program) {
|
|
7
|
+
const webhook = program.command('webhook').description('Manage webhook endpoints');
|
|
8
|
+
// ── create ──────────────────────────────────────────────────────────
|
|
9
|
+
webhook.command('create <url>')
|
|
10
|
+
.description('Create a webhook endpoint')
|
|
11
|
+
.requiredOption('--events <events>', 'Comma-separated list of events to subscribe to')
|
|
12
|
+
.option('--description <text>', 'Webhook description')
|
|
13
|
+
.action(async (url, options) => {
|
|
14
|
+
const sdk = getSDKClientFromParent(webhook);
|
|
15
|
+
const events = options.events.split(',').map((e) => e.trim());
|
|
16
|
+
const created = await sdk.webhooks.create({
|
|
17
|
+
url,
|
|
18
|
+
events: events,
|
|
19
|
+
description: options.description,
|
|
20
|
+
});
|
|
21
|
+
console.log(chalk.green(`Webhook created: ${created.id}`));
|
|
22
|
+
console.log(`URL: ${created.url}`);
|
|
23
|
+
console.log(`Events: ${created.events.join(', ')}`);
|
|
24
|
+
if (created.secret) {
|
|
25
|
+
console.log(chalk.yellow.bold(`Secret: ${created.secret}`));
|
|
26
|
+
console.log(chalk.yellow(' Save this secret — it will not be shown again.'));
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
// ── list ────────────────────────────────────────────────────────────
|
|
30
|
+
webhook.command('list')
|
|
31
|
+
.description('List webhook endpoints')
|
|
32
|
+
.action(async () => {
|
|
33
|
+
const sdk = getSDKClientFromParent(webhook);
|
|
34
|
+
const root = webhook.parent || webhook;
|
|
35
|
+
const format = root.opts().format || cliConfig.get('outputFormat');
|
|
36
|
+
const webhooks = await sdk.webhooks.list();
|
|
37
|
+
if (format === 'json') {
|
|
38
|
+
console.log(JSON.stringify(webhooks, null, 2));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (webhooks.length === 0) {
|
|
42
|
+
console.log(chalk.dim('No webhook endpoints found.'));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const table = createTable(['URL', 'Events', 'Active', 'Failures', 'ID']);
|
|
46
|
+
for (const w of webhooks) {
|
|
47
|
+
table.push([
|
|
48
|
+
w.url.length > 40 ? w.url.slice(0, 39) + '...' : w.url,
|
|
49
|
+
String(w.events.length) + ' event(s)',
|
|
50
|
+
w.active ? chalk.green('Yes') : chalk.red('No'),
|
|
51
|
+
w.failureCount > 0 ? chalk.yellow(String(w.failureCount)) : '0',
|
|
52
|
+
chalk.dim(shortId(w.id)),
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
console.log(table.toString());
|
|
56
|
+
});
|
|
57
|
+
// ── info ────────────────────────────────────────────────────────────
|
|
58
|
+
webhook.command('info <webhook-id>')
|
|
59
|
+
.description('Show webhook endpoint details')
|
|
60
|
+
.action(async (webhookId) => {
|
|
61
|
+
const sdk = getSDKClientFromParent(webhook);
|
|
62
|
+
const root = webhook.parent || webhook;
|
|
63
|
+
const format = root.opts().format || cliConfig.get('outputFormat');
|
|
64
|
+
const w = await sdk.webhooks.get(webhookId);
|
|
65
|
+
if (format === 'json') {
|
|
66
|
+
console.log(JSON.stringify(w, null, 2));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log(`URL: ${w.url}`);
|
|
70
|
+
console.log(`Active: ${w.active ? chalk.green('Yes') : chalk.red('No')}`);
|
|
71
|
+
console.log(`Events: ${w.events.join(', ')}`);
|
|
72
|
+
console.log(`Description: ${w.description || chalk.dim('(none)')}`);
|
|
73
|
+
console.log(`Failures: ${w.failureCount}`);
|
|
74
|
+
if (w.lastDeliveryAt) {
|
|
75
|
+
console.log(`Last Delivery: ${formatDate(w.lastDeliveryAt)} (${w.lastDeliveryStatus})`);
|
|
76
|
+
}
|
|
77
|
+
console.log(`Created: ${new Date(w.createdAt).toLocaleString()}`);
|
|
78
|
+
console.log(`ID: ${w.id}`);
|
|
79
|
+
});
|
|
80
|
+
// ── update ──────────────────────────────────────────────────────────
|
|
81
|
+
webhook.command('update <webhook-id>')
|
|
82
|
+
.description('Update a webhook endpoint')
|
|
83
|
+
.option('--url <url>', 'New webhook URL')
|
|
84
|
+
.option('--events <events>', 'Comma-separated list of events')
|
|
85
|
+
.option('--active <bool>', 'Enable or disable (true/false)')
|
|
86
|
+
.option('--description <text>', 'New description')
|
|
87
|
+
.action(async (webhookId, options) => {
|
|
88
|
+
const sdk = getSDKClientFromParent(webhook);
|
|
89
|
+
const params = {};
|
|
90
|
+
if (options.url)
|
|
91
|
+
params.url = options.url;
|
|
92
|
+
if (options.events)
|
|
93
|
+
params.events = options.events.split(',').map((e) => e.trim());
|
|
94
|
+
if (options.active !== undefined)
|
|
95
|
+
params.active = options.active === 'true';
|
|
96
|
+
if (options.description)
|
|
97
|
+
params.description = options.description;
|
|
98
|
+
if (Object.keys(params).length === 0) {
|
|
99
|
+
console.error(chalk.red('Provide at least one option to update (--url, --events, --active, --description).'));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
await sdk.webhooks.update(webhookId, params);
|
|
103
|
+
console.log(chalk.green('Webhook updated.'));
|
|
104
|
+
});
|
|
105
|
+
// ── delete ──────────────────────────────────────────────────────────
|
|
106
|
+
webhook.command('delete <webhook-id>')
|
|
107
|
+
.description('Delete a webhook endpoint')
|
|
108
|
+
.option('--force', 'Skip confirmation prompt')
|
|
109
|
+
.action(async (webhookId, options) => {
|
|
110
|
+
const sdk = getSDKClientFromParent(webhook);
|
|
111
|
+
if (!options.force) {
|
|
112
|
+
const answers = await inquirer.prompt([{
|
|
113
|
+
type: 'confirm',
|
|
114
|
+
name: 'confirm',
|
|
115
|
+
message: 'Delete this webhook endpoint?',
|
|
116
|
+
default: false,
|
|
117
|
+
}]);
|
|
118
|
+
if (!answers.confirm)
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
await sdk.webhooks.delete(webhookId);
|
|
122
|
+
console.log(chalk.green('Webhook deleted.'));
|
|
123
|
+
});
|
|
124
|
+
// ── test ────────────────────────────────────────────────────────────
|
|
125
|
+
webhook.command('test <webhook-id>')
|
|
126
|
+
.description('Send a test delivery to the webhook')
|
|
127
|
+
.action(async (webhookId) => {
|
|
128
|
+
const sdk = getSDKClientFromParent(webhook);
|
|
129
|
+
const delivery = await sdk.webhooks.test(webhookId);
|
|
130
|
+
console.log(chalk.green('Test delivery sent.'));
|
|
131
|
+
console.log(`Delivery ID: ${delivery.id}`);
|
|
132
|
+
console.log(`Event: ${delivery.event}`);
|
|
133
|
+
console.log(`Status: ${delivery.status}`);
|
|
134
|
+
});
|
|
135
|
+
// ── deliveries ──────────────────────────────────────────────────────
|
|
136
|
+
webhook.command('deliveries <webhook-id>')
|
|
137
|
+
.description('List recent webhook deliveries')
|
|
138
|
+
.option('--limit <n>', 'Max results', '20')
|
|
139
|
+
.action(async (webhookId, options) => {
|
|
140
|
+
const sdk = getSDKClientFromParent(webhook);
|
|
141
|
+
const root = webhook.parent || webhook;
|
|
142
|
+
const format = root.opts().format || cliConfig.get('outputFormat');
|
|
143
|
+
const deliveries = await sdk.webhooks.listDeliveries(webhookId, { limit: parseInt(options.limit) });
|
|
144
|
+
if (format === 'json') {
|
|
145
|
+
console.log(JSON.stringify(deliveries, null, 2));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (deliveries.length === 0) {
|
|
149
|
+
console.log(chalk.dim('No deliveries found.'));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const table = createTable(['Event', 'Status', 'HTTP', 'Attempts', 'Created', 'ID']);
|
|
153
|
+
const statusColors = {
|
|
154
|
+
success: chalk.green,
|
|
155
|
+
failed: chalk.red,
|
|
156
|
+
pending: chalk.yellow,
|
|
157
|
+
};
|
|
158
|
+
for (const d of deliveries) {
|
|
159
|
+
const sc = statusColors[d.status] || chalk.white;
|
|
160
|
+
table.push([
|
|
161
|
+
d.event,
|
|
162
|
+
sc(d.status),
|
|
163
|
+
d.httpStatus ? String(d.httpStatus) : '-',
|
|
164
|
+
`${d.attempts}/${d.maxAttempts}`,
|
|
165
|
+
formatDate(d.createdAt),
|
|
166
|
+
chalk.dim(shortId(d.id)),
|
|
167
|
+
]);
|
|
168
|
+
}
|
|
169
|
+
console.log(table.toString());
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/commands/webhook.ts"],"names":[],"mappings":"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"}
|
package/dist/src/crypto.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export interface FileMeta {
|
|
2
|
+
/** Original filename */
|
|
3
|
+
n: string;
|
|
4
|
+
/** Original MIME type */
|
|
5
|
+
m: string;
|
|
6
|
+
}
|
|
1
7
|
export declare function deriveMasterKey(passphrase: string, salt: Buffer): Buffer;
|
|
2
8
|
export declare function computeVerifier(masterKey: Buffer): Buffer;
|
|
3
9
|
export declare function verifyPassphrase(masterKey: Buffer, expectedVerifier: Buffer): boolean;
|
|
@@ -12,5 +18,15 @@ export declare function encryptBuffer(plaintext: Buffer, masterKey: Buffer): {
|
|
|
12
18
|
iv: string;
|
|
13
19
|
plaintextChecksum: string;
|
|
14
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* Encrypt filename + MIME type together using master key (AES-256-GCM).
|
|
23
|
+
* Format: base64([iv(12) | ciphertext | authTag(16)])
|
|
24
|
+
*/
|
|
25
|
+
export declare function encryptMetadata(name: string, mimeType: string, masterKey: Buffer): string;
|
|
26
|
+
/**
|
|
27
|
+
* Decrypt an encryptedName blob produced by encryptMetadata.
|
|
28
|
+
* Returns the original { name, mimeType }.
|
|
29
|
+
*/
|
|
30
|
+
export declare function decryptMetadata(encryptedBase64: string, masterKey: Buffer): FileMeta;
|
|
15
31
|
export declare function decryptBuffer(ciphertext: Buffer, wrappedKeyBase64: string, ivBase64: string, masterKey: Buffer, expectedChecksum?: string): Buffer;
|
|
16
32
|
//# sourceMappingURL=crypto.d.ts.map
|
package/dist/src/crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;CACX;AAMD,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;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOzF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CASpF;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"}
|
package/dist/src/crypto.js
CHANGED
|
@@ -67,6 +67,32 @@ export function encryptBuffer(plaintext, masterKey) {
|
|
|
67
67
|
plaintextChecksum,
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Encrypt filename + MIME type together using master key (AES-256-GCM).
|
|
72
|
+
* Format: base64([iv(12) | ciphertext | authTag(16)])
|
|
73
|
+
*/
|
|
74
|
+
export function encryptMetadata(name, mimeType, masterKey) {
|
|
75
|
+
const plaintext = Buffer.from(JSON.stringify({ n: name, m: mimeType }), 'utf8');
|
|
76
|
+
const iv = randomBytes(12);
|
|
77
|
+
const cipher = createCipheriv(AES_ALGO, masterKey, iv);
|
|
78
|
+
const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
79
|
+
const tag = cipher.getAuthTag();
|
|
80
|
+
return Buffer.concat([iv, encrypted, tag]).toString('base64');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Decrypt an encryptedName blob produced by encryptMetadata.
|
|
84
|
+
* Returns the original { name, mimeType }.
|
|
85
|
+
*/
|
|
86
|
+
export function decryptMetadata(encryptedBase64, masterKey) {
|
|
87
|
+
const buf = Buffer.from(encryptedBase64, 'base64');
|
|
88
|
+
const iv = buf.subarray(0, 12);
|
|
89
|
+
const tag = buf.subarray(buf.length - 16);
|
|
90
|
+
const ciphertext = buf.subarray(12, buf.length - 16);
|
|
91
|
+
const decipher = createDecipheriv(AES_ALGO, masterKey, iv);
|
|
92
|
+
decipher.setAuthTag(tag);
|
|
93
|
+
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
94
|
+
return JSON.parse(plaintext.toString('utf8'));
|
|
95
|
+
}
|
|
70
96
|
export function decryptBuffer(ciphertext, wrappedKeyBase64, ivBase64, masterKey, expectedChecksum) {
|
|
71
97
|
// Unwrap file key
|
|
72
98
|
const wrappedKeyFull = Buffer.from(wrappedKeyBase64, 'base64');
|
package/dist/src/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,UAAU,GACX,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,UAAU,GACX,MAAM,QAAQ,CAAC;AAShB,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,MAAM,QAAQ,GAAG,aAAsB,CAAC;AACxC,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAEnD,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,IAAY;IAC9D,OAAO,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;SACnC,MAAM,CAAC,gBAAgB,CAAC;SACxB,MAAM,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,gBAAwB;IAC1E,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,WAAmB;IAClE,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,WAAmB;IACtE,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACjE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,SAAiB;IAMhE,iBAAiB;IACjB,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE/E,sCAAsC;IACtC,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE/B,eAAe;IACf,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvD,gCAAgC;IAChC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAExE,OAAO;QACL,UAAU;QACV,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7C,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB,EAAE,SAAiB;IAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAChF,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,eAAuB,EAAE,SAAiB;IACxE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAa,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,gBAAwB,EACxB,QAAgB,EAChB,SAAiB,EACjB,gBAAyB;IAEzB,kBAAkB;IAClB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAEpE,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACrE,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE/F,eAAe;IACf,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7D,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEpF,mBAAmB;IACnB,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,cAAc,KAAK,gBAAgB,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|