borgmcp 0.7.2 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth.js +7 -7
- package/dist/auth.js.map +1 -1
- package/dist/config.d.ts +12 -14
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +68 -23
- package/dist/config.js.map +1 -1
- package/package.json +2 -2
package/dist/auth.js
CHANGED
|
@@ -161,8 +161,8 @@ async function exchangeCodeForTokens(code, codeVerifier, port) {
|
|
|
161
161
|
* Stores tokens in OS keychain on success
|
|
162
162
|
*/
|
|
163
163
|
export async function authenticateWithGoogle() {
|
|
164
|
-
console.error('
|
|
165
|
-
console.error('
|
|
164
|
+
console.error('\n◼ Borg MCP Authentication');
|
|
165
|
+
console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
|
|
166
166
|
// Step 1: Generate PKCE pair
|
|
167
167
|
console.error('Generating PKCE challenge...');
|
|
168
168
|
const pkce = generatePKCE();
|
|
@@ -181,9 +181,9 @@ export async function authenticateWithGoogle() {
|
|
|
181
181
|
authUrl.searchParams.set('access_type', 'offline'); // Request refresh token
|
|
182
182
|
authUrl.searchParams.set('prompt', 'consent'); // Force consent to get refresh token
|
|
183
183
|
// Step 4: Open browser
|
|
184
|
-
console.error('
|
|
184
|
+
console.error('\n📱 Opening browser for authorization...');
|
|
185
185
|
console.error('If browser does not open, visit:');
|
|
186
|
-
console.error(`${authUrl.toString()}
|
|
186
|
+
console.error(`${authUrl.toString()}\n`);
|
|
187
187
|
await open(authUrl.toString());
|
|
188
188
|
// Step 5: Wait for authorization code
|
|
189
189
|
console.error('Waiting for authorization...');
|
|
@@ -203,15 +203,15 @@ export async function authenticateWithGoogle() {
|
|
|
203
203
|
// sometimes dedupes consent and skips the refresh_token even when
|
|
204
204
|
// prompt=consent is set. Surface this so the user can revoke and
|
|
205
205
|
// reconsent if they want durable sessions.
|
|
206
|
-
console.error('
|
|
206
|
+
console.error('\n⚠ No refresh_token returned by Google.');
|
|
207
207
|
console.error(' Your session will expire after ~1 hour and require');
|
|
208
208
|
console.error(' re-running `borg setup`. To enable auto-refresh:');
|
|
209
209
|
console.error(' 1. Visit https://myaccount.google.com/permissions');
|
|
210
210
|
console.error(' 2. Find "Borg MCP" and click "Remove access"');
|
|
211
211
|
console.error(' 3. Re-run `borg setup`');
|
|
212
|
-
console.error(' (Google will then issue a fresh refresh_token.)
|
|
212
|
+
console.error(' (Google will then issue a fresh refresh_token.)\n');
|
|
213
213
|
}
|
|
214
|
-
console.error('
|
|
214
|
+
console.error('\n◼ Authentication successful!\n');
|
|
215
215
|
}
|
|
216
216
|
/**
|
|
217
217
|
* Refresh ID token using refresh token
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,33 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Uses Keytar for cross-platform credential management
|
|
4
|
-
*
|
|
5
|
-
* Addresses consensus finding: Machine-specific encryption is insecure
|
|
6
|
-
* Solution: Use OS native keychains (macOS Keychain, Windows Credential Manager, Linux Secret Service)
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Store Google OAuth ID token securely in OS keychain
|
|
2
|
+
* Store Google OAuth ID token securely in the OS keychain.
|
|
10
3
|
*/
|
|
11
4
|
export declare function storeIdToken(idToken: string, expiresAt: number): Promise<void>;
|
|
12
5
|
/**
|
|
13
|
-
* Store Google OAuth refresh token securely in OS keychain
|
|
6
|
+
* Store Google OAuth refresh token securely in the OS keychain.
|
|
14
7
|
*/
|
|
15
8
|
export declare function storeRefreshToken(refreshToken: string): Promise<void>;
|
|
16
9
|
/**
|
|
17
|
-
* Retrieve Google OAuth ID token from OS keychain
|
|
18
|
-
* Returns null if not
|
|
10
|
+
* Retrieve the Google OAuth ID token from the OS keychain.
|
|
11
|
+
* Returns null if not stored or expired (5-minute buffer).
|
|
12
|
+
*
|
|
13
|
+
* `getPassword` on a missing entry returns null/undefined depending
|
|
14
|
+
* on platform binding; normalize with `?? null` so the caller
|
|
15
|
+
* contract (`string | null`) is platform-stable.
|
|
19
16
|
*/
|
|
20
17
|
export declare function getIdToken(): Promise<string | null>;
|
|
21
18
|
/**
|
|
22
|
-
* Retrieve Google OAuth refresh token from OS keychain
|
|
19
|
+
* Retrieve the Google OAuth refresh token from the OS keychain.
|
|
23
20
|
*/
|
|
24
21
|
export declare function getRefreshToken(): Promise<string | null>;
|
|
25
22
|
/**
|
|
26
|
-
* Clear all stored tokens from OS keychain
|
|
23
|
+
* Clear all stored tokens from the OS keychain. Idempotent — calling
|
|
24
|
+
* on an already-empty keychain is a no-op (NoEntry errors absorbed).
|
|
27
25
|
*/
|
|
28
26
|
export declare function clearTokens(): Promise<void>;
|
|
29
27
|
/**
|
|
30
|
-
* Check if user has valid authentication
|
|
28
|
+
* Check if user has valid authentication.
|
|
31
29
|
*/
|
|
32
30
|
export declare function isAuthenticated(): Promise<boolean>;
|
|
33
31
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAuDA;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBzD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE9D;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAGxD"}
|
package/dist/config.js
CHANGED
|
@@ -1,62 +1,107 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Secure token storage using OS keychain
|
|
3
|
-
* Uses Keytar for cross-platform credential management
|
|
2
|
+
* Secure token storage using OS keychain.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Uses @napi-rs/keyring (NAPI-RS binding over the Rust `keyring-rs`
|
|
5
|
+
* crate) for cross-platform credential storage:
|
|
6
|
+
* - macOS: Keychain Services
|
|
7
|
+
* - Windows: Credential Vault (Credential Manager)
|
|
8
|
+
* - Linux: Secret Service (libsecret / gnome-keyring)
|
|
9
|
+
*
|
|
10
|
+
* Migrated from `keytar` in 0.7.2 (gh#22). Same encryption-at-rest
|
|
11
|
+
* shape as keytar (delegates to the platform's native keychain
|
|
12
|
+
* service); eliminates the maintenance-orphaned keytar + prebuild-
|
|
13
|
+
* install dependency chain.
|
|
14
|
+
*
|
|
15
|
+
* `AsyncEntry` is used (over the sync `Entry` class) so the public
|
|
16
|
+
* API surface — every function below is `async` — stays identical
|
|
17
|
+
* to the pre-migration shape. No call sites needed to change.
|
|
7
18
|
*/
|
|
8
|
-
import
|
|
19
|
+
import { AsyncEntry } from '@napi-rs/keyring';
|
|
9
20
|
const SERVICE_NAME = 'borg-mcp';
|
|
10
21
|
const ID_TOKEN_ACCOUNT = 'google-id-token';
|
|
11
22
|
const REFRESH_TOKEN_ACCOUNT = 'google-refresh-token';
|
|
12
23
|
const TOKEN_EXPIRY_ACCOUNT = 'token-expiry';
|
|
13
24
|
/**
|
|
14
|
-
*
|
|
25
|
+
* Build an AsyncEntry bound to the borg-mcp service + given account.
|
|
26
|
+
* One per call site rather than module-level singletons so the
|
|
27
|
+
* underlying Rust handle isn't held longer than necessary.
|
|
28
|
+
*/
|
|
29
|
+
function entry(account) {
|
|
30
|
+
return new AsyncEntry(SERVICE_NAME, account);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* `@napi-rs/keyring`'s `deletePassword` returns a `NoEntry` error
|
|
34
|
+
* when the entry doesn't exist. `keytar.deletePassword` returned
|
|
35
|
+
* `false` silently in the same case. We preserve the silent-on-
|
|
36
|
+
* missing semantic so `clearTokens()` stays idempotent across
|
|
37
|
+
* repeat calls.
|
|
38
|
+
*
|
|
39
|
+
* Other errors (platform unavailable, ambiguous credential, etc.)
|
|
40
|
+
* propagate — fail-loud is correct for those classes.
|
|
41
|
+
*/
|
|
42
|
+
async function deleteIfExists(account) {
|
|
43
|
+
try {
|
|
44
|
+
await entry(account).deletePassword();
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const msg = String(err?.message ?? '');
|
|
48
|
+
if (/no entry|not found/i.test(msg))
|
|
49
|
+
return;
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Store Google OAuth ID token securely in the OS keychain.
|
|
15
55
|
*/
|
|
16
56
|
export async function storeIdToken(idToken, expiresAt) {
|
|
17
|
-
await
|
|
18
|
-
await
|
|
57
|
+
await entry(ID_TOKEN_ACCOUNT).setPassword(idToken);
|
|
58
|
+
await entry(TOKEN_EXPIRY_ACCOUNT).setPassword(expiresAt.toString());
|
|
19
59
|
}
|
|
20
60
|
/**
|
|
21
|
-
* Store Google OAuth refresh token securely in OS keychain
|
|
61
|
+
* Store Google OAuth refresh token securely in the OS keychain.
|
|
22
62
|
*/
|
|
23
63
|
export async function storeRefreshToken(refreshToken) {
|
|
24
|
-
await
|
|
64
|
+
await entry(REFRESH_TOKEN_ACCOUNT).setPassword(refreshToken);
|
|
25
65
|
}
|
|
26
66
|
/**
|
|
27
|
-
* Retrieve Google OAuth ID token from OS keychain
|
|
28
|
-
* Returns null if not
|
|
67
|
+
* Retrieve the Google OAuth ID token from the OS keychain.
|
|
68
|
+
* Returns null if not stored or expired (5-minute buffer).
|
|
69
|
+
*
|
|
70
|
+
* `getPassword` on a missing entry returns null/undefined depending
|
|
71
|
+
* on platform binding; normalize with `?? null` so the caller
|
|
72
|
+
* contract (`string | null`) is platform-stable.
|
|
29
73
|
*/
|
|
30
74
|
export async function getIdToken() {
|
|
31
|
-
const token = await
|
|
32
|
-
const expiryStr = await
|
|
75
|
+
const token = (await entry(ID_TOKEN_ACCOUNT).getPassword()) ?? null;
|
|
76
|
+
const expiryStr = (await entry(TOKEN_EXPIRY_ACCOUNT).getPassword()) ?? null;
|
|
33
77
|
if (!token || !expiryStr) {
|
|
34
78
|
return null;
|
|
35
79
|
}
|
|
36
80
|
const expiresAt = parseInt(expiryStr, 10);
|
|
37
81
|
const now = Date.now();
|
|
38
|
-
// Check if token is expired (with 5 minute buffer)
|
|
82
|
+
// Check if token is expired (with 5 minute buffer).
|
|
39
83
|
if (expiresAt - now < 5 * 60 * 1000) {
|
|
40
|
-
return null;
|
|
84
|
+
return null;
|
|
41
85
|
}
|
|
42
86
|
return token;
|
|
43
87
|
}
|
|
44
88
|
/**
|
|
45
|
-
* Retrieve Google OAuth refresh token from OS keychain
|
|
89
|
+
* Retrieve the Google OAuth refresh token from the OS keychain.
|
|
46
90
|
*/
|
|
47
91
|
export async function getRefreshToken() {
|
|
48
|
-
return await
|
|
92
|
+
return (await entry(REFRESH_TOKEN_ACCOUNT).getPassword()) ?? null;
|
|
49
93
|
}
|
|
50
94
|
/**
|
|
51
|
-
* Clear all stored tokens from OS keychain
|
|
95
|
+
* Clear all stored tokens from the OS keychain. Idempotent — calling
|
|
96
|
+
* on an already-empty keychain is a no-op (NoEntry errors absorbed).
|
|
52
97
|
*/
|
|
53
98
|
export async function clearTokens() {
|
|
54
|
-
await
|
|
55
|
-
await
|
|
56
|
-
await
|
|
99
|
+
await deleteIfExists(ID_TOKEN_ACCOUNT);
|
|
100
|
+
await deleteIfExists(REFRESH_TOKEN_ACCOUNT);
|
|
101
|
+
await deleteIfExists(TOKEN_EXPIRY_ACCOUNT);
|
|
57
102
|
}
|
|
58
103
|
/**
|
|
59
|
-
* Check if user has valid authentication
|
|
104
|
+
* Check if user has valid authentication.
|
|
60
105
|
*/
|
|
61
106
|
export async function isAuthenticated() {
|
|
62
107
|
const token = await getIdToken();
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAC3C,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AACrD,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAE5C;;;;GAIG;AACH,SAAS,KAAK,CAAC,OAAe;IAC5B,OAAO,IAAI,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO;QAC5C,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,SAAiB;IACnE,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAoB;IAC1D,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;IACpE,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;IAE5E,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,oDAAoD;IACpD,IAAI,SAAS,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,CAAC,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACvC,MAAM,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC5C,MAAM,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;IACjC,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "borgmcp",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"description": "Multi-agent coordination for Claude Code — cubes, drones, and a shared activity log.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
51
|
+
"@napi-rs/keyring": "^1.3.0",
|
|
51
52
|
"chalk": "^5.3.0",
|
|
52
|
-
"keytar": "^7.9.0",
|
|
53
53
|
"open": "^10.0.0",
|
|
54
54
|
"prompts": "^2.4.2",
|
|
55
55
|
"which": "^4.0.0"
|