@fnndsc/brasa 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/buildinfo.json +1 -0
- package/dist/builtins/argumentTokens.d.ts +18 -0
- package/dist/builtins/argumentTokens.js +58 -0
- package/dist/builtins/argumentTokens.js.map +1 -0
- package/dist/builtins/executable.d.ts +3 -7
- package/dist/builtins/executable.js +32 -29
- package/dist/builtins/executable.js.map +1 -1
- package/dist/builtins/feedCreation.d.ts +23 -0
- package/dist/builtins/feedCreation.js +45 -0
- package/dist/builtins/feedCreation.js.map +1 -0
- package/dist/builtins/fs/cat.args.d.ts +36 -0
- package/dist/builtins/fs/cat.args.js +63 -0
- package/dist/builtins/fs/cat.args.js.map +1 -0
- package/dist/builtins/fs/cat.d.ts +2 -2
- package/dist/builtins/fs/cat.js +222 -101
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cd.js +41 -5
- package/dist/builtins/fs/cd.js.map +1 -1
- package/dist/builtins/fs/cp.js +3 -2
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/download.d.ts +1 -1
- package/dist/builtins/fs/download.js +52 -13
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/du.js +15 -1
- package/dist/builtins/fs/du.js.map +1 -1
- package/dist/builtins/fs/ls.js +10 -1
- package/dist/builtins/fs/ls.js.map +1 -1
- package/dist/builtins/fs/mv.js +7 -3
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/pull.args.d.ts +14 -1
- package/dist/builtins/fs/pull.args.js +72 -9
- package/dist/builtins/fs/pull.args.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +1 -0
- package/dist/builtins/fs/pull.js +191 -259
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/rm.js +4 -0
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/tree.js +7 -3
- package/dist/builtins/fs/tree.js.map +1 -1
- package/dist/builtins/fs/upload.js +29 -2
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/help.d.ts +7 -0
- package/dist/builtins/help.js +144 -36
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/index.d.ts +1 -0
- package/dist/builtins/index.js +1 -0
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/net/pacs.d.ts +1 -0
- package/dist/builtins/net/pacs.js +5 -1
- package/dist/builtins/net/pacs.js.map +1 -1
- package/dist/builtins/net/pacsUtils.d.ts +5 -4
- package/dist/builtins/net/pacsUtils.js +12 -32
- package/dist/builtins/net/pacsUtils.js.map +1 -1
- package/dist/builtins/net/query.js +4 -1
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/status.d.ts +14 -0
- package/dist/builtins/net/status.js +210 -0
- package/dist/builtins/net/status.js.map +1 -0
- package/dist/builtins/pluginExecute.d.ts +3 -2
- package/dist/builtins/pluginExecute.js +41 -70
- package/dist/builtins/pluginExecute.js.map +1 -1
- package/dist/builtins/pluginSelector.d.ts +15 -0
- package/dist/builtins/pluginSelector.js +21 -0
- package/dist/builtins/pluginSelector.js.map +1 -0
- package/dist/builtins/proc.js +106 -4
- package/dist/builtins/proc.js.map +1 -1
- package/dist/builtins/res/compute.js +8 -3
- package/dist/builtins/res/compute.js.map +1 -1
- package/dist/builtins/res/group.d.ts +1 -1
- package/dist/builtins/res/group.js +122 -5
- package/dist/builtins/res/group.js.map +1 -1
- package/dist/builtins/res/pipeline.args.d.ts +4 -0
- package/dist/builtins/res/pipeline.args.js +63 -12
- package/dist/builtins/res/pipeline.args.js.map +1 -1
- package/dist/builtins/res/pipeline.d.ts +3 -1
- package/dist/builtins/res/pipeline.js +155 -60
- package/dist/builtins/res/pipeline.js.map +1 -1
- package/dist/builtins/res/pipeline.manifest.d.ts +15 -0
- package/dist/builtins/res/pipeline.manifest.js +93 -0
- package/dist/builtins/res/pipeline.manifest.js.map +1 -0
- package/dist/builtins/res/plugin.js +14 -7
- package/dist/builtins/res/plugin.js.map +1 -1
- package/dist/builtins/res/user.d.ts +8 -0
- package/dist/builtins/res/user.js +87 -0
- package/dist/builtins/res/user.js.map +1 -0
- package/dist/builtins/store.js +24 -3
- package/dist/builtins/store.js.map +1 -1
- package/dist/builtins/sys/fortune.d.ts +9 -0
- package/dist/builtins/sys/fortune.js +16 -1
- package/dist/builtins/sys/fortune.js.map +1 -1
- package/dist/builtins/sys/whoami.d.ts +13 -1
- package/dist/builtins/sys/whoami.js +47 -2
- package/dist/builtins/sys/whoami.js.map +1 -1
- package/dist/builtins/utils.d.ts +14 -1
- package/dist/builtins/utils.js +13 -3
- package/dist/builtins/utils.js.map +1 -1
- package/dist/builtins/wildcard.d.ts +31 -0
- package/dist/builtins/wildcard.js +112 -50
- package/dist/builtins/wildcard.js.map +1 -1
- package/dist/command-keys.js +2 -1
- package/dist/command-keys.js.map +1 -1
- package/dist/core/cancellation.d.ts +28 -0
- package/dist/core/cancellation.js +70 -0
- package/dist/core/cancellation.js.map +1 -0
- package/dist/core/dispatch.d.ts +1 -8
- package/dist/core/dispatch.js +82 -82
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/elevation.d.ts +35 -0
- package/dist/core/elevation.js +77 -0
- package/dist/core/elevation.js.map +1 -0
- package/dist/core/engine.d.ts +12 -0
- package/dist/core/engine.js +35 -8
- package/dist/core/engine.js.map +1 -1
- package/dist/core/preprocess.d.ts +11 -4
- package/dist/core/preprocess.js +43 -10
- package/dist/core/preprocess.js.map +1 -1
- package/dist/core/progress.d.ts +15 -5
- package/dist/core/progress.js +14 -0
- package/dist/core/progress.js.map +1 -1
- package/dist/core/promptContext.d.ts +3 -5
- package/dist/core/promptContext.js +9 -2
- package/dist/core/promptContext.js.map +1 -1
- package/dist/core/sink.d.ts +9 -0
- package/dist/core/sink.js +23 -3
- package/dist/core/sink.js.map +1 -1
- package/dist/core/surface.d.ts +14 -0
- package/dist/core/surface.js +5 -0
- package/dist/core/surface.js.map +1 -1
- package/dist/core/version.d.ts +34 -0
- package/dist/core/version.js +51 -0
- package/dist/core/version.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/completer/index.js +39 -1
- package/dist/lib/completer/index.js.map +1 -1
- package/dist/lib/parser.d.ts +75 -2
- package/dist/lib/parser.js +158 -15
- package/dist/lib/parser.js.map +1 -1
- package/dist/lib/vfs/providers/binEntry.d.ts +20 -0
- package/dist/lib/vfs/providers/binEntry.js +47 -0
- package/dist/lib/vfs/providers/binEntry.js.map +1 -0
- package/dist/lib/vfs/providers/static.js +1 -0
- package/dist/lib/vfs/providers/static.js.map +1 -1
- package/dist/lib/vfs/providers/static_content.js +5 -36
- package/dist/lib/vfs/providers/static_content.js.map +1 -1
- package/dist/lib/vfs/vfs.d.ts +7 -0
- package/dist/lib/vfs/vfs.js +25 -0
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/session/index.d.ts +18 -0
- package/dist/session/index.js +29 -1
- package/dist/session/index.js.map +1 -1
- package/package.json +10 -5
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file CUBE-local account administration builtin.
|
|
3
|
+
*
|
|
4
|
+
* This is a targeted control-plane command rather than a ChRIS Resource
|
|
5
|
+
* Command: federated identities remain outside its authority.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { errorStack, envelope_error, envelope_ok } from '@fnndsc/cumin';
|
|
11
|
+
import { table_render } from '@fnndsc/chili/screen/screen.js';
|
|
12
|
+
import { localAccount_action, localAccount_adminAccessEnsure, localAccount_create, localAccount_find, } from '@fnndsc/chili/commands/users/local.js';
|
|
13
|
+
import { surface_get } from '../../core/surface.js';
|
|
14
|
+
import { authorizationFailure_is, sudoHint_build } from '../../core/elevation.js';
|
|
15
|
+
/**
|
|
16
|
+
* Renders a local-account command error and records a failing process status.
|
|
17
|
+
*
|
|
18
|
+
* @param message - User-facing error text.
|
|
19
|
+
* @returns Error envelope for the active command surface.
|
|
20
|
+
*/
|
|
21
|
+
function user_error(message) {
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return envelope_error('', undefined, `${chalk.red(message)}\n`);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Renders an account-operation failure, including elevation guidance when apt.
|
|
27
|
+
*
|
|
28
|
+
* @param verb - Failed local-account operation.
|
|
29
|
+
* @param username - Target local username.
|
|
30
|
+
* @returns Error envelope for the active command surface.
|
|
31
|
+
*/
|
|
32
|
+
function user_operationError(verb, username) {
|
|
33
|
+
const detail = errorStack.stack_pop()?.message ?? `user ${verb} failed.`;
|
|
34
|
+
const hint = authorizationFailure_is(detail) ? sudoHint_build(`user ${verb}`, [username]) : '';
|
|
35
|
+
return user_error(`${detail}\n${hint}`);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Renders one local account as a stable, operator-oriented table.
|
|
39
|
+
*
|
|
40
|
+
* @param account - Local account returned by CUBE.
|
|
41
|
+
* @returns Success envelope containing the rendered account.
|
|
42
|
+
*/
|
|
43
|
+
function user_render(account) {
|
|
44
|
+
return envelope_ok(table_render([{ ...account }], ['id', 'username', 'email', 'is_active', 'disabled_at', 'removed_at']));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Handles targeted local-account lifecycle commands.
|
|
48
|
+
*
|
|
49
|
+
* @param args - Parsed command arguments beginning with an account operation.
|
|
50
|
+
* @returns Envelope containing a local-account result or operation error.
|
|
51
|
+
*/
|
|
52
|
+
export async function builtin_user(args) {
|
|
53
|
+
const [verb, username] = args;
|
|
54
|
+
if (verb === 'add' || verb === 'inspect' || verb === 'disable' || verb === 'enable' || verb === 'remove') {
|
|
55
|
+
if (!username)
|
|
56
|
+
return user_error(`Usage: user ${verb} <username>`);
|
|
57
|
+
const access = await localAccount_adminAccessEnsure();
|
|
58
|
+
if (!access.ok)
|
|
59
|
+
return user_operationError(verb, username);
|
|
60
|
+
}
|
|
61
|
+
if (verb === 'add') {
|
|
62
|
+
const surface = surface_get();
|
|
63
|
+
if (!surface.capabilities.hiddenInput)
|
|
64
|
+
return user_error('user add: this surface cannot securely collect a password.');
|
|
65
|
+
const email = await surface.prompt({ message: 'Email address: ' });
|
|
66
|
+
const password = await surface.prompt({ message: 'New password: ', hidden: true });
|
|
67
|
+
const confirmation = await surface.prompt({ message: 'Retype new password: ', hidden: true });
|
|
68
|
+
if (password !== confirmation)
|
|
69
|
+
return user_error('user add: passwords do not match.');
|
|
70
|
+
const result = await localAccount_create(username, email, password);
|
|
71
|
+
return result.ok ? user_render(result.value) : user_operationError('add', username);
|
|
72
|
+
}
|
|
73
|
+
if (verb === 'inspect') {
|
|
74
|
+
const result = await localAccount_find(username);
|
|
75
|
+
return result.ok ? user_render(result.value) : user_error(errorStack.stack_pop()?.message ?? `No CUBE-local account named '${username}'.`);
|
|
76
|
+
}
|
|
77
|
+
if (verb === 'disable' || verb === 'enable' || verb === 'remove') {
|
|
78
|
+
const found = await localAccount_find(username);
|
|
79
|
+
if (!found.ok)
|
|
80
|
+
return user_error(errorStack.stack_pop()?.message ?? `No CUBE-local account named '${username}'.`);
|
|
81
|
+
const action = verb;
|
|
82
|
+
const result = await localAccount_action(found.value.id, action);
|
|
83
|
+
return result.ok ? user_render(result.value) : user_operationError(verb, username);
|
|
84
|
+
}
|
|
85
|
+
return user_error('Usage: user <add|inspect|disable|enable|remove> ...');
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/builtins/res/user.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,GAGlB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAElF;;;;;GAKG;AACH,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAE,QAAgB;IACzD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,CAAC;IACzE,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/F,OAAO,UAAU,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,OAAqB;IACxC,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5H,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC9B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzG,IAAI,CAAC,QAAQ;YAAE,OAAO,UAAU,CAAC,eAAe,IAAI,aAAa,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,8BAA8B,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW;YAAE,OAAO,UAAU,CAAC,4DAA4D,CAAC,CAAC;QACvH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,IAAI,QAAQ,KAAK,YAAY;YAAE,OAAO,UAAU,CAAC,mCAAmC,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,OAAO,IAAI,gCAAgC,QAAQ,IAAI,CAAC,CAAC;IAC7I,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,OAAO,IAAI,gCAAgC,QAAQ,IAAI,CAAC,CAAC;QAClH,MAAM,MAAM,GAAuB,IAAI,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,UAAU,CAAC,qDAAqD,CAAC,CAAC;AAC3E,CAAC"}
|
package/dist/builtins/store.js
CHANGED
|
@@ -8,8 +8,21 @@ import { store_listPlugins, store_searchPlugins } from '@fnndsc/chili/commands/s
|
|
|
8
8
|
import { grid_render, long_render } from '@fnndsc/chili/views/ls.js';
|
|
9
9
|
import { spinner } from '../lib/spinner.js';
|
|
10
10
|
import { plugin_addInteractive } from './res/plugin.js';
|
|
11
|
-
import { envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
11
|
+
import { envelope_ok, envelope_error, errorStack } from '@fnndsc/cumin';
|
|
12
12
|
import { DEFAULT_STORE_URL, storeUrl_get, storeUrl_isDefault, storeUrl_set, storeUrl_clear, storeConfig_persist, } from '../config/storeConfig.js';
|
|
13
|
+
/**
|
|
14
|
+
* Renders a store fetch failure as an error envelope, draining the reason the
|
|
15
|
+
* fetch pushed onto the error stack.
|
|
16
|
+
*
|
|
17
|
+
* @param fallback - Message used when the stack holds no detail.
|
|
18
|
+
* @returns An error envelope with the failure on the err channel.
|
|
19
|
+
*/
|
|
20
|
+
function storeFailure_envelope(fallback) {
|
|
21
|
+
const lastError = errorStack.stack_pop();
|
|
22
|
+
const detail = lastError ? lastError.message : fallback;
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
return envelope_error('', undefined, `${chalk.red(detail)}\n`);
|
|
25
|
+
}
|
|
13
26
|
/**
|
|
14
27
|
* Handles store commands.
|
|
15
28
|
*
|
|
@@ -28,8 +41,12 @@ export async function builtin_store(args) {
|
|
|
28
41
|
try {
|
|
29
42
|
spinner.start('Fetching from store...');
|
|
30
43
|
if (subcommand === 'list') {
|
|
31
|
-
const
|
|
44
|
+
const listResult = await store_listPlugins(storeOptions);
|
|
32
45
|
spinner.stop();
|
|
46
|
+
if (!listResult.ok) {
|
|
47
|
+
return storeFailure_envelope('store list failed');
|
|
48
|
+
}
|
|
49
|
+
const items = listResult.value;
|
|
33
50
|
if (items.length === 0) {
|
|
34
51
|
return envelope_ok('No plugins found in store.\n');
|
|
35
52
|
}
|
|
@@ -42,8 +59,12 @@ export async function builtin_store(args) {
|
|
|
42
59
|
spinner.stop();
|
|
43
60
|
return envelope_ok(`${chalk.red("Usage: store search <query>")}\n`);
|
|
44
61
|
}
|
|
45
|
-
const
|
|
62
|
+
const searchResult = await store_searchPlugins(query, storeOptions);
|
|
46
63
|
spinner.stop();
|
|
64
|
+
if (!searchResult.ok) {
|
|
65
|
+
return storeFailure_envelope(`store search failed for '${query}'`);
|
|
66
|
+
}
|
|
67
|
+
const items = searchResult.value;
|
|
47
68
|
if (items.length === 0) {
|
|
48
69
|
return envelope_ok(`No plugins found matching '${query}'.\n`);
|
|
49
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/builtins/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAc,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAwB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/builtins/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
11
|
import { CommandEnvelope } from '@fnndsc/cumin';
|
|
12
|
+
/**
|
|
13
|
+
* Picks a random fortune from the bundled collection.
|
|
14
|
+
*
|
|
15
|
+
* @param maxLines - Optional upper bound on the fortune's line count, so a
|
|
16
|
+
* boot banner can favour short cookies. When the bound filters everything
|
|
17
|
+
* out, the full collection is used rather than returning nothing.
|
|
18
|
+
* @returns The chosen fortune text (no trailing newline).
|
|
19
|
+
*/
|
|
20
|
+
export declare function fortune_random(maxLines?: number): string;
|
|
12
21
|
/**
|
|
13
22
|
* Reports a random fortune as a command envelope.
|
|
14
23
|
*
|
|
@@ -10,6 +10,21 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { envelope_ok } from '@fnndsc/cumin';
|
|
12
12
|
import { FORTUNES } from './fortunes.data.js';
|
|
13
|
+
/**
|
|
14
|
+
* Picks a random fortune from the bundled collection.
|
|
15
|
+
*
|
|
16
|
+
* @param maxLines - Optional upper bound on the fortune's line count, so a
|
|
17
|
+
* boot banner can favour short cookies. When the bound filters everything
|
|
18
|
+
* out, the full collection is used rather than returning nothing.
|
|
19
|
+
* @returns The chosen fortune text (no trailing newline).
|
|
20
|
+
*/
|
|
21
|
+
export function fortune_random(maxLines) {
|
|
22
|
+
const bounded = maxLines !== undefined
|
|
23
|
+
? FORTUNES.filter((f) => f.split('\n').length <= maxLines)
|
|
24
|
+
: FORTUNES;
|
|
25
|
+
const pool = bounded.length > 0 ? bounded : FORTUNES;
|
|
26
|
+
return pool[Math.floor(Math.random() * pool.length)];
|
|
27
|
+
}
|
|
13
28
|
/**
|
|
14
29
|
* Reports a random fortune as a command envelope.
|
|
15
30
|
*
|
|
@@ -17,7 +32,7 @@ import { FORTUNES } from './fortunes.data.js';
|
|
|
17
32
|
* @returns An envelope carrying the chosen fortune and a typed model of it.
|
|
18
33
|
*/
|
|
19
34
|
export async function builtin_fortune(_args) {
|
|
20
|
-
const fortune =
|
|
35
|
+
const fortune = fortune_random();
|
|
21
36
|
return envelope_ok(`${fortune}\n`, {
|
|
22
37
|
kind: 'sys.fortune',
|
|
23
38
|
data: { fortune },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fortune.js","sourceRoot":"","sources":["../../../src/builtins/sys/fortune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAmB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"fortune.js","sourceRoot":"","sources":["../../../src/builtins/sys/fortune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAmB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,MAAM,OAAO,GACX,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC3E,CAAC,CAAC,QAAQ,CAAC;IACf,MAAM,IAAI,GAAsB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAe;IACnD,MAAM,OAAO,GAAW,cAAc,EAAE,CAAC;IACzC,OAAO,WAAW,CAAC,GAAG,OAAO,IAAI,EAAE;QACjC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,EAAE,OAAO,EAAE;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
import { CommandEnvelope } from '@fnndsc/cumin';
|
|
1
|
+
import { type CommandEnvelope } from '@fnndsc/cumin';
|
|
2
|
+
/**
|
|
3
|
+
* Reports the current ChRIS identity using Unix `id` notation.
|
|
4
|
+
*
|
|
5
|
+
* CUBE exposes a numeric user ID but no primary-group field. ChELL therefore
|
|
6
|
+
* uses the same POSIX projection as `/etc/passwd`: the primary GID and group
|
|
7
|
+
* name equal the user's ID and username.
|
|
8
|
+
*
|
|
9
|
+
* @param _args - Unused.
|
|
10
|
+
* @returns An envelope carrying numeric UID/GID identity and every CUBE group
|
|
11
|
+
* membership, or an error envelope when identity cannot be resolved.
|
|
12
|
+
*/
|
|
13
|
+
export declare function builtin_id(_args: string[]): Promise<CommandEnvelope>;
|
|
2
14
|
/**
|
|
3
15
|
* Reports the current authenticated ChRIS username.
|
|
4
16
|
*
|
|
@@ -1,10 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @file Builtins whoami and whereami.
|
|
2
|
+
* @file Builtins id, whoami, and whereami.
|
|
3
3
|
* Quick single-line identity queries, reported as command envelopes.
|
|
4
4
|
*/
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { context_getSingle } from '@fnndsc/salsa';
|
|
7
|
-
import {
|
|
7
|
+
import { currentIdentity_get, envelope_error, envelope_ok, } from '@fnndsc/cumin';
|
|
8
|
+
/**
|
|
9
|
+
* Reports the current ChRIS identity using Unix `id` notation.
|
|
10
|
+
*
|
|
11
|
+
* CUBE exposes a numeric user ID but no primary-group field. ChELL therefore
|
|
12
|
+
* uses the same POSIX projection as `/etc/passwd`: the primary GID and group
|
|
13
|
+
* name equal the user's ID and username.
|
|
14
|
+
*
|
|
15
|
+
* @param _args - Unused.
|
|
16
|
+
* @returns An envelope carrying numeric UID/GID identity and every CUBE group
|
|
17
|
+
* membership, or an error envelope when identity cannot be resolved.
|
|
18
|
+
*/
|
|
19
|
+
export async function builtin_id(_args) {
|
|
20
|
+
const result = await currentIdentity_get();
|
|
21
|
+
if (!result.ok) {
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return envelope_error(`${chalk.gray('(identity unavailable)')}\n`);
|
|
24
|
+
}
|
|
25
|
+
const identity = result.value;
|
|
26
|
+
const primaryGroup = {
|
|
27
|
+
gid: identity.user.id,
|
|
28
|
+
group: identity.user.username,
|
|
29
|
+
};
|
|
30
|
+
const memberships = identity.groups
|
|
31
|
+
.map((membership) => ({
|
|
32
|
+
gid: membership.id,
|
|
33
|
+
group: membership.name,
|
|
34
|
+
}))
|
|
35
|
+
.filter((membership) => membership.gid !== primaryGroup.gid || membership.group !== primaryGroup.group)
|
|
36
|
+
.sort((left, right) => left.gid - right.gid || left.group.localeCompare(right.group));
|
|
37
|
+
const groups = [primaryGroup, ...memberships];
|
|
38
|
+
const renderedGroups = groups
|
|
39
|
+
.map((membership) => `${membership.gid}(${membership.group})`)
|
|
40
|
+
.join(',');
|
|
41
|
+
return envelope_ok(`uid=${identity.user.id}(${identity.user.username}) `
|
|
42
|
+
+ `gid=${primaryGroup.gid}(${primaryGroup.group}) groups=${renderedGroups}\n`, {
|
|
43
|
+
kind: 'session.posixIdentity',
|
|
44
|
+
data: {
|
|
45
|
+
uid: identity.user.id,
|
|
46
|
+
user: identity.user.username,
|
|
47
|
+
gid: primaryGroup.gid,
|
|
48
|
+
group: primaryGroup.group,
|
|
49
|
+
groups,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
8
53
|
/**
|
|
9
54
|
* Reports the current authenticated ChRIS username.
|
|
10
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/builtins/sys/whoami.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/builtins/sys/whoami.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/utils.d.ts
CHANGED
|
@@ -5,11 +5,24 @@ export interface ParsedArgs {
|
|
|
5
5
|
_: string[];
|
|
6
6
|
[key: string]: string | boolean | string[];
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Parsing policy for command-specific long options.
|
|
10
|
+
*
|
|
11
|
+
* @property booleanLongOptions - Flags that must retain a following operand.
|
|
12
|
+
*/
|
|
13
|
+
export interface CommandArgsOptions {
|
|
14
|
+
/** Long options which are flags and must never consume a following operand. */
|
|
15
|
+
booleanLongOptions?: readonly string[];
|
|
16
|
+
}
|
|
8
17
|
/**
|
|
9
18
|
* Parses raw argument strings into a structured object.
|
|
10
19
|
* Supports `--` as an end-of-options marker (everything after is treated as positional args).
|
|
20
|
+
*
|
|
21
|
+
* @param args - Tokenized command arguments.
|
|
22
|
+
* @param options - Command-specific long-option policy.
|
|
23
|
+
* @returns Parsed option values and positional operands.
|
|
11
24
|
*/
|
|
12
|
-
export declare function commandArgs_process(args: string[]): ParsedArgs;
|
|
25
|
+
export declare function commandArgs_process(args: string[], options?: CommandArgsOptions): ParsedArgs;
|
|
13
26
|
/**
|
|
14
27
|
* Context required for path resolution.
|
|
15
28
|
*/
|
package/dist/builtins/utils.js
CHANGED
|
@@ -8,9 +8,14 @@ import { session } from '../session/index.js';
|
|
|
8
8
|
/**
|
|
9
9
|
* Parses raw argument strings into a structured object.
|
|
10
10
|
* Supports `--` as an end-of-options marker (everything after is treated as positional args).
|
|
11
|
+
*
|
|
12
|
+
* @param args - Tokenized command arguments.
|
|
13
|
+
* @param options - Command-specific long-option policy.
|
|
14
|
+
* @returns Parsed option values and positional operands.
|
|
11
15
|
*/
|
|
12
|
-
export function commandArgs_process(args) {
|
|
16
|
+
export function commandArgs_process(args, options = {}) {
|
|
13
17
|
const result = { _: [] };
|
|
18
|
+
const booleanLongOptions = new Set(options.booleanLongOptions);
|
|
14
19
|
let endOfOptions = false;
|
|
15
20
|
for (let i = 0; i < args.length; i++) {
|
|
16
21
|
const arg = args[i];
|
|
@@ -25,8 +30,13 @@ export function commandArgs_process(args) {
|
|
|
25
30
|
continue;
|
|
26
31
|
}
|
|
27
32
|
if (arg.startsWith('--')) {
|
|
28
|
-
const
|
|
29
|
-
|
|
33
|
+
const rawKey = arg.substring(2);
|
|
34
|
+
const separator = rawKey.indexOf('=');
|
|
35
|
+
const key = separator === -1 ? rawKey : rawKey.slice(0, separator);
|
|
36
|
+
if (separator !== -1) {
|
|
37
|
+
result[key] = rawKey.slice(separator + 1);
|
|
38
|
+
}
|
|
39
|
+
else if (!booleanLongOptions.has(key) && args[i + 1] && !args[i + 1].startsWith('-')) {
|
|
30
40
|
result[key] = args[i + 1];
|
|
31
41
|
i++;
|
|
32
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/builtins/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/builtins/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { ListingItem } from '@fnndsc/chili/models/listing.js';
|
|
1
2
|
import { Result } from '@fnndsc/cumin';
|
|
3
|
+
import { ShellWord } from '../lib/parser.js';
|
|
2
4
|
/**
|
|
3
5
|
* Checks if a string contains wildcard characters.
|
|
4
6
|
*
|
|
@@ -6,6 +8,35 @@ import { Result } from '@fnndsc/cumin';
|
|
|
6
8
|
* @returns True if the argument contains wildcards.
|
|
7
9
|
*/
|
|
8
10
|
export declare function string_checkHasWildcard(arg: string): boolean;
|
|
11
|
+
/** A VFS item selected by wildcard expansion. */
|
|
12
|
+
export interface WildcardMatch {
|
|
13
|
+
path: string;
|
|
14
|
+
type: ListingItem['type'];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Expands one quote-aware shell word against the ChRIS filesystem.
|
|
18
|
+
*
|
|
19
|
+
* @param word - Parsed shell word.
|
|
20
|
+
* @returns Expanded words, or the original word when it has no match.
|
|
21
|
+
*/
|
|
22
|
+
export declare function shellWord_expand(word: ShellWord): Promise<Result<ShellWord[]>>;
|
|
23
|
+
/**
|
|
24
|
+
* Expands selected quote-aware shell words in argument order.
|
|
25
|
+
*
|
|
26
|
+
* @param words - Parsed shell words.
|
|
27
|
+
* @param eligible - Predicate that preserves explicit cross-realm operands.
|
|
28
|
+
* @returns Expanded words, retaining literal words when no path matches.
|
|
29
|
+
*/
|
|
30
|
+
export declare function shellWords_expand(words: readonly ShellWord[], eligible: (word: ShellWord, index: number) => boolean): Promise<Result<ShellWord[]>>;
|
|
31
|
+
/**
|
|
32
|
+
* Expands a wildcard pattern against the current directory with item type.
|
|
33
|
+
*
|
|
34
|
+
* @param pattern - The glob pattern (e.g., "*.ts", "test*.json").
|
|
35
|
+
* @returns A Promise resolving to Result<WildcardMatch[]>.
|
|
36
|
+
* Ok([]) = no matches (not an error).
|
|
37
|
+
* Err(...) = couldn't expand (API failure, permission denied, etc.).
|
|
38
|
+
*/
|
|
39
|
+
export declare function wildcard_expandMatches(pattern: string): Promise<Result<WildcardMatch[]>>;
|
|
9
40
|
/**
|
|
10
41
|
* Expands a wildcard pattern against the current directory.
|
|
11
42
|
*
|