@brainfile/cli 0.11.2 → 0.12.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/CHANGELOG.md +33 -0
- package/dist/cli.js +51 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive.d.ts +15 -2
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +351 -23
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/auth.d.ts +26 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +141 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +29 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +210 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/utils/auth-store.d.ts +69 -0
- package/dist/utils/auth-store.d.ts.map +1 -0
- package/dist/utils/auth-store.js +308 -0
- package/dist/utils/auth-store.js.map +1 -0
- package/dist/utils/config.d.ts +89 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +211 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/github-auth.d.ts +56 -0
- package/dist/utils/github-auth.d.ts.map +1 -0
- package/dist/utils/github-auth.js +341 -0
- package/dist/utils/github-auth.js.map +1 -0
- package/dist/utils/linear-auth.d.ts +59 -0
- package/dist/utils/linear-auth.d.ts.map +1 -0
- package/dist/utils/linear-auth.js +295 -0
- package/dist/utils/linear-auth.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,iBAiBjE;AAMD,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,iBA4BjE;AAMD,wBAAsB,iBAAiB,kBAoCtC;AAMD,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,iBAoCjF"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Authentication commands for Brainfile CLI
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* - brainfile auth github [--token <token>]
|
|
7
|
+
* - brainfile auth linear --token <token>
|
|
8
|
+
* - brainfile auth status
|
|
9
|
+
* - brainfile auth logout <provider>
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
*/
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.githubAuthCommand = githubAuthCommand;
|
|
18
|
+
exports.linearAuthCommand = linearAuthCommand;
|
|
19
|
+
exports.authStatusCommand = authStatusCommand;
|
|
20
|
+
exports.authLogoutCommand = authLogoutCommand;
|
|
21
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
22
|
+
const auth_store_1 = require("../utils/auth-store");
|
|
23
|
+
const github_auth_1 = require("../utils/github-auth");
|
|
24
|
+
const linear_auth_1 = require("../utils/linear-auth");
|
|
25
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
26
|
+
async function githubAuthCommand(options) {
|
|
27
|
+
try {
|
|
28
|
+
const result = await (0, github_auth_1.authenticateGitHub)({
|
|
29
|
+
token: options.token,
|
|
30
|
+
usePAT: !!options.token,
|
|
31
|
+
});
|
|
32
|
+
if (!result.success) {
|
|
33
|
+
console.log(chalk_1.default.red('✗') + ` Authentication failed: ${result.error}`);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
console.log('');
|
|
37
|
+
console.log(chalk_1.default.green('GitHub authentication complete!'));
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
(0, errorHandler_1.handleError)(error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function linearAuthCommand(options) {
|
|
44
|
+
try {
|
|
45
|
+
if (!options.token) {
|
|
46
|
+
console.log('');
|
|
47
|
+
console.log('Linear authentication requires an API key.');
|
|
48
|
+
console.log('');
|
|
49
|
+
console.log(`Get your API key from: ${chalk_1.default.underline('https://linear.app/settings/api')}`);
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log('Then run:');
|
|
52
|
+
console.log(chalk_1.default.cyan(' brainfile auth linear --token <your-api-key>'));
|
|
53
|
+
console.log('');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const result = await (0, linear_auth_1.authenticateLinear)({
|
|
57
|
+
token: options.token,
|
|
58
|
+
});
|
|
59
|
+
if (!result.success) {
|
|
60
|
+
console.log(chalk_1.default.red('✗') + ` Authentication failed: ${result.error}`);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
console.log('');
|
|
64
|
+
console.log(chalk_1.default.green('Linear authentication complete!'));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
(0, errorHandler_1.handleError)(error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Status Command
|
|
72
|
+
// ============================================================================
|
|
73
|
+
async function authStatusCommand() {
|
|
74
|
+
try {
|
|
75
|
+
const status = await auth_store_1.authStore.getStatus();
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log(chalk_1.default.bold('Authentication Status'));
|
|
78
|
+
console.log('');
|
|
79
|
+
// GitHub
|
|
80
|
+
if (status.github.authenticated) {
|
|
81
|
+
const source = status.github.source;
|
|
82
|
+
const username = status.github.username ? ` as ${chalk_1.default.cyan('@' + status.github.username)}` : '';
|
|
83
|
+
console.log(chalk_1.default.green('✓') +
|
|
84
|
+
` GitHub: authenticated${username} ${chalk_1.default.gray(`(${source})`)}`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log(chalk_1.default.red('✗') + ' GitHub: not configured');
|
|
88
|
+
}
|
|
89
|
+
// Linear
|
|
90
|
+
if (status.linear.authenticated) {
|
|
91
|
+
const source = status.linear.source;
|
|
92
|
+
const username = status.linear.username ? ` as ${chalk_1.default.cyan(status.linear.username)}` : '';
|
|
93
|
+
console.log(chalk_1.default.green('✓') +
|
|
94
|
+
` Linear: authenticated${username} ${chalk_1.default.gray(`(${source})`)}`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.log(chalk_1.default.red('✗') + ' Linear: not configured');
|
|
98
|
+
}
|
|
99
|
+
console.log('');
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
(0, errorHandler_1.handleError)(error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function authLogoutCommand(provider, options) {
|
|
106
|
+
try {
|
|
107
|
+
if (options?.all || provider === 'all') {
|
|
108
|
+
await (0, github_auth_1.logoutGitHub)();
|
|
109
|
+
await (0, linear_auth_1.logoutLinear)();
|
|
110
|
+
console.log(chalk_1.default.green('✓') + ' Logged out from all providers');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (!provider) {
|
|
114
|
+
console.log('');
|
|
115
|
+
console.log('Usage:');
|
|
116
|
+
console.log(' brainfile auth logout github');
|
|
117
|
+
console.log(' brainfile auth logout linear');
|
|
118
|
+
console.log(' brainfile auth logout --all');
|
|
119
|
+
console.log('');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
switch (provider.toLowerCase()) {
|
|
123
|
+
case 'github':
|
|
124
|
+
await (0, github_auth_1.logoutGitHub)();
|
|
125
|
+
console.log(chalk_1.default.green('✓') + ' Logged out from GitHub');
|
|
126
|
+
break;
|
|
127
|
+
case 'linear':
|
|
128
|
+
await (0, linear_auth_1.logoutLinear)();
|
|
129
|
+
console.log(chalk_1.default.green('✓') + ' Logged out from Linear');
|
|
130
|
+
break;
|
|
131
|
+
default:
|
|
132
|
+
console.log(chalk_1.default.red('✗') + ` Unknown provider: ${provider}`);
|
|
133
|
+
console.log('Valid providers: github, linear');
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
(0, errorHandler_1.handleError)(error);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config command for Brainfile CLI
|
|
3
|
+
*
|
|
4
|
+
* Manage user configuration stored in ~/.config/brainfile/config.json
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* brainfile config list # Show all config values
|
|
8
|
+
* brainfile config get <key> # Get a specific value
|
|
9
|
+
* brainfile config set <key> <value> # Set a value
|
|
10
|
+
* brainfile config path # Show config file path
|
|
11
|
+
*
|
|
12
|
+
* Keys use dot notation:
|
|
13
|
+
* archive.default - Default archive destination (local, github, linear)
|
|
14
|
+
* archive.github.owner - GitHub repository owner
|
|
15
|
+
* archive.github.repo - GitHub repository name
|
|
16
|
+
* archive.github.labels - Comma-separated labels for GitHub issues
|
|
17
|
+
* archive.linear.teamId - Linear team ID
|
|
18
|
+
* archive.linear.projectId - Linear project ID
|
|
19
|
+
*
|
|
20
|
+
* @packageDocumentation
|
|
21
|
+
*/
|
|
22
|
+
interface ConfigOptions {
|
|
23
|
+
key?: string;
|
|
24
|
+
value?: string;
|
|
25
|
+
}
|
|
26
|
+
type ConfigAction = 'list' | 'get' | 'set' | 'path';
|
|
27
|
+
export declare function configCommand(action: ConfigAction, options: ConfigOptions): void;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAcH,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAMpD,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,QAoCzE"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config command for Brainfile CLI
|
|
4
|
+
*
|
|
5
|
+
* Manage user configuration stored in ~/.config/brainfile/config.json
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* brainfile config list # Show all config values
|
|
9
|
+
* brainfile config get <key> # Get a specific value
|
|
10
|
+
* brainfile config set <key> <value> # Set a value
|
|
11
|
+
* brainfile config path # Show config file path
|
|
12
|
+
*
|
|
13
|
+
* Keys use dot notation:
|
|
14
|
+
* archive.default - Default archive destination (local, github, linear)
|
|
15
|
+
* archive.github.owner - GitHub repository owner
|
|
16
|
+
* archive.github.repo - GitHub repository name
|
|
17
|
+
* archive.github.labels - Comma-separated labels for GitHub issues
|
|
18
|
+
* archive.linear.teamId - Linear team ID
|
|
19
|
+
* archive.linear.projectId - Linear project ID
|
|
20
|
+
*
|
|
21
|
+
* @packageDocumentation
|
|
22
|
+
*/
|
|
23
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.configCommand = configCommand;
|
|
28
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
29
|
+
const config_1 = require("../utils/config");
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Main Command
|
|
32
|
+
// ============================================================================
|
|
33
|
+
function configCommand(action, options) {
|
|
34
|
+
switch (action) {
|
|
35
|
+
case 'list':
|
|
36
|
+
listConfig();
|
|
37
|
+
break;
|
|
38
|
+
case 'get':
|
|
39
|
+
if (!options.key) {
|
|
40
|
+
console.log(chalk_1.default.red('Error:') + ' Missing key. Usage: brainfile config get <key>');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
getConfigValue(options.key);
|
|
44
|
+
break;
|
|
45
|
+
case 'set':
|
|
46
|
+
if (!options.key) {
|
|
47
|
+
console.log(chalk_1.default.red('Error:') + ' Missing key. Usage: brainfile config set <key> <value>');
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
if (options.value === undefined) {
|
|
51
|
+
console.log(chalk_1.default.red('Error:') + ' Missing value. Usage: brainfile config set <key> <value>');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
setConfigValue(options.key, options.value);
|
|
55
|
+
break;
|
|
56
|
+
case 'path':
|
|
57
|
+
showConfigPath();
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
console.log(chalk_1.default.red('Error:') + ` Unknown action: ${action}`);
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log('Available actions:');
|
|
63
|
+
console.log(' list Show all config values');
|
|
64
|
+
console.log(' get <key> Get a specific value');
|
|
65
|
+
console.log(' set <key> <value> Set a value');
|
|
66
|
+
console.log(' path Show config file path');
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Actions
|
|
72
|
+
// ============================================================================
|
|
73
|
+
function listConfig() {
|
|
74
|
+
const config = (0, config_1.loadConfig)();
|
|
75
|
+
if (Object.keys(config).length === 0) {
|
|
76
|
+
console.log(chalk_1.default.gray('No configuration set.'));
|
|
77
|
+
console.log('');
|
|
78
|
+
console.log('Use ' + chalk_1.default.cyan('brainfile config set <key> <value>') + ' to set values.');
|
|
79
|
+
console.log('');
|
|
80
|
+
showAvailableKeys();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
console.log(chalk_1.default.bold('Brainfile Configuration'));
|
|
84
|
+
console.log('');
|
|
85
|
+
const flattened = flattenConfig(config);
|
|
86
|
+
const maxKeyLen = Math.max(...Object.keys(flattened).map((k) => k.length));
|
|
87
|
+
for (const [key, value] of Object.entries(flattened)) {
|
|
88
|
+
const displayValue = Array.isArray(value) ? value.join(', ') : String(value);
|
|
89
|
+
console.log(` ${chalk_1.default.cyan(key.padEnd(maxKeyLen))} ${displayValue}`);
|
|
90
|
+
}
|
|
91
|
+
console.log('');
|
|
92
|
+
console.log(chalk_1.default.gray(`Config file: ${(0, config_1.getConfigPath)()}`));
|
|
93
|
+
}
|
|
94
|
+
function getConfigValue(key) {
|
|
95
|
+
const config = (0, config_1.loadConfig)();
|
|
96
|
+
const value = getNestedValue(config, key);
|
|
97
|
+
if (value === undefined) {
|
|
98
|
+
console.log(chalk_1.default.gray('(not set)'));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (Array.isArray(value)) {
|
|
102
|
+
console.log(value.join(', '));
|
|
103
|
+
}
|
|
104
|
+
else if (typeof value === 'object') {
|
|
105
|
+
console.log(JSON.stringify(value, null, 2));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log(String(value));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function setConfigValue(key, value) {
|
|
112
|
+
const config = (0, config_1.loadConfig)();
|
|
113
|
+
// Validate key
|
|
114
|
+
if (!isValidKey(key)) {
|
|
115
|
+
console.log(chalk_1.default.red('Error:') + ` Invalid key: ${key}`);
|
|
116
|
+
console.log('');
|
|
117
|
+
showAvailableKeys();
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
// Parse value based on key
|
|
121
|
+
const parsedValue = parseValue(key, value);
|
|
122
|
+
// Set the value
|
|
123
|
+
setNestedValue(config, key, parsedValue);
|
|
124
|
+
(0, config_1.saveConfig)(config);
|
|
125
|
+
console.log(chalk_1.default.green('') + ` Set ${chalk_1.default.cyan(key)} = ${formatValue(parsedValue)}`);
|
|
126
|
+
}
|
|
127
|
+
function showConfigPath() {
|
|
128
|
+
console.log((0, config_1.getConfigPath)());
|
|
129
|
+
}
|
|
130
|
+
// ============================================================================
|
|
131
|
+
// Helpers
|
|
132
|
+
// ============================================================================
|
|
133
|
+
const VALID_KEYS = [
|
|
134
|
+
'archive.default',
|
|
135
|
+
'archive.github.owner',
|
|
136
|
+
'archive.github.repo',
|
|
137
|
+
'archive.github.labels',
|
|
138
|
+
'archive.linear.teamId',
|
|
139
|
+
'archive.linear.projectId',
|
|
140
|
+
];
|
|
141
|
+
function isValidKey(key) {
|
|
142
|
+
return VALID_KEYS.includes(key);
|
|
143
|
+
}
|
|
144
|
+
function showAvailableKeys() {
|
|
145
|
+
console.log('Available keys:');
|
|
146
|
+
console.log(' ' + chalk_1.default.cyan('archive.default') + ' Default archive destination (local, github, linear)');
|
|
147
|
+
console.log(' ' + chalk_1.default.cyan('archive.github.owner') + ' GitHub repository owner');
|
|
148
|
+
console.log(' ' + chalk_1.default.cyan('archive.github.repo') + ' GitHub repository name');
|
|
149
|
+
console.log(' ' + chalk_1.default.cyan('archive.github.labels') + ' Comma-separated labels for GitHub issues');
|
|
150
|
+
console.log(' ' + chalk_1.default.cyan('archive.linear.teamId') + ' Linear team ID');
|
|
151
|
+
console.log(' ' + chalk_1.default.cyan('archive.linear.projectId') + ' Linear project ID');
|
|
152
|
+
}
|
|
153
|
+
function parseValue(key, value) {
|
|
154
|
+
// Handle array values (labels)
|
|
155
|
+
if (key === 'archive.github.labels') {
|
|
156
|
+
return value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
157
|
+
}
|
|
158
|
+
// Validate archive.default
|
|
159
|
+
if (key === 'archive.default') {
|
|
160
|
+
const valid = ['local', 'github', 'linear'];
|
|
161
|
+
if (!valid.includes(value)) {
|
|
162
|
+
console.log(chalk_1.default.red('Error:') + ` Invalid value for archive.default. Must be one of: ${valid.join(', ')}`);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return value;
|
|
167
|
+
}
|
|
168
|
+
function formatValue(value) {
|
|
169
|
+
if (Array.isArray(value)) {
|
|
170
|
+
return value.join(', ');
|
|
171
|
+
}
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
function getNestedValue(obj, path) {
|
|
175
|
+
const parts = path.split('.');
|
|
176
|
+
let current = obj;
|
|
177
|
+
for (const part of parts) {
|
|
178
|
+
if (current === undefined || current === null) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
current = current[part];
|
|
182
|
+
}
|
|
183
|
+
return current;
|
|
184
|
+
}
|
|
185
|
+
function setNestedValue(obj, path, value) {
|
|
186
|
+
const parts = path.split('.');
|
|
187
|
+
let current = obj;
|
|
188
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
189
|
+
const part = parts[i];
|
|
190
|
+
if (current[part] === undefined) {
|
|
191
|
+
current[part] = {};
|
|
192
|
+
}
|
|
193
|
+
current = current[part];
|
|
194
|
+
}
|
|
195
|
+
current[parts[parts.length - 1]] = value;
|
|
196
|
+
}
|
|
197
|
+
function flattenConfig(obj, prefix = '') {
|
|
198
|
+
const result = {};
|
|
199
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
200
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
201
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
202
|
+
Object.assign(result, flattenConfig(value, fullKey));
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
result[fullKey] = value;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;AAyBH,sCAoCC;AA3DD,kDAA0B;AAC1B,4CAKyB;AAazB,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,SAAgB,aAAa,CAAC,MAAoB,EAAE,OAAsB;IACxE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,UAAU,EAAE,CAAC;YACb,MAAM;QACR,KAAK,KAAK;YACR,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,iDAAiD,CAAC,CAAC;gBACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM;QACR,KAAK,KAAK;YACR,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,yDAAyD,CAAC,CAAC;gBAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,2DAA2D,CAAC,CAAC;gBAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM;QACR,KAAK,MAAM;YACT,cAAc,EAAE,CAAC;YACjB,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,oBAAoB,MAAM,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,UAAU;IACjB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE5B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,GAAG,iBAAiB,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,iBAAiB,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,IAAA,sBAAa,GAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,KAAa;IAChD,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE5B,eAAe;IACf,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,iBAAiB,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE3C,gBAAgB;IAChB,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IACzC,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,QAAQ,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,GAAG,CAAC,IAAA,sBAAa,GAAE,CAAC,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,UAAU,GAAG;IACjB,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;IACrB,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;CAC3B,CAAC;AAEF,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,+DAA+D,CAAC,CAAC;IACpH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,8BAA8B,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,8BAA8B,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,8CAA8C,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,oBAAoB,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAa;IAC5C,+BAA+B;IAC/B,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,2BAA2B;IAC3B,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,uDAAuD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAwB;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAwB,EAAE,IAAY;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC;IAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,GAAwB,EAAE,IAAY,EAAE,KAAU;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,GAAwB,EAAE,MAAM,GAAG,EAAE;IAC1D,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAElD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication token storage for Brainfile CLI
|
|
3
|
+
*
|
|
4
|
+
* Stores tokens with the following priority:
|
|
5
|
+
* 1. System keychain (via keytar, if available)
|
|
6
|
+
* 2. Config file (~/.config/brainfile/auth.json)
|
|
7
|
+
* 3. Environment variables (read-only)
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
export type AuthProvider = 'github' | 'linear';
|
|
12
|
+
export interface StoredToken {
|
|
13
|
+
token: string;
|
|
14
|
+
savedAt: string;
|
|
15
|
+
username?: string;
|
|
16
|
+
workspace?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Try to get GitHub token from gh CLI
|
|
20
|
+
* @returns Token from gh CLI, or null if not available
|
|
21
|
+
*/
|
|
22
|
+
export declare function getGitHubCLIToken(): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Check if gh CLI is installed and authenticated
|
|
25
|
+
*/
|
|
26
|
+
export declare function isGitHubCLIAvailable(): boolean;
|
|
27
|
+
export declare class AuthStore {
|
|
28
|
+
/**
|
|
29
|
+
* Get a token for a provider
|
|
30
|
+
* Checks: env vars → keychain → config file → gh CLI (for github)
|
|
31
|
+
*/
|
|
32
|
+
get(provider: AuthProvider): Promise<string | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Get stored token info (includes metadata like username)
|
|
35
|
+
*/
|
|
36
|
+
getTokenInfo(provider: AuthProvider): Promise<StoredToken | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Store a token for a provider
|
|
39
|
+
* Stores in: keychain (if available) AND config file (for metadata)
|
|
40
|
+
*/
|
|
41
|
+
set(provider: AuthProvider, token: string, metadata?: {
|
|
42
|
+
username?: string;
|
|
43
|
+
workspace?: string;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Clear a token for a provider
|
|
47
|
+
*/
|
|
48
|
+
clear(provider: AuthProvider): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a provider is authenticated
|
|
51
|
+
*/
|
|
52
|
+
isAuthenticated(provider: AuthProvider): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Get authentication status for all providers
|
|
55
|
+
*/
|
|
56
|
+
getStatus(): Promise<Record<AuthProvider, {
|
|
57
|
+
authenticated: boolean;
|
|
58
|
+
source?: string;
|
|
59
|
+
username?: string;
|
|
60
|
+
}>>;
|
|
61
|
+
private getFromEnv;
|
|
62
|
+
private loadAuthFile;
|
|
63
|
+
private saveAuthFile;
|
|
64
|
+
private getFromFile;
|
|
65
|
+
private saveToFile;
|
|
66
|
+
private removeFromFile;
|
|
67
|
+
}
|
|
68
|
+
export declare const authStore: AuthStore;
|
|
69
|
+
//# sourceMappingURL=auth-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../../src/utils/auth-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmDD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAejD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAMD,qBAAa,SAAS;IACpB;;;OAGG;IACG,GAAG,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkCzD;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMvE;;;OAGG;IACG,GAAG,CACP,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC;IAqBhB;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAelD;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAyDhH,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,cAAc;CAKvB;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|