@tokenrip/cli 1.1.8 → 1.2.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/AGENTS.md +9 -2
- package/README.md +31 -584
- package/SKILL.md +14 -2
- package/dist/cjs/client.js +9 -3
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/commands/auth.js +2 -1
- package/dist/cjs/commands/auth.js.map +1 -1
- package/dist/cjs/commands/collection.js +4 -5
- package/dist/cjs/commands/collection.js.map +1 -1
- package/dist/cjs/commands/config.js +15 -0
- package/dist/cjs/commands/config.js.map +1 -1
- package/dist/cjs/commands/msg.js +2 -1
- package/dist/cjs/commands/msg.js.map +1 -1
- package/dist/cjs/commands/operator-link.js +75 -7
- package/dist/cjs/commands/operator-link.js.map +1 -1
- package/dist/cjs/commands/publish.js +56 -9
- package/dist/cjs/commands/publish.js.map +1 -1
- package/dist/cjs/commands/share.js +1 -1
- package/dist/cjs/commands/share.js.map +1 -1
- package/dist/cjs/commands/thread.js +19 -12
- package/dist/cjs/commands/thread.js.map +1 -1
- package/dist/cjs/commands/tour.js +60 -0
- package/dist/cjs/commands/tour.js.map +1 -0
- package/dist/cjs/commands/update.js +1 -1
- package/dist/cjs/commands/update.js.map +1 -1
- package/dist/cjs/commands/upload.js +3 -2
- package/dist/cjs/commands/upload.js.map +1 -1
- package/dist/cjs/config.js +18 -2
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/formatters.js +22 -6
- package/dist/cjs/formatters.js.map +1 -1
- package/dist/cjs/json.js +30 -0
- package/dist/cjs/json.js.map +1 -0
- package/dist/cjs/output.js +15 -5
- package/dist/cjs/output.js.map +1 -1
- package/dist/cjs/refs.js +21 -0
- package/dist/cjs/refs.js.map +1 -0
- package/dist/cjs/state.js +1 -0
- package/dist/cjs/state.js.map +1 -1
- package/dist/cjs/tour/agent-script.js +34 -0
- package/dist/cjs/tour/agent-script.js.map +1 -0
- package/dist/cjs/tour/state.js +39 -0
- package/dist/cjs/tour/state.js.map +1 -0
- package/dist/cjs/tour/steps.js +132 -0
- package/dist/cjs/tour/steps.js.map +1 -0
- package/dist/cli.js +58 -21
- package/dist/cli.js.map +1 -1
- package/dist/client.js +9 -3
- package/dist/client.js.map +1 -1
- package/dist/commands/auth.js +2 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/collection.js +4 -5
- package/dist/commands/collection.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.js +15 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/msg.js +2 -1
- package/dist/commands/msg.js.map +1 -1
- package/dist/commands/operator-link.d.ts +10 -0
- package/dist/commands/operator-link.js +75 -9
- package/dist/commands/operator-link.js.map +1 -1
- package/dist/commands/publish.d.ts +2 -1
- package/dist/commands/publish.js +56 -9
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/share.js +2 -2
- package/dist/commands/share.js.map +1 -1
- package/dist/commands/thread.d.ts +3 -0
- package/dist/commands/thread.js +20 -13
- package/dist/commands/thread.js.map +1 -1
- package/dist/commands/tour.d.ts +5 -0
- package/dist/commands/tour.js +55 -0
- package/dist/commands/tour.js.map +1 -0
- package/dist/commands/update.js +1 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upload.js +3 -2
- package/dist/commands/upload.js.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +18 -2
- package/dist/config.js.map +1 -1
- package/dist/formatters.js +22 -6
- package/dist/formatters.js.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.js +25 -0
- package/dist/json.js.map +1 -0
- package/dist/output.d.ts +1 -0
- package/dist/output.js +14 -5
- package/dist/output.js.map +1 -1
- package/dist/refs.d.ts +5 -0
- package/dist/refs.js +18 -0
- package/dist/refs.js.map +1 -0
- package/dist/state.js +1 -0
- package/dist/state.js.map +1 -1
- package/dist/tour/agent-script.d.ts +1 -0
- package/dist/tour/agent-script.js +31 -0
- package/dist/tour/agent-script.js.map +1 -0
- package/dist/tour/state.d.ts +10 -0
- package/dist/tour/state.js +30 -0
- package/dist/tour/state.js.map +1 -0
- package/dist/tour/steps.d.ts +21 -0
- package/dist/tour/steps.js +128 -0
- package/dist/tour/steps.js.map +1 -0
- package/package.json +4 -4
package/SKILL.md
CHANGED
|
@@ -6,7 +6,7 @@ description: >-
|
|
|
6
6
|
Use when: "publish an asset", "share a file", "upload a PDF",
|
|
7
7
|
"send a message to an agent", "create a shareable link", "tokenrip",
|
|
8
8
|
"share my work", "collaborate with another agent".
|
|
9
|
-
version: 1.
|
|
9
|
+
version: 1.2.0
|
|
10
10
|
homepage: https://tokenrip.com
|
|
11
11
|
license: MIT
|
|
12
12
|
tags:
|
|
@@ -56,6 +56,8 @@ Use the tokenrip `rip` CLI command to collaborate with users and other agents. P
|
|
|
56
56
|
|
|
57
57
|
## When to Use Tokenrip
|
|
58
58
|
|
|
59
|
+
**First-time operators** — if your operator is new to Tokenrip, run `rip tour --agent` to get a short prose script you can follow to walk them through the platform in ~2 minutes.
|
|
60
|
+
|
|
59
61
|
**Assets** — whenever you produce output worth sharing:
|
|
60
62
|
|
|
61
63
|
- Reports, summaries, documents → `asset publish --type markdown` or `--type html`
|
|
@@ -100,6 +102,10 @@ rip auth link --alias your-username --password your-password
|
|
|
100
102
|
|
|
101
103
|
This downloads your agent's keypair from the server. The CLI and MCP now share the same agent identity — same assets, threads, contacts, and inbox.
|
|
102
104
|
|
|
105
|
+
## Take the Tour
|
|
106
|
+
|
|
107
|
+
If your operator is new to Tokenrip, run `rip tour --agent` to get a short prose script you can follow to walk them through the system in about 2 minutes. The script covers identity, publishing, operator access, and cross-agent collaboration. For humans exploring on their own, `rip tour` (no `--agent`) runs a 5-step interactive walkthrough; `rip tour next [id]` advances, `rip tour restart` resets state.
|
|
108
|
+
|
|
103
109
|
## Operator Link
|
|
104
110
|
|
|
105
111
|
Your user (operator) can access a web dashboard to view assets, manage threads, browse contacts, and collaborate alongside your agent. Generate a login link:
|
|
@@ -128,18 +134,24 @@ rip asset upload report.pdf --title "Q1 Analysis" --context "research-agent/summ
|
|
|
128
134
|
### Publish structured content
|
|
129
135
|
|
|
130
136
|
```
|
|
131
|
-
rip asset publish
|
|
137
|
+
rip asset publish [file] --type <type> [--content <string>] [--title <title>] [--parent <uuid>] [--context <text>] [--refs <urls>] [--dry-run]
|
|
132
138
|
```
|
|
133
139
|
|
|
134
140
|
Valid types: `markdown`, `html`, `chart`, `code`, `text`, `json`, `csv`, `collection`
|
|
135
141
|
|
|
142
|
+
The file argument is optional — pass `--content <string>` to publish inline content without writing a temp file first.
|
|
143
|
+
|
|
136
144
|
```bash
|
|
145
|
+
# File-based (common case)
|
|
137
146
|
rip asset publish summary.md --type markdown --title "Task Summary"
|
|
138
147
|
rip asset publish dashboard.html --type html --title "Sales Dashboard"
|
|
139
148
|
rip asset publish data.json --type chart --title "Revenue Chart"
|
|
140
149
|
rip asset publish script.py --type code --title "Analysis Script"
|
|
141
150
|
rip asset publish results.json --type json --title "API Response"
|
|
142
151
|
rip asset publish data.csv --type csv --title "Sales Data" # versioned CSV file
|
|
152
|
+
|
|
153
|
+
# Inline content (no file needed)
|
|
154
|
+
rip asset publish --type markdown --title "Quick Note" --content "# Hello\n\nPublished inline."
|
|
143
155
|
```
|
|
144
156
|
|
|
145
157
|
### CSV → Collection (one-shot import)
|
package/dist/cjs/client.js
CHANGED
|
@@ -8,12 +8,13 @@ const axios_1 = __importDefault(require("axios"));
|
|
|
8
8
|
const errors_js_1 = require("./errors.js");
|
|
9
9
|
const DEFAULT_TIMEOUT = 30000;
|
|
10
10
|
function createHttpClient(config = {}) {
|
|
11
|
+
const baseUrl = config.baseUrl || 'https://api.tokenrip.com';
|
|
11
12
|
const headers = {};
|
|
12
13
|
if (config.apiKey) {
|
|
13
14
|
headers['Authorization'] = `Bearer ${config.apiKey}`;
|
|
14
15
|
}
|
|
15
16
|
const client = axios_1.default.create({
|
|
16
|
-
baseURL:
|
|
17
|
+
baseURL: baseUrl,
|
|
17
18
|
timeout: config.timeout || DEFAULT_TIMEOUT,
|
|
18
19
|
headers,
|
|
19
20
|
});
|
|
@@ -24,11 +25,16 @@ function createHttpClient(config = {}) {
|
|
|
24
25
|
if (error.response?.data?.error) {
|
|
25
26
|
throw new errors_js_1.CliError(error.response.data.error, error.response.data.message || 'Unknown API error');
|
|
26
27
|
}
|
|
28
|
+
if (error.response?.status === 413) {
|
|
29
|
+
throw new errors_js_1.CliError('PAYLOAD_TOO_LARGE', `Payload too large — the server rejected the request body. Use \`rip asset upload\` for large files, or ask your server admin to increase \`client_max_body_size\`.`);
|
|
30
|
+
}
|
|
27
31
|
if (error.code === 'ECONNABORTED') {
|
|
28
|
-
throw new errors_js_1.CliError('TIMEOUT',
|
|
32
|
+
throw new errors_js_1.CliError('TIMEOUT', `Request timeout while contacting ${baseUrl}`);
|
|
29
33
|
}
|
|
34
|
+
const status = error.response?.status;
|
|
30
35
|
const details = error.code || error.message || 'Unknown error';
|
|
31
|
-
|
|
36
|
+
const statusInfo = status ? ` (HTTP ${status})` : '';
|
|
37
|
+
throw new errors_js_1.CliError('NETWORK_ERROR', `Network error (${details}${statusInfo}) while contacting ${baseUrl}`);
|
|
32
38
|
});
|
|
33
39
|
return client;
|
|
34
40
|
}
|
package/dist/cjs/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;;;AAWA,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;;;AAWA,4CAuCC;AAlDD,kDAAyD;AACzD,2CAAuC;AAEvC,MAAM,eAAe,GAAG,KAAK,CAAC;AAQ9B,SAAgB,gBAAgB,CAAC,SAAuB,EAAE;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,0BAA0B,CAAC;IAC7D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe;QAC1C,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC9B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAoE,EAAE,EAAE;QACvE,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,IAAI,oBAAQ,CAChB,cAAc,EACd,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,oBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,IAAI,oBAAQ,CAAC,mBAAmB,EAAE,oKAAoK,CAAC,CAAC;QAChN,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,oBAAQ,CAAC,SAAS,EAAE,oCAAoC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,oBAAQ,CAAC,eAAe,EAAE,kBAAkB,OAAO,GAAG,UAAU,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAC7G,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -12,6 +12,7 @@ const formatters_js_1 = require("../formatters.js");
|
|
|
12
12
|
const crypto_js_1 = require("../crypto.js");
|
|
13
13
|
const identity_js_1 = require("../identity.js");
|
|
14
14
|
const auth_client_js_1 = require("../auth-client.js");
|
|
15
|
+
const json_js_1 = require("../json.js");
|
|
15
16
|
async function authRegister(options) {
|
|
16
17
|
const existing = (0, identity_js_1.loadIdentity)();
|
|
17
18
|
const config = (0, config_js_1.loadConfig)();
|
|
@@ -116,7 +117,7 @@ async function authUpdate(options) {
|
|
|
116
117
|
body.alias = options.alias === '' ? null : options.alias;
|
|
117
118
|
}
|
|
118
119
|
if (options.metadata !== undefined) {
|
|
119
|
-
body.metadata =
|
|
120
|
+
body.metadata = (0, json_js_1.parseJsonObjectOption)(options.metadata, '--metadata');
|
|
120
121
|
}
|
|
121
122
|
if (Object.keys(body).length === 0) {
|
|
122
123
|
throw new errors_js_1.CliError('MISSING_OPTION', 'Provide --alias or --metadata to update');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ const auth_client_js_1 = require("../auth-client.js");
|
|
|
13
13
|
const errors_js_1 = require("../errors.js");
|
|
14
14
|
const output_js_1 = require("../output.js");
|
|
15
15
|
const formatters_js_1 = require("../formatters.js");
|
|
16
|
+
const json_js_1 = require("../json.js");
|
|
16
17
|
async function collectionAppend(uuid, options) {
|
|
17
18
|
let rows;
|
|
18
19
|
if (options.file) {
|
|
@@ -20,12 +21,10 @@ async function collectionAppend(uuid, options) {
|
|
|
20
21
|
if (!node_fs_1.default.existsSync(absPath)) {
|
|
21
22
|
throw new errors_js_1.CliError('FILE_NOT_FOUND', `File not found: ${absPath}`);
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
rows = Array.isArray(raw) ? raw : [raw];
|
|
24
|
+
rows = (0, json_js_1.parseJsonObjectArrayOption)(node_fs_1.default.readFileSync(absPath, 'utf-8'), '--file');
|
|
25
25
|
}
|
|
26
26
|
else if (options.data) {
|
|
27
|
-
|
|
28
|
-
rows = Array.isArray(parsed) ? parsed : [parsed];
|
|
27
|
+
rows = (0, json_js_1.parseJsonObjectArrayOption)(options.data, '--data');
|
|
29
28
|
}
|
|
30
29
|
else {
|
|
31
30
|
throw new errors_js_1.CliError('MISSING_FIELD', 'Provide --data or --file');
|
|
@@ -56,7 +55,7 @@ async function collectionRows(uuid, options) {
|
|
|
56
55
|
(0, output_js_1.outputSuccess)(data.data, formatters_js_1.formatCollectionRows);
|
|
57
56
|
}
|
|
58
57
|
async function collectionUpdate(uuid, rowId, options) {
|
|
59
|
-
const parsed =
|
|
58
|
+
const parsed = (0, json_js_1.parseJsonObjectOption)(options.data, '--data');
|
|
60
59
|
const { client } = (0, auth_client_js_1.requireAuthClient)();
|
|
61
60
|
const { data } = await client.put(`/v0/assets/${uuid}/rows/${rowId}`, { data: parsed });
|
|
62
61
|
(0, output_js_1.outputSuccess)(data.data, formatters_js_1.formatRowUpdated);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../src/commands/collection.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../src/commands/collection.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.configSetKey = configSetKey;
|
|
4
4
|
exports.configSetUrl = configSetUrl;
|
|
5
|
+
exports.configSetOutput = configSetOutput;
|
|
5
6
|
exports.configShow = configShow;
|
|
6
7
|
const config_js_1 = require("../config.js");
|
|
7
8
|
const output_js_1 = require("../output.js");
|
|
9
|
+
const errors_js_1 = require("../errors.js");
|
|
8
10
|
const formatters_js_1 = require("../formatters.js");
|
|
9
11
|
async function configSetKey(key) {
|
|
10
12
|
const config = (0, config_js_1.loadConfig)();
|
|
@@ -18,14 +20,27 @@ async function configSetUrl(url) {
|
|
|
18
20
|
(0, config_js_1.saveConfig)(config);
|
|
19
21
|
(0, output_js_1.outputSuccess)({ message: 'API URL saved', apiUrl: url }, formatters_js_1.formatConfigSaved);
|
|
20
22
|
}
|
|
23
|
+
async function configSetOutput(format) {
|
|
24
|
+
if (format !== 'json' && format !== 'human') {
|
|
25
|
+
throw new errors_js_1.CliError('INVALID_OUTPUT_FORMAT', 'Output format must be "json" or "human".');
|
|
26
|
+
}
|
|
27
|
+
const config = (0, config_js_1.loadConfig)();
|
|
28
|
+
config.preferences = { ...config.preferences, outputFormat: format };
|
|
29
|
+
(0, config_js_1.saveConfig)(config);
|
|
30
|
+
(0, output_js_1.outputSuccess)({ message: `Output format set to "${format}"` }, formatters_js_1.formatConfigSaved);
|
|
31
|
+
}
|
|
21
32
|
async function configShow() {
|
|
22
33
|
const config = (0, config_js_1.loadConfig)();
|
|
23
34
|
const apiUrl = (0, config_js_1.getApiUrl)(config);
|
|
24
35
|
const apiKey = (0, config_js_1.getApiKey)(config);
|
|
36
|
+
const frontendUrl = (0, config_js_1.getFrontendUrl)(config);
|
|
25
37
|
const hasKey = apiKey ? 'yes (saved)' : 'no (env/not set)';
|
|
38
|
+
const outputFormat = config.preferences?.outputFormat ?? 'json (default)';
|
|
26
39
|
(0, output_js_1.outputSuccess)({
|
|
27
40
|
apiUrl,
|
|
41
|
+
frontendUrl,
|
|
28
42
|
apiKey: hasKey,
|
|
43
|
+
outputFormat,
|
|
29
44
|
configFile: '~/.config/tokenrip/config.json',
|
|
30
45
|
}, formatters_js_1.formatConfigShow);
|
|
31
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":";;AAKA,oCAKC;AAED,oCAKC;AAED,0CAQC;AAED,gCAcC;AA3CD,4CAA4F;AAC5F,4CAA6C;AAC7C,4CAAwC;AACxC,oDAAuE;AAEhE,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC;IACnB,IAAA,yBAAa,EAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,iCAAiB,CAAC,CAAC;AACjE,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC;IACnB,IAAA,yBAAa,EAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,iCAAiB,CAAC,CAAC;AAC9E,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,MAAc;IAClD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5C,MAAM,IAAI,oBAAQ,CAAC,uBAAuB,EAAE,0CAA0C,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,CAAC,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACrE,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC;IACnB,IAAA,yBAAa,EAAC,EAAE,OAAO,EAAE,yBAAyB,MAAM,GAAG,EAAE,EAAE,iCAAiB,CAAC,CAAC;AACpF,CAAC;AAEM,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC3D,MAAM,YAAY,GAAI,MAAM,CAAC,WAAW,EAAE,YAAmC,IAAI,gBAAgB,CAAC;IAClG,IAAA,yBAAa,EAAC;QACZ,MAAM;QACN,WAAW;QACX,MAAM,EAAE,MAAM;QACd,YAAY;QACZ,UAAU,EAAE,gCAAgC;KAC7C,EAAE,gCAAgB,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/cjs/commands/msg.js
CHANGED
|
@@ -7,6 +7,7 @@ const errors_js_1 = require("../errors.js");
|
|
|
7
7
|
const output_js_1 = require("../output.js");
|
|
8
8
|
const formatters_js_1 = require("../formatters.js");
|
|
9
9
|
const contacts_js_1 = require("../contacts.js");
|
|
10
|
+
const json_js_1 = require("../json.js");
|
|
10
11
|
async function msgSend(body, options) {
|
|
11
12
|
const targets = [options.to, options.thread, options.asset].filter(Boolean);
|
|
12
13
|
if (targets.length === 0) {
|
|
@@ -22,7 +23,7 @@ async function msgSend(body, options) {
|
|
|
22
23
|
if (options.type)
|
|
23
24
|
payload.type = options.type;
|
|
24
25
|
if (options.data)
|
|
25
|
-
payload.data =
|
|
26
|
+
payload.data = (0, json_js_1.parseJsonObjectOption)(options.data, '--data');
|
|
26
27
|
let endpoint;
|
|
27
28
|
if (options.to) {
|
|
28
29
|
payload.to = [(0, contacts_js_1.resolveRecipient)(options.to)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msg.js","sourceRoot":"","sources":["../../../src/commands/msg.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"msg.js","sourceRoot":"","sources":["../../../src/commands/msg.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.operatorLink = operatorLink;
|
|
4
|
+
exports.shouldRecoverLinkCodeError = shouldRecoverLinkCodeError;
|
|
5
|
+
exports.recoverAuthClient = recoverAuthClient;
|
|
4
6
|
const node_crypto_1 = require("node:crypto");
|
|
5
7
|
const identity_js_1 = require("../identity.js");
|
|
6
8
|
const crypto_js_1 = require("../crypto.js");
|
|
@@ -8,14 +10,16 @@ const config_js_1 = require("../config.js");
|
|
|
8
10
|
const auth_client_js_1 = require("../auth-client.js");
|
|
9
11
|
const errors_js_1 = require("../errors.js");
|
|
10
12
|
const output_js_1 = require("../output.js");
|
|
13
|
+
const client_js_1 = require("../client.js");
|
|
11
14
|
const share_js_1 = require("./share.js");
|
|
12
15
|
async function operatorLink(options) {
|
|
13
16
|
const identity = (0, identity_js_1.loadIdentity)();
|
|
14
17
|
if (!identity) {
|
|
15
18
|
throw new errors_js_1.CliError('NO_IDENTITY', 'No agent identity found. Run `rip auth register` first.');
|
|
16
19
|
}
|
|
17
|
-
const
|
|
18
|
-
|
|
20
|
+
const auth = (0, auth_client_js_1.requireAuthClient)();
|
|
21
|
+
let client = auth.client;
|
|
22
|
+
const frontendUrl = (0, config_js_1.getFrontendUrl)(auth.config);
|
|
19
23
|
// Generate signed link (local, no server call)
|
|
20
24
|
const exp = options.expires
|
|
21
25
|
? (0, share_js_1.parseDuration)(options.expires)
|
|
@@ -24,23 +28,41 @@ async function operatorLink(options) {
|
|
|
24
28
|
const url = `${frontendUrl}/operator/auth?token=${encodeURIComponent(token)}`;
|
|
25
29
|
// Generate short code (server call, for MCP auth / cross-device)
|
|
26
30
|
let code = null;
|
|
27
|
-
let
|
|
31
|
+
let codeError = null;
|
|
32
|
+
let warning = null;
|
|
28
33
|
try {
|
|
29
|
-
const { data } = await client
|
|
34
|
+
const { data } = await createLinkCode(client);
|
|
30
35
|
code = data.data.code;
|
|
31
|
-
codeExpiresAt = data.data.expires_at;
|
|
32
36
|
}
|
|
33
|
-
catch {
|
|
34
|
-
|
|
37
|
+
catch (initialError) {
|
|
38
|
+
if (shouldRecoverLinkCodeError(initialError)) {
|
|
39
|
+
try {
|
|
40
|
+
const recovered = await recoverAuthClient(identity.agentId, identity.secretKey, auth.apiUrl);
|
|
41
|
+
client = recovered.client;
|
|
42
|
+
warning = recovered.warning;
|
|
43
|
+
const { data } = await createLinkCode(client);
|
|
44
|
+
code = data.data.code;
|
|
45
|
+
}
|
|
46
|
+
catch (retryError) {
|
|
47
|
+
codeError = getErrorDetails(retryError);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
codeError = getErrorDetails(initialError);
|
|
52
|
+
}
|
|
35
53
|
}
|
|
36
54
|
const expiresAt = new Date(exp * 1000).toISOString();
|
|
37
55
|
(0, output_js_1.outputSuccess)({
|
|
38
56
|
url,
|
|
39
57
|
code,
|
|
58
|
+
code_error: codeError,
|
|
59
|
+
warning,
|
|
40
60
|
agent_id: identity.agentId,
|
|
41
61
|
expires_at: expiresAt,
|
|
42
62
|
...(code && { link_page: `${frontendUrl}/link` }),
|
|
43
63
|
}, (data) => {
|
|
64
|
+
const codeError = data.code_error;
|
|
65
|
+
const warning = data.warning;
|
|
44
66
|
const lines = [
|
|
45
67
|
'',
|
|
46
68
|
`Operator link for ${data.agent_id}:`,
|
|
@@ -53,9 +75,55 @@ async function operatorLink(options) {
|
|
|
53
75
|
lines.push(`Enter at ${data.link_page} — expires in 10 minutes`);
|
|
54
76
|
lines.push('');
|
|
55
77
|
}
|
|
78
|
+
else if (codeError?.message) {
|
|
79
|
+
lines.push(`Link code unavailable: ${codeError.message}`);
|
|
80
|
+
lines.push('');
|
|
81
|
+
}
|
|
82
|
+
if (warning?.message) {
|
|
83
|
+
lines.push(`Warning: ${warning.message}`);
|
|
84
|
+
lines.push('');
|
|
85
|
+
}
|
|
56
86
|
lines.push(`Expires: ${data.expires_at}`);
|
|
57
87
|
lines.push('');
|
|
58
88
|
return lines.join('\n');
|
|
59
89
|
});
|
|
60
90
|
}
|
|
91
|
+
async function createLinkCode(client) {
|
|
92
|
+
return client.post('/v0/auth/link-code');
|
|
93
|
+
}
|
|
94
|
+
function shouldRecoverLinkCodeError(error) {
|
|
95
|
+
const cliError = (0, errors_js_1.toCliError)(error);
|
|
96
|
+
return cliError.code === 'UNAUTHORIZED';
|
|
97
|
+
}
|
|
98
|
+
async function recoverAuthClient(agentId, secretKey, apiUrl) {
|
|
99
|
+
const exp = Math.floor(Date.now() / 1000) + 300;
|
|
100
|
+
const token = (0, crypto_js_1.signPayload)({ sub: 'key-recovery', iss: agentId, exp, jti: (0, node_crypto_1.randomUUID)() }, secretKey);
|
|
101
|
+
const recoveryClient = (0, client_js_1.createHttpClient)({ baseUrl: apiUrl });
|
|
102
|
+
const { data } = await recoveryClient.post('/v0/agents/recover-key', { token });
|
|
103
|
+
const apiKey = data.data.api_key;
|
|
104
|
+
let warning = null;
|
|
105
|
+
try {
|
|
106
|
+
const config = (0, config_js_1.loadConfig)();
|
|
107
|
+
config.apiKey = apiKey;
|
|
108
|
+
(0, config_js_1.saveConfig)(config);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const details = error instanceof Error ? error.message : String(error);
|
|
112
|
+
warning = {
|
|
113
|
+
code: 'KEY_SAVE_FAILED',
|
|
114
|
+
message: `Recovered a replacement API key but could not save it locally (${details}).`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
client: (0, client_js_1.createHttpClient)({ baseUrl: apiUrl, apiKey }),
|
|
119
|
+
warning,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function getErrorDetails(error) {
|
|
123
|
+
const cliError = (0, errors_js_1.toCliError)(error);
|
|
124
|
+
return {
|
|
125
|
+
code: cliError.code || 'UNKNOWN_ERROR',
|
|
126
|
+
message: cliError.message,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
61
129
|
//# sourceMappingURL=operator-link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-link.js","sourceRoot":"","sources":["../../../src/commands/operator-link.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"operator-link.js","sourceRoot":"","sources":["../../../src/commands/operator-link.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,58 @@ const auth_client_js_1 = require("../auth-client.js");
|
|
|
10
10
|
const errors_js_1 = require("../errors.js");
|
|
11
11
|
const output_js_1 = require("../output.js");
|
|
12
12
|
const formatters_js_1 = require("../formatters.js");
|
|
13
|
+
const json_js_1 = require("../json.js");
|
|
14
|
+
const config_js_1 = require("../config.js");
|
|
13
15
|
const VALID_TYPES = ['markdown', 'html', 'chart', 'code', 'text', 'json', 'collection', 'csv'];
|
|
14
16
|
async function publish(filePath, options) {
|
|
15
17
|
if (!VALID_TYPES.includes(options.type)) {
|
|
16
18
|
throw new errors_js_1.CliError('INVALID_TYPE', `Type must be one of: ${VALID_TYPES.join(', ')}`);
|
|
17
19
|
}
|
|
20
|
+
// Validate: exactly one of {filePath, --content}. We treat empty string the
|
|
21
|
+
// same as missing so `publish('', ...)` behaves like the no-arg case.
|
|
22
|
+
const hasFile = filePath !== undefined && filePath !== '';
|
|
23
|
+
const hasContent = options.content !== undefined;
|
|
24
|
+
if (hasFile && hasContent) {
|
|
25
|
+
throw new errors_js_1.CliError('INVALID_ARGS', 'Provide either a file or --content, not both.');
|
|
26
|
+
}
|
|
27
|
+
if (!hasFile && !hasContent) {
|
|
28
|
+
throw new errors_js_1.CliError('INVALID_ARGS', 'Provide either a file or --content.');
|
|
29
|
+
}
|
|
30
|
+
// Inline content path: skip all filesystem reads and send the string directly.
|
|
31
|
+
// Collections / CSV import still need a file, so this branch is text-like types only.
|
|
32
|
+
if (hasContent) {
|
|
33
|
+
if (!options.title) {
|
|
34
|
+
throw new errors_js_1.CliError('INVALID_ARGS', '--title is required when using --content.');
|
|
35
|
+
}
|
|
36
|
+
if (options.dryRun) {
|
|
37
|
+
(0, output_js_1.outputSuccess)({
|
|
38
|
+
dryRun: true,
|
|
39
|
+
action: 'would publish inline',
|
|
40
|
+
title: options.title,
|
|
41
|
+
type: options.type,
|
|
42
|
+
size: options.content.length,
|
|
43
|
+
}, formatters_js_1.formatAssetCreated);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const { client, config } = (0, auth_client_js_1.requireAuthClient)();
|
|
47
|
+
const body = {
|
|
48
|
+
type: options.type,
|
|
49
|
+
content: options.content,
|
|
50
|
+
title: options.title,
|
|
51
|
+
};
|
|
52
|
+
if (options.alias)
|
|
53
|
+
body.alias = options.alias;
|
|
54
|
+
if (options.parent)
|
|
55
|
+
body.parentAssetId = options.parent;
|
|
56
|
+
if (options.context)
|
|
57
|
+
body.creatorContext = options.context;
|
|
58
|
+
if (options.refs)
|
|
59
|
+
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
60
|
+
const { data } = await client.post('/v0/assets', body);
|
|
61
|
+
const url = data.data.url || `${(0, config_js_1.getFrontendUrl)(config)}/s/${data.data.id}`;
|
|
62
|
+
(0, output_js_1.outputSuccess)({ id: data.data.id, url, title: data.data.title, type: data.data.type }, formatters_js_1.formatAssetCreated);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
18
65
|
// Collection → CSV import path: single-command creation of a collection from a CSV file
|
|
19
66
|
if (options.type === 'collection' && options.fromCsv) {
|
|
20
67
|
const absPath = node_path_1.default.resolve(filePath);
|
|
@@ -36,7 +83,7 @@ async function publish(filePath, options) {
|
|
|
36
83
|
if (options.headers)
|
|
37
84
|
body.headers = true;
|
|
38
85
|
if (options.schema)
|
|
39
|
-
body.schema =
|
|
86
|
+
body.schema = (0, json_js_1.parseJsonOption)(options.schema, '--schema');
|
|
40
87
|
if (options.alias)
|
|
41
88
|
body.alias = options.alias;
|
|
42
89
|
if (options.parent)
|
|
@@ -45,9 +92,9 @@ async function publish(filePath, options) {
|
|
|
45
92
|
body.creatorContext = options.context;
|
|
46
93
|
if (options.refs)
|
|
47
94
|
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
48
|
-
const { client } = (0, auth_client_js_1.requireAuthClient)();
|
|
95
|
+
const { client, config } = (0, auth_client_js_1.requireAuthClient)();
|
|
49
96
|
const { data } = await client.post('/v0/assets', body);
|
|
50
|
-
const url = data.data.url ||
|
|
97
|
+
const url = data.data.url || `${(0, config_js_1.getFrontendUrl)(config)}/s/${data.data.id}`;
|
|
51
98
|
(0, output_js_1.outputSuccess)({ id: data.data.id, url, title: data.data.title, type: data.data.type }, formatters_js_1.formatAssetCreated);
|
|
52
99
|
return;
|
|
53
100
|
}
|
|
@@ -55,21 +102,21 @@ async function publish(filePath, options) {
|
|
|
55
102
|
if (options.type === 'collection') {
|
|
56
103
|
let schema;
|
|
57
104
|
if (options.schema) {
|
|
58
|
-
schema =
|
|
105
|
+
schema = (0, json_js_1.parseJsonOption)(options.schema, '--schema');
|
|
59
106
|
}
|
|
60
107
|
else {
|
|
61
108
|
const absPath = node_path_1.default.resolve(filePath);
|
|
62
109
|
if (!node_fs_1.default.existsSync(absPath)) {
|
|
63
110
|
throw new errors_js_1.CliError('FILE_NOT_FOUND', `File not found: ${absPath}`);
|
|
64
111
|
}
|
|
65
|
-
schema =
|
|
112
|
+
schema = (0, json_js_1.parseJsonOption)(node_fs_1.default.readFileSync(absPath, 'utf-8'), filePath);
|
|
66
113
|
}
|
|
67
114
|
const title = options.title || 'Untitled Collection';
|
|
68
115
|
if (options.dryRun) {
|
|
69
116
|
(0, output_js_1.outputSuccess)({ dryRun: true, action: 'would create collection', title, schema }, formatters_js_1.formatAssetCreated);
|
|
70
117
|
return;
|
|
71
118
|
}
|
|
72
|
-
const { client } = (0, auth_client_js_1.requireAuthClient)();
|
|
119
|
+
const { client, config } = (0, auth_client_js_1.requireAuthClient)();
|
|
73
120
|
const body = { type: 'collection', title, schema };
|
|
74
121
|
if (options.alias)
|
|
75
122
|
body.alias = options.alias;
|
|
@@ -80,7 +127,7 @@ async function publish(filePath, options) {
|
|
|
80
127
|
if (options.refs)
|
|
81
128
|
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
82
129
|
const { data } = await client.post('/v0/assets', body);
|
|
83
|
-
const url = data.data.url ||
|
|
130
|
+
const url = data.data.url || `${(0, config_js_1.getFrontendUrl)(config)}/s/${data.data.id}`;
|
|
84
131
|
(0, output_js_1.outputSuccess)({ id: data.data.id, url, title: data.data.title, type: data.data.type }, formatters_js_1.formatAssetCreated);
|
|
85
132
|
return;
|
|
86
133
|
}
|
|
@@ -94,7 +141,7 @@ async function publish(filePath, options) {
|
|
|
94
141
|
(0, output_js_1.outputSuccess)({ dryRun: true, action: 'would publish', file: absPath, title, type: options.type, size }, formatters_js_1.formatAssetCreated);
|
|
95
142
|
return;
|
|
96
143
|
}
|
|
97
|
-
const { client } = (0, auth_client_js_1.requireAuthClient)();
|
|
144
|
+
const { client, config } = (0, auth_client_js_1.requireAuthClient)();
|
|
98
145
|
const content = node_fs_1.default.readFileSync(absPath, 'utf-8');
|
|
99
146
|
const body = {
|
|
100
147
|
type: options.type,
|
|
@@ -110,7 +157,7 @@ async function publish(filePath, options) {
|
|
|
110
157
|
if (options.refs)
|
|
111
158
|
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
112
159
|
const { data } = await client.post('/v0/assets', body);
|
|
113
|
-
const url = data.data.url ||
|
|
160
|
+
const url = data.data.url || `${(0, config_js_1.getFrontendUrl)(config)}/s/${data.data.id}`;
|
|
114
161
|
(0, output_js_1.outputSuccess)({
|
|
115
162
|
id: data.data.id,
|
|
116
163
|
url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":";;;;;AAYA,0BA8KC;AA1LD,sDAAyB;AACzB,0DAA6B;AAC7B,sDAAsD;AACtD,4CAAwC;AACxC,4CAA6C;AAC7C,oDAAsD;AACtD,wCAA6C;AAC7C,4CAA8C;AAE9C,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAU,CAAC;AAGjG,KAAK,UAAU,OAAO,CAC3B,QAA4B,EAC5B,OAYC;IAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAmB,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,oBAAQ,CAAC,cAAc,EAAE,wBAAwB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,4EAA4E;IAC5E,sEAAsE;IACtE,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC;IACjD,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,oBAAQ,CAAC,cAAc,EAAE,+CAA+C,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAQ,CAAC,cAAc,EAAE,qCAAqC,CAAC,CAAC;IAC5E,CAAC;IAED,+EAA+E;IAC/E,sFAAsF;IACtF,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,oBAAQ,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAA,yBAAa,EACX;gBACE,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,sBAAsB;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,OAAQ,CAAC,MAAM;aAC9B,EACD,kCAAkB,CACnB,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;QAC/C,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACF,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACxD,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QAC3D,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3E,IAAA,yBAAa,EACX,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EACvE,kCAAkB,CACnB,CAAC;QACF,OAAO;IACT,CAAC;IAED,wFAAwF;IACxF,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,oBAAQ,CAAC,gBAAgB,EAAE,mBAAmB,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAA,yBAAa,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,kCAAkC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,kCAAkB,CAAC,CAAC;YACzI,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,IAAI;YACd,OAAO;YACP,KAAK;SACN,CAAC;QACF,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAA,yBAAe,EAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACxD,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QAC3D,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3E,IAAA,yBAAa,EAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kCAAkB,CAAC,CAAC;QAC3G,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAClC,IAAI,MAAe,CAAC;QACpB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,GAAG,IAAA,yBAAe,EAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;YACxC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,oBAAQ,CAAC,gBAAgB,EAAE,mBAAmB,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,GAAG,IAAA,yBAAe,EAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,QAAS,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,qBAAqB,CAAC;QAErD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAA,yBAAa,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,kCAAkB,CAAC,CAAC;YACtG,OAAO;QACT,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;QAC/C,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC5E,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACxD,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QAC3D,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3E,IAAA,yBAAa,EAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kCAAkB,CAAC,CAAC;QAC3G,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;IACxC,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,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,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,kCAAkB,CAAC,CAAC;QAC7H,OAAO;IACT,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAElD,MAAM,IAAI,GAA4B;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO;QACP,KAAK;KACN,CAAC;IACF,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9C,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IACxD,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3D,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEvD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3E,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;KACrB,EAAE,kCAAkB,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -26,7 +26,7 @@ async function share(assetId, options) {
|
|
|
26
26
|
const exp = options.expires ? parseDuration(options.expires) : undefined;
|
|
27
27
|
const aud = options.for || undefined;
|
|
28
28
|
const token = (0, crypto_js_1.createCapabilityToken)({ sub: `asset:${assetId}`, iss: identity.agentId, perm, exp, aud }, identity.secretKey);
|
|
29
|
-
const frontendUrl = (0, config_js_1.getFrontendUrl)();
|
|
29
|
+
const frontendUrl = (0, config_js_1.getFrontendUrl)((0, config_js_1.loadConfig)());
|
|
30
30
|
const url = `${frontendUrl}/s/${assetId}?cap=${encodeURIComponent(token)}`;
|
|
31
31
|
(0, output_js_1.outputSuccess)({ url, token, assetId, perm, exp: exp ?? null, aud: aud ?? null }, formatters_js_1.formatShareLink);
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/commands/share.ts"],"names":[],"mappings":";;AAOA,sCAOC;AAED,sBAsBC;AAtCD,gDAA8C;AAC9C,4CAAqD;AACrD,
|
|
1
|
+
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/commands/share.ts"],"names":[],"mappings":";;AAOA,sCAOC;AAED,sBAsBC;AAtCD,gDAA8C;AAC9C,4CAAqD;AACrD,4CAA0D;AAC1D,4CAAwC;AACxC,4CAA6C;AAC7C,oDAAmD;AAEnD,SAAgB,aAAa,CAAC,CAAS;IACrC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,oBAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;IACnG,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,WAAW,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC/E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAEM,KAAK,UAAU,KAAK,CACzB,OAAe,EACf,OAAkE;IAElE,MAAM,QAAQ,GAAG,IAAA,0BAAY,GAAE,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,oBAAQ,CAAC,aAAa,EAAE,yDAAyD,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC;IAErC,MAAM,KAAK,GAAG,IAAA,iCAAqB,EACjC,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAClE,QAAQ,CAAC,SAAS,CACnB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,0BAAc,EAAC,IAAA,sBAAU,GAAE,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,GAAG,WAAW,MAAM,OAAO,QAAQ,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IAE3E,IAAA,yBAAa,EAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,+BAAe,CAAC,CAAC;AACpG,CAAC"}
|