@nebulr-group/bridge-cli 0.6.6 → 1.0.0-alpha.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 +98 -458
- package/dist/api/accounts.d.ts +105 -0
- package/dist/api/accounts.d.ts.map +1 -0
- package/dist/api/accounts.js +58 -0
- package/dist/api/accounts.js.map +1 -0
- package/dist/api/apps.d.ts +50 -0
- package/dist/api/apps.d.ts.map +1 -0
- package/dist/api/apps.js +62 -0
- package/dist/api/apps.js.map +1 -0
- package/dist/api/billing.d.ts +131 -0
- package/dist/api/billing.d.ts.map +1 -0
- package/dist/api/billing.js +42 -0
- package/dist/api/billing.js.map +1 -0
- package/dist/api/flags.d.ts +73 -0
- package/dist/api/flags.d.ts.map +1 -0
- package/dist/api/flags.js +108 -0
- package/dist/api/flags.js.map +1 -0
- package/dist/api/keys.d.ts +48 -0
- package/dist/api/keys.d.ts.map +1 -0
- package/dist/api/keys.js +87 -0
- package/dist/api/keys.js.map +1 -0
- package/dist/auth/browser-open.d.ts +21 -4
- package/dist/auth/browser-open.d.ts.map +1 -1
- package/dist/auth/browser-open.js +45 -65
- package/dist/auth/browser-open.js.map +1 -1
- package/dist/auth/lock.d.ts +8 -0
- package/dist/auth/lock.d.ts.map +1 -0
- package/dist/auth/lock.js +43 -0
- package/dist/auth/lock.js.map +1 -0
- package/dist/auth/loopback.d.ts +8 -12
- package/dist/auth/loopback.d.ts.map +1 -1
- package/dist/auth/loopback.js +40 -45
- package/dist/auth/loopback.js.map +1 -1
- package/dist/auth/session.d.ts +61 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +142 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/auth/sign-in.d.ts +67 -0
- package/dist/auth/sign-in.d.ts.map +1 -0
- package/dist/auth/sign-in.js +113 -0
- package/dist/auth/sign-in.js.map +1 -0
- package/dist/auth/store.d.ts +89 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +214 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/bin.js +0 -2
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +13 -17
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +31 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +67 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/accounts.command.d.ts +4 -0
- package/dist/commands/accounts.command.d.ts.map +1 -0
- package/dist/commands/accounts.command.js +166 -0
- package/dist/commands/accounts.command.js.map +1 -0
- package/dist/commands/app.command.d.ts +3 -2
- package/dist/commands/app.command.d.ts.map +1 -1
- package/dist/commands/app.command.js +132 -233
- package/dist/commands/app.command.js.map +1 -1
- package/dist/commands/auth.command.d.ts +2 -12
- package/dist/commands/auth.command.d.ts.map +1 -1
- package/dist/commands/auth.command.js +147 -20
- package/dist/commands/auth.command.js.map +1 -1
- package/dist/commands/billing.command.d.ts +4 -0
- package/dist/commands/billing.command.d.ts.map +1 -0
- package/dist/commands/billing.command.js +185 -0
- package/dist/commands/billing.command.js.map +1 -0
- package/dist/commands/check.command.d.ts +2 -1
- package/dist/commands/check.command.d.ts.map +1 -1
- package/dist/commands/check.command.js +11 -14
- package/dist/commands/check.command.js.map +1 -1
- package/dist/commands/context.d.ts +58 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +78 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/flag.command.d.ts +3 -62
- package/dist/commands/flag.command.d.ts.map +1 -1
- package/dist/commands/flag.command.js +181 -864
- package/dist/commands/flag.command.js.map +1 -1
- package/dist/commands/key.command.d.ts +4 -0
- package/dist/commands/key.command.d.ts.map +1 -0
- package/dist/commands/key.command.js +44 -0
- package/dist/commands/key.command.js.map +1 -0
- package/dist/commands/plan.command.d.ts +3 -203
- package/dist/commands/plan.command.d.ts.map +1 -1
- package/dist/commands/plan.command.js +200 -759
- package/dist/commands/plan.command.js.map +1 -1
- package/dist/config.d.ts +19 -101
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +51 -364
- package/dist/config.js.map +1 -1
- package/dist/core/discovery.d.ts +27 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +97 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/errors.d.ts +26 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +33 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/http.d.ts +23 -0
- package/dist/core/http.d.ts.map +1 -0
- package/dist/core/http.js +153 -0
- package/dist/core/http.js.map +1 -0
- package/dist/core/private-files.d.ts +6 -0
- package/dist/core/private-files.d.ts.map +1 -0
- package/dist/core/private-files.js +96 -0
- package/dist/core/private-files.js.map +1 -0
- package/dist/core/routes.d.ts +100 -0
- package/dist/core/routes.d.ts.map +1 -0
- package/dist/core/routes.js +99 -0
- package/dist/core/routes.js.map +1 -0
- package/dist/core/urls.d.ts +15 -0
- package/dist/core/urls.d.ts.map +1 -0
- package/dist/core/urls.js +55 -0
- package/dist/core/urls.js.map +1 -0
- package/dist/gate-rules.d.ts +1 -2
- package/dist/gate-rules.d.ts.map +1 -1
- package/dist/gate-rules.js +4 -5
- package/dist/gate-rules.js.map +1 -1
- package/dist/index.d.ts +24 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -3
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts +21 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +59 -0
- package/dist/io.js.map +1 -0
- package/dist/money.d.ts +42 -0
- package/dist/money.d.ts.map +1 -0
- package/dist/money.js +112 -0
- package/dist/money.js.map +1 -0
- package/dist/program.d.ts +5 -24
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +25 -113
- package/dist/program.js.map +1 -1
- package/package.json +7 -8
- package/dist/auth/api-client.d.ts +0 -50
- package/dist/auth/api-client.d.ts.map +0 -1
- package/dist/auth/api-client.js +0 -109
- package/dist/auth/api-client.js.map +0 -1
- package/dist/auth/relative-time.d.ts +0 -2
- package/dist/auth/relative-time.d.ts.map +0 -1
- package/dist/auth/relative-time.js +0 -27
- package/dist/auth/relative-time.js.map +0 -1
- package/dist/auth/scopes.d.ts +0 -30
- package/dist/auth/scopes.d.ts.map +0 -1
- package/dist/auth/scopes.js +0 -39
- package/dist/auth/scopes.js.map +0 -1
- package/dist/auth/workspace-client.d.ts +0 -70
- package/dist/auth/workspace-client.d.ts.map +0 -1
- package/dist/auth/workspace-client.js +0 -105
- package/dist/auth/workspace-client.js.map +0 -1
- package/dist/commands/auth/config.command.d.ts +0 -8
- package/dist/commands/auth/config.command.d.ts.map +0 -1
- package/dist/commands/auth/config.command.js +0 -60
- package/dist/commands/auth/config.command.js.map +0 -1
- package/dist/commands/auth/login.command.d.ts +0 -46
- package/dist/commands/auth/login.command.d.ts.map +0 -1
- package/dist/commands/auth/login.command.js +0 -166
- package/dist/commands/auth/login.command.js.map +0 -1
- package/dist/commands/auth/logout.command.d.ts +0 -21
- package/dist/commands/auth/logout.command.d.ts.map +0 -1
- package/dist/commands/auth/logout.command.js +0 -97
- package/dist/commands/auth/logout.command.js.map +0 -1
- package/dist/commands/auth/methods.command.d.ts +0 -68
- package/dist/commands/auth/methods.command.d.ts.map +0 -1
- package/dist/commands/auth/methods.command.js +0 -91
- package/dist/commands/auth/methods.command.js.map +0 -1
- package/dist/commands/auth/status.command.d.ts +0 -18
- package/dist/commands/auth/status.command.d.ts.map +0 -1
- package/dist/commands/auth/status.command.js +0 -104
- package/dist/commands/auth/status.command.js.map +0 -1
- package/dist/commands/auth/use.command.d.ts +0 -17
- package/dist/commands/auth/use.command.d.ts.map +0 -1
- package/dist/commands/auth/use.command.js +0 -47
- package/dist/commands/auth/use.command.js.map +0 -1
- package/dist/commands/branding.command.d.ts +0 -3
- package/dist/commands/branding.command.d.ts.map +0 -1
- package/dist/commands/branding.command.js +0 -42
- package/dist/commands/branding.command.js.map +0 -1
- package/dist/commands/event.command.d.ts +0 -3
- package/dist/commands/event.command.d.ts.map +0 -1
- package/dist/commands/event.command.js +0 -27
- package/dist/commands/event.command.js.map +0 -1
- package/dist/commands/flag-init.command.d.ts +0 -13
- package/dist/commands/flag-init.command.d.ts.map +0 -1
- package/dist/commands/flag-init.command.js +0 -463
- package/dist/commands/flag-init.command.js.map +0 -1
- package/dist/commands/guide.command.d.ts +0 -61
- package/dist/commands/guide.command.d.ts.map +0 -1
- package/dist/commands/guide.command.js +0 -655
- package/dist/commands/guide.command.js.map +0 -1
- package/dist/commands/info.command.d.ts +0 -3
- package/dist/commands/info.command.d.ts.map +0 -1
- package/dist/commands/info.command.js +0 -70
- package/dist/commands/info.command.js.map +0 -1
- package/dist/commands/integration.command.d.ts +0 -35
- package/dist/commands/integration.command.d.ts.map +0 -1
- package/dist/commands/integration.command.js +0 -290
- package/dist/commands/integration.command.js.map +0 -1
- package/dist/commands/journeys.d.ts +0 -43
- package/dist/commands/journeys.d.ts.map +0 -1
- package/dist/commands/journeys.js +0 -221
- package/dist/commands/journeys.js.map +0 -1
- package/dist/commands/ops.command.d.ts +0 -17
- package/dist/commands/ops.command.d.ts.map +0 -1
- package/dist/commands/ops.command.js +0 -129
- package/dist/commands/ops.command.js.map +0 -1
- package/dist/commands/privilege.command.d.ts +0 -16
- package/dist/commands/privilege.command.d.ts.map +0 -1
- package/dist/commands/privilege.command.js +0 -86
- package/dist/commands/privilege.command.js.map +0 -1
- package/dist/commands/role.command.d.ts +0 -3
- package/dist/commands/role.command.d.ts.map +0 -1
- package/dist/commands/role.command.js +0 -101
- package/dist/commands/role.command.js.map +0 -1
- package/dist/commands/runtime-dir.d.ts +0 -16
- package/dist/commands/runtime-dir.d.ts.map +0 -1
- package/dist/commands/runtime-dir.js +0 -18
- package/dist/commands/runtime-dir.js.map +0 -1
- package/dist/commands/setup.command.d.ts +0 -63
- package/dist/commands/setup.command.d.ts.map +0 -1
- package/dist/commands/setup.command.js +0 -148
- package/dist/commands/setup.command.js.map +0 -1
- package/dist/commands/stripe.command.d.ts +0 -29
- package/dist/commands/stripe.command.d.ts.map +0 -1
- package/dist/commands/stripe.command.js +0 -99
- package/dist/commands/stripe.command.js.map +0 -1
- package/dist/commands/tenant.command.d.ts +0 -3
- package/dist/commands/tenant.command.d.ts.map +0 -1
- package/dist/commands/tenant.command.js +0 -135
- package/dist/commands/tenant.command.js.map +0 -1
- package/dist/commands/token.command.d.ts +0 -3
- package/dist/commands/token.command.d.ts.map +0 -1
- package/dist/commands/token.command.js +0 -54
- package/dist/commands/token.command.js.map +0 -1
- package/dist/commands/user.command.d.ts +0 -3
- package/dist/commands/user.command.d.ts.map +0 -1
- package/dist/commands/user.command.js +0 -117
- package/dist/commands/user.command.js.map +0 -1
- package/dist/credentials.d.ts +0 -141
- package/dist/credentials.d.ts.map +0 -1
- package/dist/credentials.js +0 -348
- package/dist/credentials.js.map +0 -1
- package/dist/flag-coherence.d.ts +0 -42
- package/dist/flag-coherence.d.ts.map +0 -1
- package/dist/flag-coherence.js +0 -103
- package/dist/flag-coherence.js.map +0 -1
- package/dist/output.d.ts +0 -17
- package/dist/output.d.ts.map +0 -1
- package/dist/output.js +0 -107
- package/dist/output.js.map +0 -1
- package/dist/preview.d.ts +0 -9
- package/dist/preview.d.ts.map +0 -1
- package/dist/preview.js +0 -63
- package/dist/preview.js.map +0 -1
- package/dist/product-decisions.d.ts +0 -40
- package/dist/product-decisions.d.ts.map +0 -1
- package/dist/product-decisions.js +0 -52
- package/dist/product-decisions.js.map +0 -1
- package/dist/prompt-urls.d.ts +0 -31
- package/dist/prompt-urls.d.ts.map +0 -1
- package/dist/prompt-urls.js +0 -35
- package/dist/prompt-urls.js.map +0 -1
- package/dist/prompts/auth-master-integration-prompt.md +0 -255
- package/dist/prompts/billing/master.md +0 -332
- package/dist/prompts/decisions/feature-control.md +0 -131
- package/dist/prompts/decisions/going-live.md +0 -60
- package/dist/prompts/decisions/login.md +0 -71
- package/dist/prompts/decisions/look-and-feel.md +0 -68
- package/dist/prompts/decisions/payments.md +0 -97
- package/dist/prompts/decisions/roles.md +0 -78
- package/dist/prompts/decisions/teams.md +0 -61
- package/dist/prompts/fit-together.md +0 -97
- package/dist/prompts/flags/master.md +0 -220
- package/dist/prompts/guide-coverage.json +0 -17
- package/dist/prompts/integration-success.md +0 -106
- package/dist/prompts/mcp-tools.json +0 -90
- package/dist/prompts/mechanisms.md +0 -304
- package/dist/prompts/orientation.md +0 -42
- package/dist/prompts/product-decisions.json +0 -338
- package/dist/resolve.d.ts +0 -110
- package/dist/resolve.d.ts.map +0 -1
- package/dist/resolve.js +0 -260
- package/dist/resolve.js.map +0 -1
- package/dist/shape.d.ts +0 -25
- package/dist/shape.d.ts.map +0 -1
- package/dist/shape.js +0 -74
- package/dist/shape.js.map +0 -1
package/dist/resolve.js
DELETED
|
@@ -1,260 +0,0 @@
|
|
|
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
|
-
function flagSpec(list) {
|
|
80
|
-
return {
|
|
81
|
-
noun: 'Flag',
|
|
82
|
-
idOption: '--id',
|
|
83
|
-
keyOption: '--key',
|
|
84
|
-
keyLabel: 'key',
|
|
85
|
-
listCommand: 'bridge flag list',
|
|
86
|
-
list,
|
|
87
|
-
idOf: (f) => f.id,
|
|
88
|
-
keyOf: (f) => f.key,
|
|
89
|
-
describe: (f) => `${f.key} (id ${f.id})`,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
/** `bridge flag …` — flag keys are unique. */
|
|
93
|
-
export function resolveFlagId(target) {
|
|
94
|
-
return resolveResourceId(target, flagSpec(() => getManagementClient().flags.list()));
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Resolve to the whole flag record rather than just its id.
|
|
98
|
-
*
|
|
99
|
-
* TBP-548. `flag toggle` has to read the flag's current `state` before it
|
|
100
|
-
* writes: turning a `state: "on-with-rule"` flag fully on would widen it from
|
|
101
|
-
* the rule's audience to everyone, which is not what a switch labelled
|
|
102
|
-
* "toggle" is understood to do. One `list()` serves both the resolution and
|
|
103
|
-
* that check, and it costs the `--id` path its previous no-network property —
|
|
104
|
-
* deliberately, since an `--id` that matches nothing now fails here by name
|
|
105
|
-
* instead of as an opaque server 404.
|
|
106
|
-
*/
|
|
107
|
-
export async function resolveFlag(target) {
|
|
108
|
-
// Memoised so a bad `--id`/`--key` combination still fails before any
|
|
109
|
-
// network call, and the key path lists exactly once.
|
|
110
|
-
let cached;
|
|
111
|
-
const list = async () => (cached ??= await getManagementClient().flags.list());
|
|
112
|
-
const id = await resolveResourceId(target, flagSpec(list));
|
|
113
|
-
const flags = await list();
|
|
114
|
-
const found = flags.find((f) => f.id === id);
|
|
115
|
-
if (!found) {
|
|
116
|
-
throw new ResolveError('FLAG_NOT_FOUND', `Flag not found: ${id}. Run \`bridge flag list\` to see existing flags.`);
|
|
117
|
-
}
|
|
118
|
-
return found;
|
|
119
|
-
}
|
|
120
|
-
/** `bridge role …` — role keys are unique (e.g. ADMIN). */
|
|
121
|
-
export function resolveRoleId(target) {
|
|
122
|
-
return resolveResourceId(target, {
|
|
123
|
-
noun: 'Role',
|
|
124
|
-
idOption: '--id',
|
|
125
|
-
keyOption: '--key',
|
|
126
|
-
keyLabel: 'key',
|
|
127
|
-
listCommand: 'bridge role list',
|
|
128
|
-
list: () => getManagementClient().roles.list(),
|
|
129
|
-
idOf: (r) => r.id,
|
|
130
|
-
keyOf: (r) => r.key,
|
|
131
|
-
describe: (r) => `${r.key} — ${r.name} (id ${r.id})`,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* `bridge tenant …` — tenants have NO key field. `name` is optional and the
|
|
136
|
-
* platform does not enforce uniqueness on it, so a duplicate name is a real
|
|
137
|
-
* possibility and always fails loudly rather than picking one.
|
|
138
|
-
*/
|
|
139
|
-
export function resolveTenantIdByName(target) {
|
|
140
|
-
return resolveResourceId(target, {
|
|
141
|
-
noun: 'Tenant',
|
|
142
|
-
idOption: '--id',
|
|
143
|
-
keyOption: '--name',
|
|
144
|
-
keyLabel: 'name',
|
|
145
|
-
listCommand: 'bridge tenant list',
|
|
146
|
-
list: () => getManagementClient().tenants.list(),
|
|
147
|
-
idOf: (t) => t.id,
|
|
148
|
-
keyOf: (t) => t.name,
|
|
149
|
-
describe: (t) => `${t.name ?? '(unnamed)'} — id ${t.id}` +
|
|
150
|
-
(t.signupBy?.email ? `, owner ${t.signupBy.email}` : '') +
|
|
151
|
-
(t.createdAt ? `, created ${t.createdAt}` : ''),
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* `bridge user …` — users have no key either; email is the natural
|
|
156
|
-
* human-readable identifier and is unique within a tenant. Matched
|
|
157
|
-
* case-insensitively, as email addresses are.
|
|
158
|
-
*/
|
|
159
|
-
export function resolveUserId(target, tenantId) {
|
|
160
|
-
return resolveResourceId(target, {
|
|
161
|
-
noun: 'User',
|
|
162
|
-
idOption: '--user-id',
|
|
163
|
-
keyOption: '--email',
|
|
164
|
-
keyLabel: 'email',
|
|
165
|
-
listCommand: 'bridge user list',
|
|
166
|
-
list: () => getManagementClient().users.list(tenantId),
|
|
167
|
-
idOf: (u) => u.id,
|
|
168
|
-
keyOf: (u) => u.email ?? u.username,
|
|
169
|
-
normalize: (v) => v.toLowerCase(),
|
|
170
|
-
describe: (u) => `${u.email ?? u.username}${u.fullName ? ` — ${u.fullName}` : ''} (id ${u.id})`,
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* TBP-592 — turn privilege KEYS into the ids `POST/PUT /account/role` stores.
|
|
175
|
-
*
|
|
176
|
-
* `--privileges` is documented as taking keys, and keys are the only form a
|
|
177
|
-
* human or agent has: they are what `bridge role list` prints and what the app
|
|
178
|
-
* is designed around. But `role.model.ts` types `privileges` as
|
|
179
|
-
* `Types.ObjectId[]` and resolves them with `findByIdsAndApp`, so a key
|
|
180
|
-
* resolved to nothing, the array came back empty, and the model's pre-save
|
|
181
|
-
* hook threw "A role needs at least one privilege".
|
|
182
|
-
*
|
|
183
|
-
* That error is the real cost. It reads as "you passed none" when the truth is
|
|
184
|
-
* "the ones you passed were dropped", and nothing in it points at keys-vs-ids —
|
|
185
|
-
* the only way to find out was to read the model.
|
|
186
|
-
*
|
|
187
|
-
* So: resolve here, and make an unknown identifier a hard failure that NAMES
|
|
188
|
-
* the offenders. Silently dropping one privilege out of ten would create a role
|
|
189
|
-
* that looks right and under-permits, which is worse than any error.
|
|
190
|
-
*
|
|
191
|
-
* Ids are still accepted and passed through untouched. Mixed input works. That
|
|
192
|
-
* keeps `--privileges` honest for scripts that already pass ids, and means no
|
|
193
|
-
* caller has to know which form the API wants.
|
|
194
|
-
*/
|
|
195
|
-
export async function resolvePrivilegeIds(identifiers) {
|
|
196
|
-
const wanted = identifiers.map((v) => v.trim()).filter((v) => v !== '');
|
|
197
|
-
if (wanted.length === 0)
|
|
198
|
-
return [];
|
|
199
|
-
const privileges = await getManagementClient().roles.listPrivileges();
|
|
200
|
-
const byKey = new Map(privileges.map((p) => [p.key, p.id]));
|
|
201
|
-
const knownIds = new Set(privileges.map((p) => p.id));
|
|
202
|
-
const resolved = [];
|
|
203
|
-
const unknown = [];
|
|
204
|
-
for (const identifier of wanted) {
|
|
205
|
-
const id = byKey.get(identifier);
|
|
206
|
-
if (id !== undefined) {
|
|
207
|
-
resolved.push(id);
|
|
208
|
-
}
|
|
209
|
-
else if (knownIds.has(identifier)) {
|
|
210
|
-
resolved.push(identifier); // already an id
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
unknown.push(identifier);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
if (unknown.length > 0) {
|
|
217
|
-
const available = privileges.map((p) => p.key).sort();
|
|
218
|
-
throw new ResolveError('PRIVILEGE_NOT_FOUND', `Unknown privilege${unknown.length > 1 ? 's' : ''}: ${unknown.join(', ')}.\n` +
|
|
219
|
-
`Nothing was changed. Available privileges: ${available.join(', ') || '(none defined)'}.\n` +
|
|
220
|
-
`Run \`bridge role list\` to see which roles use them.`);
|
|
221
|
-
}
|
|
222
|
-
// De-duplicate: two spellings of the same privilege (its key and its id) must
|
|
223
|
-
// not produce a doubled entry in the stored array.
|
|
224
|
-
return [...new Set(resolved)];
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* `bridge privilege …` — privilege keys are unique within an app, so a key
|
|
228
|
-
* addresses exactly one. Same shape as `resolveRoleId`.
|
|
229
|
-
*/
|
|
230
|
-
export function resolvePrivilegeId(target) {
|
|
231
|
-
return resolveResourceId(target, {
|
|
232
|
-
noun: 'Privilege',
|
|
233
|
-
idOption: '--id',
|
|
234
|
-
keyOption: '--key',
|
|
235
|
-
keyLabel: 'key',
|
|
236
|
-
listCommand: 'bridge privilege list',
|
|
237
|
-
list: () => getManagementClient().roles.listPrivileges(),
|
|
238
|
-
idOf: (p) => p.id,
|
|
239
|
-
keyOf: (p) => p.key,
|
|
240
|
-
describe: (p) => `${p.key}${p.description ? ` — ${p.description}` : ''} (id ${p.id})`,
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* `bridge token …` — API tokens have no key; `name` is free text and is NOT
|
|
245
|
-
* enforced unique, so two tokens can legitimately share one.
|
|
246
|
-
*/
|
|
247
|
-
export function resolveTokenIdByName(target) {
|
|
248
|
-
return resolveResourceId(target, {
|
|
249
|
-
noun: 'Token',
|
|
250
|
-
idOption: '--id',
|
|
251
|
-
keyOption: '--name',
|
|
252
|
-
keyLabel: 'name',
|
|
253
|
-
listCommand: 'bridge token list',
|
|
254
|
-
list: () => getManagementClient().tokens.list(),
|
|
255
|
-
idOf: (t) => t.id,
|
|
256
|
-
keyOf: (t) => t.name,
|
|
257
|
-
describe: (t) => `${t.name} — id ${t.id}` + (t.createdAt ? `, created ${t.createdAt}` : ''),
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
//# sourceMappingURL=resolve.js.map
|
package/dist/resolve.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/shape.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tenant metadata keys the platform writes for its own conversion-pixel
|
|
3
|
-
* bookkeeping (tracking.service.ts, tenant.service.ts). Never app data.
|
|
4
|
-
*/
|
|
5
|
-
export declare const INTERNAL_TENANT_METADATA_KEYS: string[];
|
|
6
|
-
/** A tenant without the platform's pixel bookkeeping in `metadata`. */
|
|
7
|
-
export declare function shapeTenant<T>(tenant: T): T;
|
|
8
|
-
/**
|
|
9
|
-
* A plan without the payment provider's ids: each quota's `providerRefs`
|
|
10
|
-
* (Stripe price and meter ids) is dropped. Prices and quotas otherwise stay
|
|
11
|
-
* whole — `create_plan` and friends still return the full plan.
|
|
12
|
-
*/
|
|
13
|
-
export declare function shapePlan<T>(plan: T): T;
|
|
14
|
-
/**
|
|
15
|
-
* Roles with each privilege named once. Every role used to carry the full
|
|
16
|
-
* privilege object (id, key, description) for every privilege it grants, so a
|
|
17
|
-
* five-role app repeated the same descriptions five times. Now each role lists
|
|
18
|
-
* privilege KEYS — what code and create_role/update_role take — and the
|
|
19
|
-
* descriptions appear once, in `privileges`.
|
|
20
|
-
*/
|
|
21
|
-
export declare function shapeRoleList(roles: unknown[]): {
|
|
22
|
-
roles: Array<Record<string, unknown>>;
|
|
23
|
-
privileges: Record<string, string>;
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=shape.d.ts.map
|
package/dist/shape.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,eAAO,MAAM,6BAA6B,UAA+C,CAAC;AAE1F,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAU3C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAYvC;AAOD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG;IAC/C,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAkBA"}
|
package/dist/shape.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* TBP-709 (D) — what `bridge … list` shows, minus the platform's internals.
|
|
3
|
-
*
|
|
4
|
-
* The REST DTOs these come from also serve the dashboards and the SDKs, so
|
|
5
|
-
* they are left alone; the trimming happens at the presentation layer.
|
|
6
|
-
* Port of bridge-api's MCP `shape.ts` (same functions, same tests) so the
|
|
7
|
-
* CLI lists and the MCP lists cannot drift. Every function is pure and leaves
|
|
8
|
-
* its input untouched.
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Tenant metadata keys the platform writes for its own conversion-pixel
|
|
12
|
-
* bookkeeping (tracking.service.ts, tenant.service.ts). Never app data.
|
|
13
|
-
*/
|
|
14
|
-
export const INTERNAL_TENANT_METADATA_KEYS = ['pendingPixelEvents', 'conversionTracking'];
|
|
15
|
-
/** A tenant without the platform's pixel bookkeeping in `metadata`. */
|
|
16
|
-
export function shapeTenant(tenant) {
|
|
17
|
-
if (!tenant || typeof tenant !== 'object')
|
|
18
|
-
return tenant;
|
|
19
|
-
const metadata = tenant.metadata;
|
|
20
|
-
if (!metadata || typeof metadata !== 'object')
|
|
21
|
-
return tenant;
|
|
22
|
-
const kept = Object.fromEntries(Object.entries(metadata).filter(([k]) => !INTERNAL_TENANT_METADATA_KEYS.includes(k)));
|
|
23
|
-
return { ...tenant, metadata: kept };
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* A plan without the payment provider's ids: each quota's `providerRefs`
|
|
27
|
-
* (Stripe price and meter ids) is dropped. Prices and quotas otherwise stay
|
|
28
|
-
* whole — `create_plan` and friends still return the full plan.
|
|
29
|
-
*/
|
|
30
|
-
export function shapePlan(plan) {
|
|
31
|
-
if (!plan || typeof plan !== 'object')
|
|
32
|
-
return plan;
|
|
33
|
-
const quotas = plan.quotas;
|
|
34
|
-
if (!Array.isArray(quotas))
|
|
35
|
-
return plan;
|
|
36
|
-
return {
|
|
37
|
-
...plan,
|
|
38
|
-
quotas: quotas.map((q) => {
|
|
39
|
-
if (!q || typeof q !== 'object')
|
|
40
|
-
return q;
|
|
41
|
-
const { providerRefs: _drop, ...rest } = q;
|
|
42
|
-
return rest;
|
|
43
|
-
}),
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Roles with each privilege named once. Every role used to carry the full
|
|
48
|
-
* privilege object (id, key, description) for every privilege it grants, so a
|
|
49
|
-
* five-role app repeated the same descriptions five times. Now each role lists
|
|
50
|
-
* privilege KEYS — what code and create_role/update_role take — and the
|
|
51
|
-
* descriptions appear once, in `privileges`.
|
|
52
|
-
*/
|
|
53
|
-
export function shapeRoleList(roles) {
|
|
54
|
-
const privileges = {};
|
|
55
|
-
const shaped = (roles ?? []).map((role) => {
|
|
56
|
-
const r = (role ?? {});
|
|
57
|
-
const granted = Array.isArray(r.privileges) ? r.privileges : [];
|
|
58
|
-
const keys = [];
|
|
59
|
-
for (const p of granted) {
|
|
60
|
-
if (typeof p === 'string') {
|
|
61
|
-
keys.push(p);
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
if (!p || typeof p.key !== 'string')
|
|
65
|
-
continue;
|
|
66
|
-
keys.push(p.key);
|
|
67
|
-
if (!(p.key in privileges))
|
|
68
|
-
privileges[p.key] = p.description ?? '';
|
|
69
|
-
}
|
|
70
|
-
return { ...r, privileges: keys };
|
|
71
|
-
});
|
|
72
|
-
return { roles: shaped, privileges };
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=shape.js.map
|
package/dist/shape.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shape.js","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AAE1F,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAI,MAAS;IACtC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IACzD,MAAM,QAAQ,GAAI,MAAiC,CAAC,QAAQ,CAAC;IAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAC7B,MAAM,CAAC,OAAO,CAAC,QAAmC,CAAC,CAAC,MAAM,CACxD,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpD,CACF,CAAC;IACF,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAO,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAI,IAAO;IAClC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,MAAM,GAAI,IAA6B,CAAC,MAAM,CAAC;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAA4B,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;KACE,CAAC;AACT,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgB;IAI5C,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,UAA4C,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,SAAS;YACX,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,SAAS;YAC9C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC;gBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC"}
|