@tokenrip/cli 1.0.1
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/AGENTS.md +127 -0
- package/LICENSE +21 -0
- package/README.md +195 -0
- package/dist/auth-client.d.ts +8 -0
- package/dist/auth-client.js +14 -0
- package/dist/auth-client.js.map +1 -0
- package/dist/cjs/auth-client.js +17 -0
- package/dist/cjs/auth-client.js.map +1 -0
- package/dist/cjs/client.js +34 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/commands/auth.js +44 -0
- package/dist/cjs/commands/auth.js.map +1 -0
- package/dist/cjs/commands/config.js +20 -0
- package/dist/cjs/commands/config.js.map +1 -0
- package/dist/cjs/commands/delete-version.js +16 -0
- package/dist/cjs/commands/delete-version.js.map +1 -0
- package/dist/cjs/commands/delete.js +16 -0
- package/dist/cjs/commands/delete.js.map +1 -0
- package/dist/cjs/commands/publish.js +50 -0
- package/dist/cjs/commands/publish.js.map +1 -0
- package/dist/cjs/commands/stats.js +12 -0
- package/dist/cjs/commands/stats.js.map +1 -0
- package/dist/cjs/commands/status.js +19 -0
- package/dist/cjs/commands/status.js.map +1 -0
- package/dist/cjs/commands/update.js +55 -0
- package/dist/cjs/commands/update.js.map +1 -0
- package/dist/cjs/commands/upload.js +53 -0
- package/dist/cjs/commands/upload.js.map +1 -0
- package/dist/cjs/config.js +38 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/errors.js +20 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/formatters.js +94 -0
- package/dist/cjs/formatters.js.map +1 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/output.js +64 -0
- package/dist/cjs/output.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +211 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +7 -0
- package/dist/client.js +28 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/auth.d.ts +4 -0
- package/dist/commands/auth.js +41 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +16 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/delete-version.d.ts +3 -0
- package/dist/commands/delete-version.js +13 -0
- package/dist/commands/delete-version.js.map +1 -0
- package/dist/commands/delete.d.ts +3 -0
- package/dist/commands/delete.js +13 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.js +44 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/stats.d.ts +1 -0
- package/dist/commands/stats.js +9 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.js +16 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.js +49 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/upload.d.ts +7 -0
- package/dist/commands/upload.js +47 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -0
- package/dist/formatters.d.ts +9 -0
- package/dist/formatters.js +83 -0
- package/dist/formatters.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +6 -0
- package/dist/output.js +58 -0
- package/dist/output.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.update = update;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const form_data_1 = __importDefault(require("form-data"));
|
|
10
|
+
const auth_client_js_1 = require("../auth-client.js");
|
|
11
|
+
const errors_js_1 = require("../errors.js");
|
|
12
|
+
const output_js_1 = require("../output.js");
|
|
13
|
+
const formatters_js_1 = require("../formatters.js");
|
|
14
|
+
const VALID_TYPES = ['markdown', 'html', 'chart', 'code', 'text'];
|
|
15
|
+
async function update(uuid, filePath, options) {
|
|
16
|
+
const absPath = node_path_1.default.resolve(filePath);
|
|
17
|
+
if (!node_fs_1.default.existsSync(absPath)) {
|
|
18
|
+
throw new errors_js_1.CliError('FILE_NOT_FOUND', `File not found: ${absPath}`);
|
|
19
|
+
}
|
|
20
|
+
if (options.type && !VALID_TYPES.includes(options.type)) {
|
|
21
|
+
throw new errors_js_1.CliError('INVALID_TYPE', `Type must be one of: ${VALID_TYPES.join(', ')}`);
|
|
22
|
+
}
|
|
23
|
+
if (options.dryRun) {
|
|
24
|
+
(0, output_js_1.outputSuccess)({ dryRun: true, action: 'would update', assetId: uuid, file: absPath }, formatters_js_1.formatVersionCreated);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const { client } = (0, auth_client_js_1.requireAuthClient)();
|
|
28
|
+
if (options.type) {
|
|
29
|
+
// Content publish mode
|
|
30
|
+
const content = node_fs_1.default.readFileSync(absPath, 'utf-8');
|
|
31
|
+
const body = { type: options.type, content };
|
|
32
|
+
if (options.label)
|
|
33
|
+
body.label = options.label;
|
|
34
|
+
if (options.context)
|
|
35
|
+
body.creatorContext = options.context;
|
|
36
|
+
const { data } = await client.post(`/v0/assets/${uuid}/versions`, body);
|
|
37
|
+
(0, output_js_1.outputSuccess)(data.data, formatters_js_1.formatVersionCreated);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// File upload mode
|
|
41
|
+
const form = new form_data_1.default();
|
|
42
|
+
form.append('file', node_fs_1.default.createReadStream(absPath));
|
|
43
|
+
if (options.label)
|
|
44
|
+
form.append('label', options.label);
|
|
45
|
+
if (options.context)
|
|
46
|
+
form.append('creatorContext', options.context);
|
|
47
|
+
const { data } = await client.post(`/v0/assets/${uuid}/versions`, form, {
|
|
48
|
+
headers: form.getHeaders(),
|
|
49
|
+
maxContentLength: Infinity,
|
|
50
|
+
maxBodyLength: Infinity,
|
|
51
|
+
});
|
|
52
|
+
(0, output_js_1.outputSuccess)(data.data, formatters_js_1.formatVersionCreated);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":";;;;;AAYA,wBA4CC;AAxDD,sDAAyB;AACzB,0DAA6B;AAC7B,0DAAiC;AAEjC,sDAAsD;AACtD,4CAAwC;AACxC,4CAA6C;AAC7C,oDAAwD;AAExD,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAGpE,KAAK,UAAU,MAAM,CAC1B,IAAY,EACZ,QAAgB,EAChB,OAA8E;IAE9E,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAQ,CAAC,gBAAgB,EAAE,mBAAmB,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAmB,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,oBAAQ,CAAC,cAAc,EAAE,wBAAwB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAA,yBAAa,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,oCAAoB,CAAC,CAAC;QAC5G,OAAO;IACT,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;IAEvC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,uBAAuB;QACvB,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;QACtE,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9C,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QAE3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,WAAW,EAAE,IAAI,CAAC,CAAC;QACxE,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,EAAE,oCAAoB,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,mBAAmB;QACnB,MAAM,IAAI,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,WAAW,EAAE,IAAI,EAAE;YACtE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,gBAAgB,EAAE,QAAQ;YAC1B,aAAa,EAAE,QAAQ;SACxB,CAAC,CAAC;QACH,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,EAAE,oCAAoB,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.upload = upload;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const form_data_1 = __importDefault(require("form-data"));
|
|
10
|
+
const mime_types_1 = __importDefault(require("mime-types"));
|
|
11
|
+
const auth_client_js_1 = require("../auth-client.js");
|
|
12
|
+
const errors_js_1 = require("../errors.js");
|
|
13
|
+
const output_js_1 = require("../output.js");
|
|
14
|
+
const formatters_js_1 = require("../formatters.js");
|
|
15
|
+
async function upload(filePath, options) {
|
|
16
|
+
const absPath = node_path_1.default.resolve(filePath);
|
|
17
|
+
if (!node_fs_1.default.existsSync(absPath)) {
|
|
18
|
+
throw new errors_js_1.CliError('FILE_NOT_FOUND', `File not found: ${absPath}`);
|
|
19
|
+
}
|
|
20
|
+
const mimeType = mime_types_1.default.lookup(absPath) || 'application/octet-stream';
|
|
21
|
+
const title = options.title || node_path_1.default.basename(absPath);
|
|
22
|
+
const size = node_fs_1.default.statSync(absPath).size;
|
|
23
|
+
if (options.dryRun) {
|
|
24
|
+
(0, output_js_1.outputSuccess)({ dryRun: true, action: 'would upload', file: absPath, title, mimeType, size }, formatters_js_1.formatAssetCreated);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const { client } = (0, auth_client_js_1.requireAuthClient)();
|
|
28
|
+
const form = new form_data_1.default();
|
|
29
|
+
form.append('file', node_fs_1.default.createReadStream(absPath));
|
|
30
|
+
form.append('type', 'file');
|
|
31
|
+
form.append('mimeType', mimeType);
|
|
32
|
+
form.append('title', title);
|
|
33
|
+
if (options.parent)
|
|
34
|
+
form.append('parentAssetId', options.parent);
|
|
35
|
+
if (options.context)
|
|
36
|
+
form.append('creatorContext', options.context);
|
|
37
|
+
if (options.refs)
|
|
38
|
+
form.append('inputReferences', JSON.stringify(options.refs.split(',').map((r) => r.trim())));
|
|
39
|
+
const { data } = await client.post('/v0/assets', form, {
|
|
40
|
+
headers: form.getHeaders(),
|
|
41
|
+
maxContentLength: Infinity,
|
|
42
|
+
maxBodyLength: Infinity,
|
|
43
|
+
});
|
|
44
|
+
const url = data.data.url || `https://tokenrip.com/s/${data.data.id}`;
|
|
45
|
+
(0, output_js_1.outputSuccess)({
|
|
46
|
+
id: data.data.id,
|
|
47
|
+
url,
|
|
48
|
+
title: data.data.title,
|
|
49
|
+
type: data.data.type,
|
|
50
|
+
mimeType: data.data.mimeType,
|
|
51
|
+
}, formatters_js_1.formatAssetCreated);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/upload.ts"],"names":[],"mappings":";;;;;AASA,wBAyCC;AAlDD,sDAAyB;AACzB,0DAA6B;AAC7B,0DAAiC;AACjC,4DAA8B;AAC9B,sDAAsD;AACtD,4CAAwC;AACxC,4CAA6C;AAC7C,oDAAsD;AAE/C,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,OAA+F;IAC5I,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAQ,CAAC,gBAAgB,EAAE,mBAAmB,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,0BAA0B,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,iBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAEvC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAA,yBAAa,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,kCAAkB,CAAC,CAAC;QAClH,OAAO;IACT,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,mBAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/G,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;QACrD,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;QAC1B,gBAAgB,EAAE,QAAQ;QAC1B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,0BAA0B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACtE,IAAA,yBAAa,EAAC;QACZ,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;QAChB,GAAG;QACH,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;KAC7B,EAAE,kCAAkB,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CONFIG_DIR = void 0;
|
|
7
|
+
exports.loadConfig = loadConfig;
|
|
8
|
+
exports.saveConfig = saveConfig;
|
|
9
|
+
exports.getApiUrl = getApiUrl;
|
|
10
|
+
exports.getApiKey = getApiKey;
|
|
11
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
14
|
+
exports.CONFIG_DIR = node_path_1.default.join(node_os_1.default.homedir(), '.config', 'tokenrip');
|
|
15
|
+
const CONFIG_FILE = node_path_1.default.join(exports.CONFIG_DIR, 'config.json');
|
|
16
|
+
function defaultConfig() {
|
|
17
|
+
return { preferences: {} };
|
|
18
|
+
}
|
|
19
|
+
function loadConfig() {
|
|
20
|
+
try {
|
|
21
|
+
const raw = node_fs_1.default.readFileSync(CONFIG_FILE, 'utf-8');
|
|
22
|
+
return JSON.parse(raw);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return defaultConfig();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function saveConfig(config) {
|
|
29
|
+
node_fs_1.default.mkdirSync(exports.CONFIG_DIR, { recursive: true });
|
|
30
|
+
node_fs_1.default.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
function getApiUrl(config) {
|
|
33
|
+
return config.apiUrl || process.env.TOKENRIP_API_URL || 'https://api.tokenrip.com';
|
|
34
|
+
}
|
|
35
|
+
function getApiKey(config) {
|
|
36
|
+
return config.apiKey || process.env.TOKENRIP_API_KEY;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;;;;AAiBA,gCAOC;AAED,gCAGC;AAED,8BAEC;AAED,8BAEC;AArCD,sDAAyB;AACzB,0DAA6B;AAC7B,sDAAyB;AAEZ,QAAA,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACzE,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,aAAa,CAAC,CAAC;AAQzD,SAAS,aAAa;IACpB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAAsB;IAC/C,iBAAE,CAAC,SAAS,CAAC,kBAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,iBAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,SAAgB,SAAS,CAAC,MAAsB;IAC9C,OAAO,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;AACrF,CAAC;AAED,SAAgB,SAAS,CAAC,MAAsB;IAC9C,OAAO,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CliError = void 0;
|
|
4
|
+
exports.toCliError = toCliError;
|
|
5
|
+
class CliError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
constructor(code, message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.name = 'CliError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.CliError = CliError;
|
|
14
|
+
function toCliError(err) {
|
|
15
|
+
if (err instanceof CliError)
|
|
16
|
+
return err;
|
|
17
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
18
|
+
return new CliError('UNKNOWN_ERROR', message);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";;;AAUA,gCAIC;AAdD,MAAa,QAAS,SAAQ,KAAK;IAEf;IADlB,YACkB,IAAY,EAC5B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QAI5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AARD,4BAQC;AAED,SAAgB,UAAU,CAAC,GAAY;IACrC,IAAI,GAAG,YAAY,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,IAAI,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatAuthKey = exports.formatConfigSaved = exports.formatVersionDeleted = exports.formatVersionCreated = exports.formatStats = exports.formatAssetList = exports.formatAssetDeleted = exports.formatAssetCreated = void 0;
|
|
4
|
+
const formatAssetCreated = (data) => {
|
|
5
|
+
const lines = [`Created: ${data.title || '(untitled)'}`];
|
|
6
|
+
if (data.id)
|
|
7
|
+
lines.push(` ID: ${data.id}`);
|
|
8
|
+
if (data.url)
|
|
9
|
+
lines.push(` URL: ${data.url}`);
|
|
10
|
+
if (data.type)
|
|
11
|
+
lines.push(` Type: ${data.type}`);
|
|
12
|
+
if (data.mimeType)
|
|
13
|
+
lines.push(` MIME: ${data.mimeType}`);
|
|
14
|
+
return lines.join('\n');
|
|
15
|
+
};
|
|
16
|
+
exports.formatAssetCreated = formatAssetCreated;
|
|
17
|
+
const formatAssetDeleted = (data) => {
|
|
18
|
+
return `Deleted: ${data.id}`;
|
|
19
|
+
};
|
|
20
|
+
exports.formatAssetDeleted = formatAssetDeleted;
|
|
21
|
+
const formatAssetList = (data) => {
|
|
22
|
+
const assets = data;
|
|
23
|
+
if (!Array.isArray(assets) || assets.length === 0) {
|
|
24
|
+
return 'No assets found.';
|
|
25
|
+
}
|
|
26
|
+
const lines = [`${assets.length} asset(s):\n`];
|
|
27
|
+
for (const a of assets) {
|
|
28
|
+
const title = a.title || '(untitled)';
|
|
29
|
+
const type = a.type || '';
|
|
30
|
+
const id = a.id || '';
|
|
31
|
+
lines.push(` ${type.toString().padEnd(10)} ${title} (${id})`);
|
|
32
|
+
}
|
|
33
|
+
return lines.join('\n');
|
|
34
|
+
};
|
|
35
|
+
exports.formatAssetList = formatAssetList;
|
|
36
|
+
const formatStats = (data) => {
|
|
37
|
+
const lines = [];
|
|
38
|
+
if (data.totalCount !== undefined)
|
|
39
|
+
lines.push(`Total assets: ${data.totalCount}`);
|
|
40
|
+
if (data.totalBytes !== undefined)
|
|
41
|
+
lines.push(`Total size: ${formatBytes(data.totalBytes)}`);
|
|
42
|
+
const byType = data.byType;
|
|
43
|
+
if (Array.isArray(byType) && byType.length > 0) {
|
|
44
|
+
lines.push('');
|
|
45
|
+
lines.push('By type:');
|
|
46
|
+
for (const t of byType) {
|
|
47
|
+
const name = (t.type || 'unknown');
|
|
48
|
+
const count = t.count ?? 0;
|
|
49
|
+
const bytes = t.totalBytes ?? 0;
|
|
50
|
+
lines.push(` ${name.padEnd(10)} ${String(count).padStart(4)} assets ${formatBytes(bytes)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
};
|
|
55
|
+
exports.formatStats = formatStats;
|
|
56
|
+
const formatVersionCreated = (data) => {
|
|
57
|
+
const lines = [`Version ${data.version || '?'} published`];
|
|
58
|
+
if (data.id)
|
|
59
|
+
lines.push(` Version ID: ${data.id}`);
|
|
60
|
+
if (data.assetId)
|
|
61
|
+
lines.push(` Asset ID: ${data.assetId}`);
|
|
62
|
+
if (data.label)
|
|
63
|
+
lines.push(` Label: ${data.label}`);
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
};
|
|
66
|
+
exports.formatVersionCreated = formatVersionCreated;
|
|
67
|
+
const formatVersionDeleted = (data) => {
|
|
68
|
+
return `Deleted version ${data.versionId} from asset ${data.assetId}`;
|
|
69
|
+
};
|
|
70
|
+
exports.formatVersionDeleted = formatVersionDeleted;
|
|
71
|
+
const formatConfigSaved = (data) => {
|
|
72
|
+
return data.message || 'Configuration saved.';
|
|
73
|
+
};
|
|
74
|
+
exports.formatConfigSaved = formatConfigSaved;
|
|
75
|
+
const formatAuthKey = (data) => {
|
|
76
|
+
const lines = [data.message || 'API key created.'];
|
|
77
|
+
if (data.keyName)
|
|
78
|
+
lines.push(` Name: ${data.keyName}`);
|
|
79
|
+
if (data.apiKey)
|
|
80
|
+
lines.push(` Key: ${data.apiKey}`);
|
|
81
|
+
if (data.note)
|
|
82
|
+
lines.push(` ${data.note}`);
|
|
83
|
+
return lines.join('\n');
|
|
84
|
+
};
|
|
85
|
+
exports.formatAuthKey = formatAuthKey;
|
|
86
|
+
function formatBytes(bytes) {
|
|
87
|
+
if (bytes === 0)
|
|
88
|
+
return '0 B';
|
|
89
|
+
const units = ['B', 'KB', 'MB', 'GB'];
|
|
90
|
+
const i = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
|
|
91
|
+
const value = bytes / Math.pow(1024, i);
|
|
92
|
+
return `${value.toFixed(i === 0 ? 0 : 1)} ${units[i]}`;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireAuthClient = exports.wrapCommand = exports.outputError = exports.outputSuccess = exports.toCliError = exports.CliError = exports.createHttpClient = exports.CONFIG_DIR = exports.getApiKey = exports.getApiUrl = exports.saveConfig = exports.loadConfig = void 0;
|
|
4
|
+
var config_js_1 = require("./config.js");
|
|
5
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_js_1.loadConfig; } });
|
|
6
|
+
Object.defineProperty(exports, "saveConfig", { enumerable: true, get: function () { return config_js_1.saveConfig; } });
|
|
7
|
+
Object.defineProperty(exports, "getApiUrl", { enumerable: true, get: function () { return config_js_1.getApiUrl; } });
|
|
8
|
+
Object.defineProperty(exports, "getApiKey", { enumerable: true, get: function () { return config_js_1.getApiKey; } });
|
|
9
|
+
Object.defineProperty(exports, "CONFIG_DIR", { enumerable: true, get: function () { return config_js_1.CONFIG_DIR; } });
|
|
10
|
+
var client_js_1 = require("./client.js");
|
|
11
|
+
Object.defineProperty(exports, "createHttpClient", { enumerable: true, get: function () { return client_js_1.createHttpClient; } });
|
|
12
|
+
var errors_js_1 = require("./errors.js");
|
|
13
|
+
Object.defineProperty(exports, "CliError", { enumerable: true, get: function () { return errors_js_1.CliError; } });
|
|
14
|
+
Object.defineProperty(exports, "toCliError", { enumerable: true, get: function () { return errors_js_1.toCliError; } });
|
|
15
|
+
var output_js_1 = require("./output.js");
|
|
16
|
+
Object.defineProperty(exports, "outputSuccess", { enumerable: true, get: function () { return output_js_1.outputSuccess; } });
|
|
17
|
+
Object.defineProperty(exports, "outputError", { enumerable: true, get: function () { return output_js_1.outputError; } });
|
|
18
|
+
Object.defineProperty(exports, "wrapCommand", { enumerable: true, get: function () { return output_js_1.wrapCommand; } });
|
|
19
|
+
var auth_client_js_1 = require("./auth-client.js");
|
|
20
|
+
Object.defineProperty(exports, "requireAuthClient", { enumerable: true, get: function () { return auth_client_js_1.requireAuthClient; } });
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAuF;AAA9E,uGAAA,UAAU,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,uGAAA,UAAU,OAAA;AAEjE,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AAEzB,yCAAmD;AAA1C,qGAAA,QAAQ,OAAA;AAAE,uGAAA,UAAU,OAAA;AAC7B,yCAAsE;AAA7D,0GAAA,aAAa,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,wGAAA,WAAW,OAAA;AAChD,mDAAqD;AAA5C,mHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setForceJson = setForceJson;
|
|
4
|
+
exports.outputSuccess = outputSuccess;
|
|
5
|
+
exports.outputError = outputError;
|
|
6
|
+
exports.wrapCommand = wrapCommand;
|
|
7
|
+
const errors_js_1 = require("./errors.js");
|
|
8
|
+
let forceJson = false;
|
|
9
|
+
function setForceJson(value) {
|
|
10
|
+
forceJson = value;
|
|
11
|
+
}
|
|
12
|
+
function isJsonMode() {
|
|
13
|
+
if (forceJson)
|
|
14
|
+
return true;
|
|
15
|
+
if (process.env.TOKENRIP_OUTPUT === 'json')
|
|
16
|
+
return true;
|
|
17
|
+
if (!process.stdout.isTTY)
|
|
18
|
+
return true;
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
function outputSuccess(data, formatter) {
|
|
22
|
+
if (isJsonMode() || !formatter) {
|
|
23
|
+
console.log(JSON.stringify({ ok: true, data }));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log(formatter(data));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function outputError(err) {
|
|
30
|
+
if (isJsonMode()) {
|
|
31
|
+
console.log(JSON.stringify({ ok: false, error: err.code, message: err.message }));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.error(`Error [${err.code}]: ${err.message}`);
|
|
35
|
+
}
|
|
36
|
+
// Always write actionable hints to stderr when interactive
|
|
37
|
+
if (process.stderr.isTTY) {
|
|
38
|
+
const hint = ERROR_HINTS[err.code];
|
|
39
|
+
if (hint)
|
|
40
|
+
console.error(`Hint: ${hint}`);
|
|
41
|
+
}
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
function wrapCommand(fn) {
|
|
45
|
+
const wrapped = async (...args) => {
|
|
46
|
+
try {
|
|
47
|
+
await fn(...args);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
outputError((0, errors_js_1.toCliError)(err));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return wrapped;
|
|
54
|
+
}
|
|
55
|
+
const ERROR_HINTS = {
|
|
56
|
+
NO_API_KEY: 'Run `tokenrip auth create-key` or set TOKENRIP_API_KEY.',
|
|
57
|
+
UNAUTHORIZED: 'Your API key may be expired or invalid. Run `tokenrip auth create-key`.',
|
|
58
|
+
NETWORK_ERROR: 'Is the Tokenrip server running? Check TOKENRIP_API_URL.',
|
|
59
|
+
TIMEOUT: 'The server did not respond in time. Try again or check server status.',
|
|
60
|
+
FILE_NOT_FOUND: 'Check the file path and try again.',
|
|
61
|
+
INVALID_TYPE: 'Valid types: markdown, html, chart, code, text.',
|
|
62
|
+
AUTH_FAILED: 'Could not create API key. Is the server running?',
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":";;AAKA,oCAEC;AASD,sCAMC;AAED,kCAcC;AAED,kCASC;AAjDD,2CAAmD;AAGnD,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,SAAgB,YAAY,CAAC,KAAc;IACzC,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,aAAa,CAAC,IAA6B,EAAE,SAAqB;IAChF,IAAI,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,GAAa;IACvC,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,2DAA2D;IAC3D,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,WAAW,CAA8C,EAAK;IAC5E,MAAM,OAAO,GAAG,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,IAAA,sBAAU,EAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IACF,OAAO,OAAuB,CAAC;AACjC,CAAC;AAED,MAAM,WAAW,GAA2B;IAC1C,UAAU,EAAE,yDAAyD;IACrE,YAAY,EAAE,yEAAyE;IACvF,aAAa,EAAE,yDAAyD;IACxE,OAAO,EAAE,uEAAuE;IAChF,cAAc,EAAE,oCAAoC;IACpD,YAAY,EAAE,iDAAiD;IAC/D,WAAW,EAAE,kDAAkD;CAChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { configSetKey, configSetUrl } from './commands/config.js';
|
|
5
|
+
import { authCreateKey } from './commands/auth.js';
|
|
6
|
+
import { upload } from './commands/upload.js';
|
|
7
|
+
import { publish } from './commands/publish.js';
|
|
8
|
+
import { status } from './commands/status.js';
|
|
9
|
+
import { deleteAsset } from './commands/delete.js';
|
|
10
|
+
import { update } from './commands/update.js';
|
|
11
|
+
import { deleteVersion } from './commands/delete-version.js';
|
|
12
|
+
import { stats } from './commands/stats.js';
|
|
13
|
+
import { wrapCommand, setForceJson } from './output.js';
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
const { version } = require('../package.json');
|
|
16
|
+
const program = new Command();
|
|
17
|
+
program
|
|
18
|
+
.name('tokenrip')
|
|
19
|
+
.description('Tokenrip — Asset sharing for AI agents')
|
|
20
|
+
.version(version)
|
|
21
|
+
.option('--json', 'Force JSON output even in interactive terminal')
|
|
22
|
+
.hook('preAction', () => {
|
|
23
|
+
if (program.opts().json)
|
|
24
|
+
setForceJson(true);
|
|
25
|
+
})
|
|
26
|
+
.addHelpText('after', `
|
|
27
|
+
QUICK START:
|
|
28
|
+
1. Create an API key (auto-saved):
|
|
29
|
+
$ tokenrip auth create-key
|
|
30
|
+
|
|
31
|
+
2. Start sharing assets:
|
|
32
|
+
$ tokenrip asset publish examples/report.md --type markdown
|
|
33
|
+
$ tokenrip asset upload image.png --title "Screenshot"
|
|
34
|
+
|
|
35
|
+
3. Check your assets:
|
|
36
|
+
$ tokenrip asset list
|
|
37
|
+
`);
|
|
38
|
+
// ── asset commands ──────────────────────────────────────────────────
|
|
39
|
+
const asset = program
|
|
40
|
+
.command('asset')
|
|
41
|
+
.description('Create, manage, and inspect assets');
|
|
42
|
+
asset
|
|
43
|
+
.command('upload')
|
|
44
|
+
.argument('<file>', 'File path to upload (PDF, image, document, etc.)')
|
|
45
|
+
.option('--title <title>', 'Display title for the asset')
|
|
46
|
+
.option('--parent <uuid>', 'Parent asset ID for lineage tracking')
|
|
47
|
+
.option('--context <text>', 'Creator context (your agent name, task, etc.)')
|
|
48
|
+
.option('--refs <urls>', 'Comma-separated input reference URLs')
|
|
49
|
+
.option('--dry-run', 'Validate inputs without uploading')
|
|
50
|
+
.description('Upload a file and get a shareable UUID link')
|
|
51
|
+
.addHelpText('after', `
|
|
52
|
+
EXAMPLES:
|
|
53
|
+
$ tokenrip asset upload report.pdf --title "Agent Analysis"
|
|
54
|
+
$ tokenrip asset upload chart.png --context "Claude Agent 1" \\
|
|
55
|
+
--refs "https://source.example.com,https://another.com"
|
|
56
|
+
`)
|
|
57
|
+
.action(wrapCommand(upload));
|
|
58
|
+
asset
|
|
59
|
+
.command('publish')
|
|
60
|
+
.argument('<file>', 'File containing the content to publish')
|
|
61
|
+
.requiredOption('--type <type>', 'Content type: markdown, html, chart, code, text, or json')
|
|
62
|
+
.option('--title <title>', 'Display title for the asset')
|
|
63
|
+
.option('--parent <uuid>', 'Parent asset ID for lineage tracking')
|
|
64
|
+
.option('--context <text>', 'Creator context (your agent name, task, etc.)')
|
|
65
|
+
.option('--refs <urls>', 'Comma-separated input reference URLs')
|
|
66
|
+
.option('--dry-run', 'Validate inputs without publishing')
|
|
67
|
+
.description('Publish structured content with rich rendering support')
|
|
68
|
+
.addHelpText('after', `
|
|
69
|
+
CONTENT TYPES:
|
|
70
|
+
markdown - Rendered markdown with formatting
|
|
71
|
+
html - Custom HTML rendering
|
|
72
|
+
chart - JSON chart/visualization data
|
|
73
|
+
code - Code snippets with syntax highlighting
|
|
74
|
+
text - Plain text
|
|
75
|
+
json - Interactive JSON viewer with collapse/expand
|
|
76
|
+
|
|
77
|
+
EXAMPLES:
|
|
78
|
+
$ tokenrip asset publish analysis.md --type markdown --title "Summary"
|
|
79
|
+
$ tokenrip asset publish data.json --type chart \\
|
|
80
|
+
--context "Data viz agent" --refs "https://api.example.com"
|
|
81
|
+
`)
|
|
82
|
+
.action(wrapCommand(publish));
|
|
83
|
+
asset
|
|
84
|
+
.command('list')
|
|
85
|
+
.option('--since <iso-date>', 'Only show assets modified after this timestamp (ISO 8601)')
|
|
86
|
+
.option('--limit <n>', 'Maximum number of assets to return (default: 20)', '20')
|
|
87
|
+
.option('--type <type>', 'Filter by asset type (markdown, html, chart, code, text, file)')
|
|
88
|
+
.description('List your published assets and their metadata')
|
|
89
|
+
.addHelpText('after', `
|
|
90
|
+
EXAMPLES:
|
|
91
|
+
$ tokenrip asset list
|
|
92
|
+
$ tokenrip asset list --since 2026-03-30T00:00:00Z
|
|
93
|
+
$ tokenrip asset list --type markdown --limit 5
|
|
94
|
+
`)
|
|
95
|
+
.action(wrapCommand(status));
|
|
96
|
+
asset
|
|
97
|
+
.command('delete')
|
|
98
|
+
.argument('<uuid>', 'Asset ID to delete')
|
|
99
|
+
.option('--dry-run', 'Show what would be deleted without deleting')
|
|
100
|
+
.description('Permanently delete an asset and its shareable link')
|
|
101
|
+
.addHelpText('after', `
|
|
102
|
+
EXAMPLES:
|
|
103
|
+
$ tokenrip asset delete 550e8400-e29b-41d4-a716-446655440000
|
|
104
|
+
|
|
105
|
+
CAUTION:
|
|
106
|
+
This permanently removes the asset and its shareable link.
|
|
107
|
+
This action cannot be undone.
|
|
108
|
+
`)
|
|
109
|
+
.action(wrapCommand(deleteAsset));
|
|
110
|
+
asset
|
|
111
|
+
.command('update')
|
|
112
|
+
.argument('<uuid>', 'Asset ID to update with a new version')
|
|
113
|
+
.argument('<file>', 'File containing the new version content')
|
|
114
|
+
.option('--type <type>', 'Content type (markdown, html, chart, code, text) — omit for binary file upload')
|
|
115
|
+
.option('--label <text>', 'Human-readable label for this version')
|
|
116
|
+
.option('--context <text>', 'Creator context (your agent name, task, etc.)')
|
|
117
|
+
.option('--dry-run', 'Validate without publishing')
|
|
118
|
+
.description('Publish a new version of an existing asset')
|
|
119
|
+
.addHelpText('after', `
|
|
120
|
+
EXAMPLES:
|
|
121
|
+
$ tokenrip asset update 550e8400-... report-v2.md --type markdown
|
|
122
|
+
$ tokenrip asset update 550e8400-... chart.png --label "with axes fixed"
|
|
123
|
+
`)
|
|
124
|
+
.action(wrapCommand(update));
|
|
125
|
+
asset
|
|
126
|
+
.command('delete-version')
|
|
127
|
+
.argument('<uuid>', 'Asset ID')
|
|
128
|
+
.argument('<versionId>', 'Version ID to delete')
|
|
129
|
+
.option('--dry-run', 'Show what would be deleted without deleting')
|
|
130
|
+
.description('Delete a specific version of an asset')
|
|
131
|
+
.addHelpText('after', `
|
|
132
|
+
EXAMPLES:
|
|
133
|
+
$ tokenrip asset delete-version 550e8400-... 660f9500-...
|
|
134
|
+
|
|
135
|
+
CAUTION:
|
|
136
|
+
This permanently removes the version content.
|
|
137
|
+
Cannot delete the last remaining version — delete the asset instead.
|
|
138
|
+
`)
|
|
139
|
+
.action(wrapCommand(deleteVersion));
|
|
140
|
+
asset
|
|
141
|
+
.command('stats')
|
|
142
|
+
.description('Show storage usage statistics')
|
|
143
|
+
.addHelpText('after', `
|
|
144
|
+
EXAMPLES:
|
|
145
|
+
$ tokenrip asset stats
|
|
146
|
+
|
|
147
|
+
Shows total asset count and storage bytes broken down by type.
|
|
148
|
+
`)
|
|
149
|
+
.action(wrapCommand(stats));
|
|
150
|
+
// ── auth commands ───────────────────────────────────────────────────
|
|
151
|
+
const auth = program.command('auth').description('Manage API keys and authentication');
|
|
152
|
+
auth
|
|
153
|
+
.command('create-key')
|
|
154
|
+
.option('--name <name>', 'Friendly name for this key (default: tokenrip-<hostname>)')
|
|
155
|
+
.option('--no-save', 'Create key but do not auto-save to config')
|
|
156
|
+
.description('Create a new API key')
|
|
157
|
+
.addHelpText('after', `
|
|
158
|
+
EXAMPLES:
|
|
159
|
+
Create a key with a default name (auto-saved):
|
|
160
|
+
$ tokenrip auth create-key
|
|
161
|
+
|
|
162
|
+
Create a key with a custom name:
|
|
163
|
+
$ tokenrip auth create-key --name "My Agent"
|
|
164
|
+
|
|
165
|
+
Create a key without auto-saving:
|
|
166
|
+
$ tokenrip auth create-key --no-save
|
|
167
|
+
|
|
168
|
+
The API key is sensitive — treat it like a password.
|
|
169
|
+
`)
|
|
170
|
+
.action(wrapCommand(authCreateKey));
|
|
171
|
+
// ── config commands ─────────────────────────────────────────────────
|
|
172
|
+
const config = program.command('config').description('Manage CLI configuration');
|
|
173
|
+
config
|
|
174
|
+
.command('set-key')
|
|
175
|
+
.argument('<key>', 'API key from /v0/auth/keys')
|
|
176
|
+
.description('Save your API key for authentication')
|
|
177
|
+
.addHelpText('after', `
|
|
178
|
+
HOW TO GET AN API KEY:
|
|
179
|
+
The easiest way is:
|
|
180
|
+
$ tokenrip auth create-key
|
|
181
|
+
|
|
182
|
+
Or manually via the API:
|
|
183
|
+
curl -X POST https://api.tokenrip.com/v0/auth/keys \\
|
|
184
|
+
-H "Content-Type: application/json" \\
|
|
185
|
+
-d '{"name":"your-agent-name"}'
|
|
186
|
+
|
|
187
|
+
Then save the key:
|
|
188
|
+
$ tokenrip config set-key <key>
|
|
189
|
+
|
|
190
|
+
ENVIRONMENT VARIABLE:
|
|
191
|
+
You can also set TOKENRIP_API_KEY instead of using this command.
|
|
192
|
+
`)
|
|
193
|
+
.action(wrapCommand(configSetKey));
|
|
194
|
+
config
|
|
195
|
+
.command('set-url')
|
|
196
|
+
.argument('<url>', 'e.g., http://localhost:3434')
|
|
197
|
+
.description('Set the Tokenrip API server URL')
|
|
198
|
+
.addHelpText('after', `
|
|
199
|
+
EXAMPLES:
|
|
200
|
+
Local development:
|
|
201
|
+
tokenrip config set-url http://localhost:3434
|
|
202
|
+
|
|
203
|
+
Production:
|
|
204
|
+
tokenrip config set-url https://api.tokenrip.com
|
|
205
|
+
|
|
206
|
+
ENVIRONMENT VARIABLE:
|
|
207
|
+
You can also set TOKENRIP_API_URL instead of using this command.
|
|
208
|
+
`)
|
|
209
|
+
.action(wrapCommand(configSetUrl));
|
|
210
|
+
program.parse();
|
|
211
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|