@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.
Files changed (88) hide show
  1. package/AGENTS.md +127 -0
  2. package/LICENSE +21 -0
  3. package/README.md +195 -0
  4. package/dist/auth-client.d.ts +8 -0
  5. package/dist/auth-client.js +14 -0
  6. package/dist/auth-client.js.map +1 -0
  7. package/dist/cjs/auth-client.js +17 -0
  8. package/dist/cjs/auth-client.js.map +1 -0
  9. package/dist/cjs/client.js +34 -0
  10. package/dist/cjs/client.js.map +1 -0
  11. package/dist/cjs/commands/auth.js +44 -0
  12. package/dist/cjs/commands/auth.js.map +1 -0
  13. package/dist/cjs/commands/config.js +20 -0
  14. package/dist/cjs/commands/config.js.map +1 -0
  15. package/dist/cjs/commands/delete-version.js +16 -0
  16. package/dist/cjs/commands/delete-version.js.map +1 -0
  17. package/dist/cjs/commands/delete.js +16 -0
  18. package/dist/cjs/commands/delete.js.map +1 -0
  19. package/dist/cjs/commands/publish.js +50 -0
  20. package/dist/cjs/commands/publish.js.map +1 -0
  21. package/dist/cjs/commands/stats.js +12 -0
  22. package/dist/cjs/commands/stats.js.map +1 -0
  23. package/dist/cjs/commands/status.js +19 -0
  24. package/dist/cjs/commands/status.js.map +1 -0
  25. package/dist/cjs/commands/update.js +55 -0
  26. package/dist/cjs/commands/update.js.map +1 -0
  27. package/dist/cjs/commands/upload.js +53 -0
  28. package/dist/cjs/commands/upload.js.map +1 -0
  29. package/dist/cjs/config.js +38 -0
  30. package/dist/cjs/config.js.map +1 -0
  31. package/dist/cjs/errors.js +20 -0
  32. package/dist/cjs/errors.js.map +1 -0
  33. package/dist/cjs/formatters.js +94 -0
  34. package/dist/cjs/formatters.js.map +1 -0
  35. package/dist/cjs/index.js +21 -0
  36. package/dist/cjs/index.js.map +1 -0
  37. package/dist/cjs/output.js +64 -0
  38. package/dist/cjs/output.js.map +1 -0
  39. package/dist/cjs/package.json +1 -0
  40. package/dist/cli.d.ts +2 -0
  41. package/dist/cli.js +211 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/client.d.ts +7 -0
  44. package/dist/client.js +28 -0
  45. package/dist/client.js.map +1 -0
  46. package/dist/commands/auth.d.ts +4 -0
  47. package/dist/commands/auth.js +41 -0
  48. package/dist/commands/auth.js.map +1 -0
  49. package/dist/commands/config.d.ts +2 -0
  50. package/dist/commands/config.js +16 -0
  51. package/dist/commands/config.js.map +1 -0
  52. package/dist/commands/delete-version.d.ts +3 -0
  53. package/dist/commands/delete-version.js +13 -0
  54. package/dist/commands/delete-version.js.map +1 -0
  55. package/dist/commands/delete.d.ts +3 -0
  56. package/dist/commands/delete.js +13 -0
  57. package/dist/commands/delete.js.map +1 -0
  58. package/dist/commands/publish.d.ts +8 -0
  59. package/dist/commands/publish.js +44 -0
  60. package/dist/commands/publish.js.map +1 -0
  61. package/dist/commands/stats.d.ts +1 -0
  62. package/dist/commands/stats.js +9 -0
  63. package/dist/commands/stats.js.map +1 -0
  64. package/dist/commands/status.d.ts +5 -0
  65. package/dist/commands/status.js +16 -0
  66. package/dist/commands/status.js.map +1 -0
  67. package/dist/commands/update.d.ts +6 -0
  68. package/dist/commands/update.js +49 -0
  69. package/dist/commands/update.js.map +1 -0
  70. package/dist/commands/upload.d.ts +7 -0
  71. package/dist/commands/upload.js +47 -0
  72. package/dist/commands/upload.js.map +1 -0
  73. package/dist/config.d.ts +10 -0
  74. package/dist/config.js +28 -0
  75. package/dist/config.js.map +1 -0
  76. package/dist/errors.d.ts +5 -0
  77. package/dist/errors.js +15 -0
  78. package/dist/errors.js.map +1 -0
  79. package/dist/formatters.d.ts +9 -0
  80. package/dist/formatters.js +83 -0
  81. package/dist/formatters.js.map +1 -0
  82. package/dist/index.d.ts +8 -0
  83. package/dist/index.js +6 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/output.d.ts +6 -0
  86. package/dist/output.js +58 -0
  87. package/dist/output.js.map +1 -0
  88. 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
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { AxiosInstance } from 'axios';
2
+ export interface ClientConfig {
3
+ baseUrl?: string;
4
+ timeout?: number;
5
+ apiKey?: string;
6
+ }
7
+ export declare function createHttpClient(config?: ClientConfig): AxiosInstance;