@raviolelabs/engram-mcp 0.5.1 → 0.5.2
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/scripts/pair.js +71 -9
- package/dist/scripts/pair.js.map +1 -1
- package/package.json +1 -1
package/dist/scripts/pair.js
CHANGED
|
@@ -33,21 +33,64 @@ async function main() {
|
|
|
33
33
|
? process.argv[baseUrlArg + 1]?.replace('engram-mcp.com', 'api.engram-mcp.com') ??
|
|
34
34
|
'https://api.engram-mcp.com'
|
|
35
35
|
: 'https://api.engram-mcp.com';
|
|
36
|
+
// --token <TOKEN> short-circuit: skip the browser callback flow and redeem
|
|
37
|
+
// an invite token directly. This is what the dashboard surfaces when a user
|
|
38
|
+
// already has engram-mcp installed and just wants to re-pair after a revoke.
|
|
39
|
+
const tokenArg = process.argv.indexOf('--token');
|
|
40
|
+
const inviteToken = tokenArg !== -1 ? process.argv[tokenArg + 1] : process.env.ENGRAM_INVITE_TOKEN || null;
|
|
36
41
|
// Load config to get dataDir
|
|
37
42
|
const config = loadConfig();
|
|
38
43
|
initDb(config.dataDir);
|
|
39
44
|
if (config.engramAccount) {
|
|
40
45
|
console.log('\n Note: Re-pairing will replace existing tokens.\n');
|
|
41
46
|
}
|
|
42
|
-
// Start pairing flow — opens browser automatically
|
|
43
47
|
let result;
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
if (inviteToken) {
|
|
49
|
+
// Direct redemption — same endpoint install.sh hits at step 8
|
|
50
|
+
if (!/^[A-Za-z0-9_-]{6,32}$/.test(inviteToken)) {
|
|
51
|
+
console.error('\n Invalid token format (expected 6-32 url-safe chars)\n');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const res = await fetch(`${apiBaseUrl}/api/pair/redeem-invite`, {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: { 'Content-Type': 'application/json' },
|
|
58
|
+
body: JSON.stringify({ token: inviteToken }),
|
|
59
|
+
});
|
|
60
|
+
if (!res.ok) {
|
|
61
|
+
const body = await res.text();
|
|
62
|
+
console.error(`\n Redeem failed (HTTP ${res.status}): ${body.slice(0, 200)}\n`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const data = (await res.json());
|
|
66
|
+
if (!data.jwt || !data.api_key) {
|
|
67
|
+
console.error('\n Redeem response missing tokens\n');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
result = {
|
|
71
|
+
jwt: data.jwt,
|
|
72
|
+
refreshToken: data.refresh_token,
|
|
73
|
+
apiKey: data.api_key,
|
|
74
|
+
expiresAt: data.expires_at ?? Date.now() + 30 * 24 * 60 * 60 * 1000,
|
|
75
|
+
};
|
|
76
|
+
console.log(`\n ✓ Linked to ${data.user?.email ?? 'your account'}`);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.error(`\n Pairing failed: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
46
82
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
83
|
+
else {
|
|
84
|
+
// Interactive browser flow (kept for users who run `engram-mcp pair`
|
|
85
|
+
// without any args — same UX as install.sh's initial pair step).
|
|
86
|
+
try {
|
|
87
|
+
result = await startPairing({ baseUrl });
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
log.error(`Pairing failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
91
|
+
console.error(`\n Pairing failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
51
94
|
}
|
|
52
95
|
// Generate or reuse master key salt
|
|
53
96
|
const existingSalt = config.engramAccount?.masterKeySalt;
|
|
@@ -67,8 +110,27 @@ async function main() {
|
|
|
67
110
|
fs.mkdirSync(ENGRAM_DIR, { recursive: true, mode: 0o700 });
|
|
68
111
|
fs.writeFileSync(CONFIG_PATH, JSON.stringify(updatedConfig, null, 2));
|
|
69
112
|
fs.chmodSync(CONFIG_PATH, 0o600);
|
|
70
|
-
console.log('\n Paired successfully (
|
|
71
|
-
|
|
113
|
+
console.log('\n ✓ Paired successfully (tokens saved to ~/.engram/config.json)');
|
|
114
|
+
// Restart the service so the bridge picks up the fresh tokens. Without
|
|
115
|
+
// this the user has to manually kickstart, which defeats the one-command
|
|
116
|
+
// re-pair UX.
|
|
117
|
+
try {
|
|
118
|
+
const { spawnSync } = await import('node:child_process');
|
|
119
|
+
if (process.platform === 'darwin') {
|
|
120
|
+
const uid = process.getuid?.() ?? 0;
|
|
121
|
+
const r = spawnSync('launchctl', ['kickstart', '-k', `gui/${uid}/com.ravolelabs.engram`]);
|
|
122
|
+
if (r.status === 0)
|
|
123
|
+
console.log(' ✓ Restarted background service — bridge now connecting');
|
|
124
|
+
}
|
|
125
|
+
else if (process.platform === 'linux') {
|
|
126
|
+
const r = spawnSync('systemctl', ['--user', 'restart', 'engram.service']);
|
|
127
|
+
if (r.status === 0)
|
|
128
|
+
console.log(' ✓ Restarted background service — bridge now connecting');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
console.log(' (Bridge will connect on next engram-mcp start.)');
|
|
133
|
+
}
|
|
72
134
|
console.log(`\n Open your dashboard: https://engram-mcp.com/dashboard\n`);
|
|
73
135
|
}
|
|
74
136
|
main().catch((e) => {
|
package/dist/scripts/pair.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/scripts/pair.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AAErC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,KAAK,UAAU,IAAI;IACjB,wBAAwB;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAC5F,MAAM,UAAU,GACd,UAAU,KAAK,CAAC,CAAC;QACf,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;YAC7E,4BAA4B;QAC9B,CAAC,CAAC,4BAA4B,CAAC;IAEnC,6BAA6B;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/scripts/pair.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED