@nebulr-group/bridge-cli 0.4.0-beta.5 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -12
- package/dist/auth/scopes.d.ts +30 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +39 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/commands/auth/login.command.d.ts +2 -0
- package/dist/commands/auth/login.command.d.ts.map +1 -1
- package/dist/commands/auth/login.command.js +4 -1
- package/dist/commands/auth/login.command.js.map +1 -1
- package/dist/commands/flag.command.d.ts.map +1 -1
- package/dist/commands/flag.command.js +32 -21
- package/dist/commands/flag.command.js.map +1 -1
- package/dist/commands/guide.command.js +4 -5
- package/dist/commands/guide.command.js.map +1 -1
- package/dist/commands/integrate.command.d.ts.map +1 -1
- package/dist/commands/integrate.command.js +4 -4
- package/dist/commands/integrate.command.js.map +1 -1
- package/dist/commands/role.command.d.ts.map +1 -1
- package/dist/commands/role.command.js +15 -8
- package/dist/commands/role.command.js.map +1 -1
- package/dist/commands/tenant.command.d.ts.map +1 -1
- package/dist/commands/tenant.command.js +30 -11
- package/dist/commands/tenant.command.js.map +1 -1
- package/dist/commands/token.command.d.ts.map +1 -1
- package/dist/commands/token.command.js +7 -4
- package/dist/commands/token.command.js.map +1 -1
- package/dist/commands/user.command.d.ts.map +1 -1
- package/dist/commands/user.command.js +17 -10
- package/dist/commands/user.command.js.map +1 -1
- package/dist/output.d.ts +6 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +41 -1
- package/dist/output.js.map +1 -1
- package/dist/prompt-urls.d.ts +31 -0
- package/dist/prompt-urls.d.ts.map +1 -0
- package/dist/prompt-urls.js +35 -0
- package/dist/prompt-urls.js.map +1 -0
- package/dist/resolve.d.ts +69 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +163 -0
- package/dist/resolve.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error carrying a stable machine-readable `code`, so `outputError` can emit
|
|
3
|
+
* something better than UNKNOWN_ERROR for resolution failures.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ResolveError extends Error {
|
|
6
|
+
readonly code: string;
|
|
7
|
+
constructor(code: string, message: string);
|
|
8
|
+
}
|
|
9
|
+
export interface ResolveSpec<T> {
|
|
10
|
+
/** Capitalised singular noun used in messages, e.g. `'Flag'`. */
|
|
11
|
+
noun: string;
|
|
12
|
+
/** Flag the user types to address by id, e.g. `'--id'` or `'--user-id'`. */
|
|
13
|
+
idOption: string;
|
|
14
|
+
/** Flag the user types to address by key, e.g. `'--key'`, `'--email'`. */
|
|
15
|
+
keyOption: string;
|
|
16
|
+
/** What the key option holds, in prose: `'key'`, `'name'`, `'email'`. */
|
|
17
|
+
keyLabel: string;
|
|
18
|
+
/** Command that lists the candidates, e.g. `'bridge flag list'`. */
|
|
19
|
+
listCommand: string;
|
|
20
|
+
/** Fetches every candidate. Only called when resolving by key. */
|
|
21
|
+
list: () => Promise<T[]>;
|
|
22
|
+
idOf: (item: T) => string;
|
|
23
|
+
/** The item's key; `undefined` when the item has none (skipped in matching). */
|
|
24
|
+
keyOf: (item: T) => string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Comparison normaliser. Defaults to identity (exact, case-sensitive).
|
|
27
|
+
* Emails pass `(s) => s.toLowerCase()`.
|
|
28
|
+
*/
|
|
29
|
+
normalize?: (value: string) => string;
|
|
30
|
+
/** One-line rendering of a candidate, used in the ambiguity error. */
|
|
31
|
+
describe?: (item: T) => string;
|
|
32
|
+
}
|
|
33
|
+
export interface ResolveTarget {
|
|
34
|
+
id?: string;
|
|
35
|
+
key?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Turn `{ id }` or `{ key }` into an id.
|
|
39
|
+
*
|
|
40
|
+
* - both supplied → INVALID_OPTIONS
|
|
41
|
+
* - neither → INVALID_OPTIONS, naming both options
|
|
42
|
+
* - id supplied → returned as-is (no network call)
|
|
43
|
+
* - key supplied → one `list()` call, then exact-match on the key
|
|
44
|
+
* - 0 matches → `<NOUN>_NOT_FOUND`, naming the list command
|
|
45
|
+
* - >1 matches → `<NOUN>_AMBIGUOUS`, listing every candidate. Nothing acts.
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveResourceId<T>(target: ResolveTarget, spec: ResolveSpec<T>): Promise<string>;
|
|
48
|
+
/** `bridge flag …` — flag keys are unique. */
|
|
49
|
+
export declare function resolveFlagId(target: ResolveTarget): Promise<string>;
|
|
50
|
+
/** `bridge role …` — role keys are unique (e.g. ADMIN). */
|
|
51
|
+
export declare function resolveRoleId(target: ResolveTarget): Promise<string>;
|
|
52
|
+
/**
|
|
53
|
+
* `bridge tenant …` — tenants have NO key field. `name` is optional and the
|
|
54
|
+
* platform does not enforce uniqueness on it, so a duplicate name is a real
|
|
55
|
+
* possibility and always fails loudly rather than picking one.
|
|
56
|
+
*/
|
|
57
|
+
export declare function resolveTenantIdByName(target: ResolveTarget): Promise<string>;
|
|
58
|
+
/**
|
|
59
|
+
* `bridge user …` — users have no key either; email is the natural
|
|
60
|
+
* human-readable identifier and is unique within a tenant. Matched
|
|
61
|
+
* case-insensitively, as email addresses are.
|
|
62
|
+
*/
|
|
63
|
+
export declare function resolveUserId(target: ResolveTarget, tenantId: string): Promise<string>;
|
|
64
|
+
/**
|
|
65
|
+
* `bridge token …` — API tokens have no key; `name` is free text and is NOT
|
|
66
|
+
* enforced unique, so two tokens can legitimately share one.
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveTokenIdByName(target: ResolveTarget): Promise<string>;
|
|
69
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC1B,gFAAgF;IAChF,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAOD,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAYpE;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAYpE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CActF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAa3E"}
|
package/dist/resolve.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// TBP-586 — Address resources by their human-readable key, not just by id.
|
|
2
|
+
//
|
|
3
|
+
// Most write commands used to take an opaque `--id` only, which forced every
|
|
4
|
+
// caller (agent or human) to run a `list` first and pair the right id with the
|
|
5
|
+
// right name by hand. This module is the single place that turns a
|
|
6
|
+
// human-readable identifier into an id, so every noun behaves the same way.
|
|
7
|
+
//
|
|
8
|
+
// Semantics mirror the MCP layer's `toggle_feature_flag`
|
|
9
|
+
// (bridge-api/microservices/account/nebulr-api/mcp/tools/flags.ts): list, find
|
|
10
|
+
// by key, act — with two additions the CLI needs:
|
|
11
|
+
//
|
|
12
|
+
// * exactly one of the id option / key option must be supplied, and
|
|
13
|
+
// * a key that matches MORE THAN ONE resource is a hard failure that lists
|
|
14
|
+
// the candidates. Never guess. Silently deleting the wrong tenant because
|
|
15
|
+
// two of them share a name is the worst outcome this module can produce.
|
|
16
|
+
import { getManagementClient } from './config.js';
|
|
17
|
+
/**
|
|
18
|
+
* Error carrying a stable machine-readable `code`, so `outputError` can emit
|
|
19
|
+
* something better than UNKNOWN_ERROR for resolution failures.
|
|
20
|
+
*/
|
|
21
|
+
export class ResolveError extends Error {
|
|
22
|
+
code;
|
|
23
|
+
constructor(code, message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = 'ResolveError';
|
|
26
|
+
this.code = code;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const CODE_SAFE = /[^A-Z0-9]+/g;
|
|
30
|
+
function codeFor(noun, suffix) {
|
|
31
|
+
return `${noun.toUpperCase().replace(CODE_SAFE, '_')}_${suffix}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Turn `{ id }` or `{ key }` into an id.
|
|
35
|
+
*
|
|
36
|
+
* - both supplied → INVALID_OPTIONS
|
|
37
|
+
* - neither → INVALID_OPTIONS, naming both options
|
|
38
|
+
* - id supplied → returned as-is (no network call)
|
|
39
|
+
* - key supplied → one `list()` call, then exact-match on the key
|
|
40
|
+
* - 0 matches → `<NOUN>_NOT_FOUND`, naming the list command
|
|
41
|
+
* - >1 matches → `<NOUN>_AMBIGUOUS`, listing every candidate. Nothing acts.
|
|
42
|
+
*/
|
|
43
|
+
export async function resolveResourceId(target, spec) {
|
|
44
|
+
const { id, key } = target;
|
|
45
|
+
const hasId = id !== undefined && id !== '';
|
|
46
|
+
const hasKey = key !== undefined && key !== '';
|
|
47
|
+
if (hasId && hasKey) {
|
|
48
|
+
throw new ResolveError('INVALID_OPTIONS', `Pass either ${spec.idOption} or ${spec.keyOption}, not both.`);
|
|
49
|
+
}
|
|
50
|
+
if (!hasId && !hasKey) {
|
|
51
|
+
throw new ResolveError('INVALID_OPTIONS', `Missing target: pass ${spec.idOption} <id> or ${spec.keyOption} <${spec.keyLabel}>. ` +
|
|
52
|
+
`Run \`${spec.listCommand}\` to see existing ${spec.keyLabel}s.`);
|
|
53
|
+
}
|
|
54
|
+
if (hasId)
|
|
55
|
+
return id;
|
|
56
|
+
const normalize = spec.normalize ?? ((v) => v);
|
|
57
|
+
const wanted = normalize(key);
|
|
58
|
+
const items = await spec.list();
|
|
59
|
+
const matches = items.filter((item) => {
|
|
60
|
+
const candidate = spec.keyOf(item);
|
|
61
|
+
return candidate !== undefined && candidate !== null && normalize(candidate) === wanted;
|
|
62
|
+
});
|
|
63
|
+
if (matches.length === 0) {
|
|
64
|
+
throw new ResolveError(codeFor(spec.noun, 'NOT_FOUND'), `${spec.noun} not found: ${key}. Run \`${spec.listCommand}\` to see existing ${spec.keyLabel}s.`);
|
|
65
|
+
}
|
|
66
|
+
if (matches.length > 1) {
|
|
67
|
+
const describe = spec.describe ?? ((item) => `${spec.idOf(item)}`);
|
|
68
|
+
const candidates = matches.map((m) => ` - ${describe(m)}`).join('\n');
|
|
69
|
+
throw new ResolveError(codeFor(spec.noun, 'AMBIGUOUS'), `Ambiguous ${spec.keyLabel} "${key}" — it matches ${matches.length} ` +
|
|
70
|
+
`${spec.noun.toLowerCase()}s:\n${candidates}\n` +
|
|
71
|
+
`Nothing was changed. Re-run with ${spec.idOption} <id> to pick one.`);
|
|
72
|
+
}
|
|
73
|
+
return spec.idOf(matches[0]);
|
|
74
|
+
}
|
|
75
|
+
// ── per-noun resolvers ──────────────────────────────────────────────────────
|
|
76
|
+
//
|
|
77
|
+
// One function per noun so no command hand-rolls a `list().find()`. Each is a
|
|
78
|
+
// thin `resolveResourceId` call describing where that noun's key lives.
|
|
79
|
+
/** `bridge flag …` — flag keys are unique. */
|
|
80
|
+
export function resolveFlagId(target) {
|
|
81
|
+
return resolveResourceId(target, {
|
|
82
|
+
noun: 'Flag',
|
|
83
|
+
idOption: '--id',
|
|
84
|
+
keyOption: '--key',
|
|
85
|
+
keyLabel: 'key',
|
|
86
|
+
listCommand: 'bridge flag list',
|
|
87
|
+
list: () => getManagementClient().flags.list(),
|
|
88
|
+
idOf: (f) => f.id,
|
|
89
|
+
keyOf: (f) => f.key,
|
|
90
|
+
describe: (f) => `${f.key} (id ${f.id})`,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/** `bridge role …` — role keys are unique (e.g. ADMIN). */
|
|
94
|
+
export function resolveRoleId(target) {
|
|
95
|
+
return resolveResourceId(target, {
|
|
96
|
+
noun: 'Role',
|
|
97
|
+
idOption: '--id',
|
|
98
|
+
keyOption: '--key',
|
|
99
|
+
keyLabel: 'key',
|
|
100
|
+
listCommand: 'bridge role list',
|
|
101
|
+
list: () => getManagementClient().roles.list(),
|
|
102
|
+
idOf: (r) => r.id,
|
|
103
|
+
keyOf: (r) => r.key,
|
|
104
|
+
describe: (r) => `${r.key} — ${r.name} (id ${r.id})`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* `bridge tenant …` — tenants have NO key field. `name` is optional and the
|
|
109
|
+
* platform does not enforce uniqueness on it, so a duplicate name is a real
|
|
110
|
+
* possibility and always fails loudly rather than picking one.
|
|
111
|
+
*/
|
|
112
|
+
export function resolveTenantIdByName(target) {
|
|
113
|
+
return resolveResourceId(target, {
|
|
114
|
+
noun: 'Tenant',
|
|
115
|
+
idOption: '--id',
|
|
116
|
+
keyOption: '--name',
|
|
117
|
+
keyLabel: 'name',
|
|
118
|
+
listCommand: 'bridge tenant list',
|
|
119
|
+
list: () => getManagementClient().tenants.list(),
|
|
120
|
+
idOf: (t) => t.id,
|
|
121
|
+
keyOf: (t) => t.name,
|
|
122
|
+
describe: (t) => `${t.name ?? '(unnamed)'} — id ${t.id}` +
|
|
123
|
+
(t.signupBy?.email ? `, owner ${t.signupBy.email}` : '') +
|
|
124
|
+
(t.createdAt ? `, created ${t.createdAt}` : ''),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* `bridge user …` — users have no key either; email is the natural
|
|
129
|
+
* human-readable identifier and is unique within a tenant. Matched
|
|
130
|
+
* case-insensitively, as email addresses are.
|
|
131
|
+
*/
|
|
132
|
+
export function resolveUserId(target, tenantId) {
|
|
133
|
+
return resolveResourceId(target, {
|
|
134
|
+
noun: 'User',
|
|
135
|
+
idOption: '--user-id',
|
|
136
|
+
keyOption: '--email',
|
|
137
|
+
keyLabel: 'email',
|
|
138
|
+
listCommand: 'bridge user list',
|
|
139
|
+
list: () => getManagementClient().users.list(tenantId),
|
|
140
|
+
idOf: (u) => u.id,
|
|
141
|
+
keyOf: (u) => u.email ?? u.username,
|
|
142
|
+
normalize: (v) => v.toLowerCase(),
|
|
143
|
+
describe: (u) => `${u.email ?? u.username}${u.fullName ? ` — ${u.fullName}` : ''} (id ${u.id})`,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* `bridge token …` — API tokens have no key; `name` is free text and is NOT
|
|
148
|
+
* enforced unique, so two tokens can legitimately share one.
|
|
149
|
+
*/
|
|
150
|
+
export function resolveTokenIdByName(target) {
|
|
151
|
+
return resolveResourceId(target, {
|
|
152
|
+
noun: 'Token',
|
|
153
|
+
idOption: '--id',
|
|
154
|
+
keyOption: '--name',
|
|
155
|
+
keyLabel: 'name',
|
|
156
|
+
listCommand: 'bridge token list',
|
|
157
|
+
list: () => getManagementClient().tokens.list(),
|
|
158
|
+
idOf: (t) => t.id,
|
|
159
|
+
keyOf: (t) => t.name,
|
|
160
|
+
describe: (t) => `${t.name} — id ${t.id}` + (t.createdAt ? `, created ${t.createdAt}` : ''),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nebulr-group/bridge-cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Bridge platform CLI for AI coding agents and developers",
|
|
5
5
|
"author": "Nebulr Group",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"publish:local": "npm run build && node -e \"const fs=require('fs'),p=JSON.parse(fs.readFileSync('package.json','utf8')),v=p.version.match(/^(\\d+\\.\\d+\\.\\d+)-alpha\\.(\\d+)$/);if(v){p.version=v[1]+'-alpha.'+(+v[2]+1);}else{p.version=p.version+'-alpha.0';}fs.writeFileSync('package.json',JSON.stringify(p,null,' ')+'\\n');console.log('Version bumped to '+p.version);\" && npm publish --registry http://host.docker.internal:4873 --no-git-checks --ignore-scripts && npm dist-tag add @nebulr-group/bridge-cli@$(node -p \"require('./package.json').version\") alpha --registry http://host.docker.internal:4873"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@nebulr-group/bridge-auth-core": "0.4.
|
|
27
|
+
"@nebulr-group/bridge-auth-core": "0.4.2",
|
|
28
28
|
"commander": "^12.0.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|