@nebulr-group/bridge-cli 0.1.0-beta.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/README.md +202 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +6 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +33 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/app.command.d.ts +3 -0
- package/dist/commands/app.command.d.ts.map +1 -0
- package/dist/commands/app.command.js +59 -0
- package/dist/commands/app.command.js.map +1 -0
- package/dist/commands/auth.command.d.ts +3 -0
- package/dist/commands/auth.command.d.ts.map +1 -0
- package/dist/commands/auth.command.js +58 -0
- package/dist/commands/auth.command.js.map +1 -0
- package/dist/commands/branding.command.d.ts +3 -0
- package/dist/commands/branding.command.d.ts.map +1 -0
- package/dist/commands/branding.command.js +42 -0
- package/dist/commands/branding.command.js.map +1 -0
- package/dist/commands/event.command.d.ts +3 -0
- package/dist/commands/event.command.d.ts.map +1 -0
- package/dist/commands/event.command.js +27 -0
- package/dist/commands/event.command.js.map +1 -0
- package/dist/commands/flag.command.d.ts +3 -0
- package/dist/commands/flag.command.d.ts.map +1 -0
- package/dist/commands/flag.command.js +76 -0
- package/dist/commands/flag.command.js.map +1 -0
- package/dist/commands/guide.command.d.ts +3 -0
- package/dist/commands/guide.command.d.ts.map +1 -0
- package/dist/commands/guide.command.js +168 -0
- package/dist/commands/guide.command.js.map +1 -0
- package/dist/commands/info.command.d.ts +3 -0
- package/dist/commands/info.command.d.ts.map +1 -0
- package/dist/commands/info.command.js +70 -0
- package/dist/commands/info.command.js.map +1 -0
- package/dist/commands/integrate.command.d.ts +3 -0
- package/dist/commands/integrate.command.d.ts.map +1 -0
- package/dist/commands/integrate.command.js +49 -0
- package/dist/commands/integrate.command.js.map +1 -0
- package/dist/commands/plan.command.d.ts +3 -0
- package/dist/commands/plan.command.d.ts.map +1 -0
- package/dist/commands/plan.command.js +52 -0
- package/dist/commands/plan.command.js.map +1 -0
- package/dist/commands/role.command.d.ts +3 -0
- package/dist/commands/role.command.d.ts.map +1 -0
- package/dist/commands/role.command.js +65 -0
- package/dist/commands/role.command.js.map +1 -0
- package/dist/commands/setup.command.d.ts +3 -0
- package/dist/commands/setup.command.d.ts.map +1 -0
- package/dist/commands/setup.command.js +65 -0
- package/dist/commands/setup.command.js.map +1 -0
- package/dist/commands/tenant.command.d.ts +3 -0
- package/dist/commands/tenant.command.d.ts.map +1 -0
- package/dist/commands/tenant.command.js +74 -0
- package/dist/commands/tenant.command.js.map +1 -0
- package/dist/commands/token.command.d.ts +3 -0
- package/dist/commands/token.command.d.ts.map +1 -0
- package/dist/commands/token.command.js +45 -0
- package/dist/commands/token.command.js.map +1 -0
- package/dist/commands/user.command.d.ts +3 -0
- package/dist/commands/user.command.d.ts.map +1 -0
- package/dist/commands/user.command.js +83 -0
- package/dist/commands/user.command.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +30 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +3 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +34 -0
- package/dist/output.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.command.d.ts","sourceRoot":"","sources":["../../src/commands/token.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC5D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { getManagementClient } from '../config.js';
|
|
2
|
+
import { outputSuccess, outputError } from '../output.js';
|
|
3
|
+
export function registerTokenCommands(program) {
|
|
4
|
+
const token = program.command('token').description('Manage API tokens');
|
|
5
|
+
token.command('list')
|
|
6
|
+
.description('List all API tokens')
|
|
7
|
+
.action(async () => {
|
|
8
|
+
try {
|
|
9
|
+
outputSuccess(await getManagementClient().tokens.list());
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
outputError(err);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
token.command('create')
|
|
16
|
+
.description('Create a new API token')
|
|
17
|
+
.requiredOption('--name <name>', 'Token name')
|
|
18
|
+
.option('--privileges <list>', 'Comma-separated privilege keys', (v) => v.split(','))
|
|
19
|
+
.option('--expire-at <date>', 'Expiration date (ISO format)')
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
try {
|
|
22
|
+
outputSuccess(await getManagementClient().tokens.create({
|
|
23
|
+
name: opts.name,
|
|
24
|
+
privileges: opts.privileges ?? [],
|
|
25
|
+
expireAt: opts.expireAt,
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
outputError(err);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
token.command('revoke')
|
|
33
|
+
.description('Revoke an API token')
|
|
34
|
+
.requiredOption('--id <id>', 'Token ID')
|
|
35
|
+
.action(async (opts) => {
|
|
36
|
+
try {
|
|
37
|
+
await getManagementClient().tokens.revoke(opts.id);
|
|
38
|
+
outputSuccess({ revoked: true, id: opts.id });
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
outputError(err);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=token.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.command.js","sourceRoot":"","sources":["../../src/commands/token.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAExE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;SAClB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YAAC,aAAa,CAAC,MAAM,mBAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QACjE,OAAO,GAAG,EAAE,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;SAC7C,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACpF,MAAM,CAAC,oBAAoB,EAAE,8BAA8B,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,aAAa,CAAC,MAAM,mBAAmB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,qBAAqB,CAAC;SAClC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,mBAAmB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnD,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.command.d.ts","sourceRoot":"","sources":["../../src/commands/user.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE3D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { getManagementClient, resolveTenantId } from '../config.js';
|
|
2
|
+
import { outputSuccess, outputError } from '../output.js';
|
|
3
|
+
export function registerUserCommands(program) {
|
|
4
|
+
const user = program.command('user').description('Manage tenant users');
|
|
5
|
+
user.command('list')
|
|
6
|
+
.description('List users in a tenant')
|
|
7
|
+
.option('--tenant-id <id>', 'Tenant ID (or set BRIDGE_TENANT_ID)')
|
|
8
|
+
.action(async (opts) => {
|
|
9
|
+
try {
|
|
10
|
+
const tenantId = resolveTenantId(opts);
|
|
11
|
+
outputSuccess(await getManagementClient().users.list(tenantId));
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
outputError(err);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
user.command('get')
|
|
18
|
+
.description('Get user details')
|
|
19
|
+
.requiredOption('--user-id <id>', 'User ID')
|
|
20
|
+
.option('--tenant-id <id>', 'Tenant ID (or set BRIDGE_TENANT_ID)')
|
|
21
|
+
.action(async (opts) => {
|
|
22
|
+
try {
|
|
23
|
+
const tenantId = resolveTenantId(opts);
|
|
24
|
+
outputSuccess(await getManagementClient().users.get(tenantId, opts.userId));
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
outputError(err);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
user.command('invite')
|
|
31
|
+
.description('Invite a user to a tenant')
|
|
32
|
+
.requiredOption('--email <email>', 'User email')
|
|
33
|
+
.option('--role <role>', 'Role key')
|
|
34
|
+
.option('--first-name <name>', 'First name')
|
|
35
|
+
.option('--last-name <name>', 'Last name')
|
|
36
|
+
.option('--tenant-id <id>', 'Tenant ID (or set BRIDGE_TENANT_ID)')
|
|
37
|
+
.action(async (opts) => {
|
|
38
|
+
try {
|
|
39
|
+
const tenantId = resolveTenantId(opts);
|
|
40
|
+
outputSuccess(await getManagementClient().users.invite(tenantId, {
|
|
41
|
+
username: opts.email,
|
|
42
|
+
role: opts.role,
|
|
43
|
+
firstName: opts.firstName,
|
|
44
|
+
lastName: opts.lastName,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
outputError(err);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
user.command('update')
|
|
52
|
+
.description('Update a user')
|
|
53
|
+
.requiredOption('--user-id <id>', 'User ID')
|
|
54
|
+
.option('--role <role>', 'Role key')
|
|
55
|
+
.option('--enabled <bool>', 'Enable/disable user', (v) => v === 'true')
|
|
56
|
+
.option('--tenant-id <id>', 'Tenant ID (or set BRIDGE_TENANT_ID)')
|
|
57
|
+
.action(async (opts) => {
|
|
58
|
+
try {
|
|
59
|
+
const tenantId = resolveTenantId(opts);
|
|
60
|
+
const data = Object.fromEntries(Object.entries({ role: opts.role, enabled: opts.enabled })
|
|
61
|
+
.filter(([, v]) => v !== undefined));
|
|
62
|
+
outputSuccess(await getManagementClient().users.update(tenantId, opts.userId, data));
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
outputError(err);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
user.command('remove')
|
|
69
|
+
.description('Remove a user from a tenant')
|
|
70
|
+
.requiredOption('--user-id <id>', 'User ID')
|
|
71
|
+
.option('--tenant-id <id>', 'Tenant ID (or set BRIDGE_TENANT_ID)')
|
|
72
|
+
.action(async (opts) => {
|
|
73
|
+
try {
|
|
74
|
+
const tenantId = resolveTenantId(opts);
|
|
75
|
+
await getManagementClient().users.remove(tenantId, opts.userId);
|
|
76
|
+
outputSuccess({ removed: true, userId: opts.userId });
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
outputError(err);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=user.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.command.js","sourceRoot":"","sources":["../../src/commands/user.command.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BridgeManagement } from '@nebulr-group/bridge-auth-core';
|
|
2
|
+
export declare function getManagementClient(): BridgeManagement;
|
|
3
|
+
export declare function resolveTenantId(opts: {
|
|
4
|
+
tenantId?: string;
|
|
5
|
+
}): string;
|
|
6
|
+
export declare class ConfigError extends Error {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIlE,wBAAgB,mBAAmB,IAAI,gBAAgB,CAetD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQnE;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BridgeManagement } from '@nebulr-group/bridge-auth-core';
|
|
2
|
+
let _client = null;
|
|
3
|
+
export function getManagementClient() {
|
|
4
|
+
if (_client)
|
|
5
|
+
return _client;
|
|
6
|
+
const apiKey = process.env.BRIDGE_API_KEY;
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
throw new ConfigError('BRIDGE_API_KEY environment variable is required.');
|
|
9
|
+
}
|
|
10
|
+
_client = new BridgeManagement({
|
|
11
|
+
apiKey,
|
|
12
|
+
baseUrl: process.env.BRIDGE_BASE_URL || undefined,
|
|
13
|
+
debug: process.env.BRIDGE_DEBUG === 'true',
|
|
14
|
+
});
|
|
15
|
+
return _client;
|
|
16
|
+
}
|
|
17
|
+
export function resolveTenantId(opts) {
|
|
18
|
+
const tenantId = opts.tenantId || process.env.BRIDGE_TENANT_ID;
|
|
19
|
+
if (!tenantId) {
|
|
20
|
+
throw new ConfigError('Tenant context required. Set BRIDGE_TENANT_ID environment variable or use --tenant-id flag.');
|
|
21
|
+
}
|
|
22
|
+
return tenantId;
|
|
23
|
+
}
|
|
24
|
+
export class ConfigError extends Error {
|
|
25
|
+
constructor(message) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = 'ConfigError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,IAAI,OAAO,GAA4B,IAAI,CAAC;AAE5C,MAAM,UAAU,mBAAmB;IACjC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,WAAW,CAAC,kDAAkD,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,GAAG,IAAI,gBAAgB,CAAC;QAC7B,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS;QACjD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM;KAC3C,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAA2B;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,WAAW,CACnB,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAGjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA2BhD"}
|
package/dist/output.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { HttpError } from '@nebulr-group/bridge-auth-core';
|
|
2
|
+
import { ConfigError } from './config.js';
|
|
3
|
+
export function outputSuccess(data) {
|
|
4
|
+
const output = { success: true, data };
|
|
5
|
+
process.stdout.write(JSON.stringify(output, null, 2) + '\n');
|
|
6
|
+
}
|
|
7
|
+
export function outputError(error) {
|
|
8
|
+
let code = 'UNKNOWN_ERROR';
|
|
9
|
+
let message = 'An unknown error occurred';
|
|
10
|
+
let details = undefined;
|
|
11
|
+
let exitCode = 1;
|
|
12
|
+
if (error instanceof ConfigError) {
|
|
13
|
+
code = 'CONFIG_ERROR';
|
|
14
|
+
message = error.message;
|
|
15
|
+
exitCode = 3;
|
|
16
|
+
}
|
|
17
|
+
else if (error instanceof HttpError) {
|
|
18
|
+
code = `HTTP_${error.status}`;
|
|
19
|
+
message = error.message;
|
|
20
|
+
details = error.body;
|
|
21
|
+
exitCode = error.status >= 500 ? 2 : 1;
|
|
22
|
+
// Extract nblocksCode if present
|
|
23
|
+
if (typeof error.body === 'object' && error.body && 'nblocksCode' in error.body) {
|
|
24
|
+
code = error.body.nblocksCode;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else if (error instanceof Error) {
|
|
28
|
+
message = error.message;
|
|
29
|
+
}
|
|
30
|
+
const output = { success: false, error: { code, message, ...(details !== undefined ? { details } : {}) } };
|
|
31
|
+
process.stderr.write(JSON.stringify(output, null, 2) + '\n');
|
|
32
|
+
process.exitCode = exitCode;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,IAAI,GAAG,eAAe,CAAC;IAC3B,IAAI,OAAO,GAAG,2BAA2B,CAAC;IAC1C,IAAI,OAAO,GAAY,SAAS,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,IAAI,GAAG,cAAc,CAAC;QACtB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACxB,QAAQ,GAAG,CAAC,CAAC;IACf,CAAC;SAAM,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QACtC,IAAI,GAAG,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACxB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QACrB,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvC,iCAAiC;QACjC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,aAAa,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAChF,IAAI,GAAI,KAAK,CAAC,IAA+B,CAAC,WAAW,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAC3G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC9B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nebulr-group/bridge-cli",
|
|
3
|
+
"version": "0.1.0-beta.0",
|
|
4
|
+
"description": "Bridge platform CLI for AI coding agents and developers",
|
|
5
|
+
"author": "Nebulr Group",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"bridge": "dist/bin.js"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"test": "jest --passWithNoTests",
|
|
22
|
+
"test:coverage": "jest --coverage",
|
|
23
|
+
"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"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@nebulr-group/bridge-auth-core": "^0.1.0-beta.0",
|
|
27
|
+
"commander": "^12.0.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/jest": "^29.5.14",
|
|
31
|
+
"@types/node": "^22.10.7",
|
|
32
|
+
"jest": "^29.7.0",
|
|
33
|
+
"ts-jest": "^29.4.6",
|
|
34
|
+
"typescript": "^5.7.3"
|
|
35
|
+
},
|
|
36
|
+
"keywords": [
|
|
37
|
+
"bridge",
|
|
38
|
+
"cli",
|
|
39
|
+
"ai-agent",
|
|
40
|
+
"management",
|
|
41
|
+
"auth",
|
|
42
|
+
"feature-flags"
|
|
43
|
+
],
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "https://github.com/thebridgedev/bridge-cli"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://thebridge.dev"
|
|
49
|
+
}
|