badgerclaw 0.1.4 → 0.1.6
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/commands/autopair.d.ts +3 -0
- package/dist/commands/autopair.js +102 -0
- package/dist/commands/autopair.js.map +1 -0
- package/dist/commands/login.js +16 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/watch.d.ts +2 -0
- package/dist/commands/watch.js +29 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.autopairCommand = void 0;
|
|
7
|
+
exports.runAutoPair = runAutoPair;
|
|
8
|
+
const commander_1 = require("commander");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const ora_1 = __importDefault(require("ora"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const fs_1 = __importDefault(require("fs"));
|
|
14
|
+
const auth_1 = require("../lib/auth");
|
|
15
|
+
const api_1 = require("../lib/api");
|
|
16
|
+
const OPENCLAW_CONFIG = path_1.default.join(os_1.default.homedir(), '.openclaw', 'openclaw.json');
|
|
17
|
+
const API_BASE = 'https://api.badgerclaw.ai';
|
|
18
|
+
async function runAutoPair(silent = false) {
|
|
19
|
+
const auth = (0, auth_1.readAuth)();
|
|
20
|
+
if (!auth)
|
|
21
|
+
return 0;
|
|
22
|
+
const client = (0, api_1.getAuthenticatedClient)(auth.access_token);
|
|
23
|
+
try {
|
|
24
|
+
const { data: pending } = await client.get('/api/v1/openclaw/pending-pairs');
|
|
25
|
+
if (!pending || pending.length === 0)
|
|
26
|
+
return 0;
|
|
27
|
+
let paired = 0;
|
|
28
|
+
for (const pair of pending) {
|
|
29
|
+
const spinner = silent ? null : (0, ora_1.default)(`Pairing bot: ${pair.bot_name} (${pair.bot_user_id})`).start();
|
|
30
|
+
try {
|
|
31
|
+
// Redeem the pair code
|
|
32
|
+
const redeemResp = await fetch(`${API_BASE}/api/v1/pairing/redeem`, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: { 'Content-Type': 'application/json' },
|
|
35
|
+
body: JSON.stringify({ code: pair.pair_code }),
|
|
36
|
+
});
|
|
37
|
+
if (!redeemResp.ok) {
|
|
38
|
+
const err = await redeemResp.json().catch(() => ({ detail: redeemResp.statusText }));
|
|
39
|
+
spinner?.fail(chalk_1.default.red(`Failed to redeem ${pair.bot_name}: ${err.detail}`));
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const bot = await redeemResp.json();
|
|
43
|
+
// Write to OpenClaw config
|
|
44
|
+
writeToOpenClawConfig(bot);
|
|
45
|
+
// Mark as claimed so it won't be returned again
|
|
46
|
+
await client.post(`/api/v1/openclaw/pending-pairs/${pair.pair_code}/claim`);
|
|
47
|
+
spinner?.succeed(chalk_1.default.green(`✅ Paired ${bot.bot_name} (${bot.user_id})`));
|
|
48
|
+
paired++;
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
spinner?.fail(chalk_1.default.red(`Error pairing ${pair.bot_name}: ${e}`));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (paired > 0 && !silent) {
|
|
55
|
+
console.log(chalk_1.default.yellow(`\n⚡ ${paired} bot(s) paired. Run: openclaw gateway restart`));
|
|
56
|
+
}
|
|
57
|
+
return paired;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function writeToOpenClawConfig(bot) {
|
|
64
|
+
let config = {};
|
|
65
|
+
try {
|
|
66
|
+
config = JSON.parse(fs_1.default.readFileSync(OPENCLAW_CONFIG, 'utf-8'));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// config doesn't exist yet — that's fine
|
|
70
|
+
}
|
|
71
|
+
const channels = config.channels ?? {};
|
|
72
|
+
const badgerclaw = channels.badgerclaw ?? {};
|
|
73
|
+
const accounts = badgerclaw.accounts ?? {};
|
|
74
|
+
// Derive key from localpart: @think_bot:... → "think"
|
|
75
|
+
const localpart = bot.user_id.split(':')[0].replace('@', '').replace(/_bot$/, '');
|
|
76
|
+
accounts[localpart] = {
|
|
77
|
+
userId: bot.user_id,
|
|
78
|
+
accessToken: bot.access_token,
|
|
79
|
+
homeserver: bot.homeserver,
|
|
80
|
+
encryption: true,
|
|
81
|
+
deviceId: bot.device_id,
|
|
82
|
+
};
|
|
83
|
+
badgerclaw.accounts = accounts;
|
|
84
|
+
channels.badgerclaw = badgerclaw;
|
|
85
|
+
config.channels = channels;
|
|
86
|
+
fs_1.default.writeFileSync(OPENCLAW_CONFIG, JSON.stringify(config, null, 2));
|
|
87
|
+
}
|
|
88
|
+
exports.autopairCommand = new commander_1.Command('autopair')
|
|
89
|
+
.description('Check for pending bot pairs and connect them to OpenClaw automatically')
|
|
90
|
+
.action(async () => {
|
|
91
|
+
const auth = (0, auth_1.readAuth)();
|
|
92
|
+
if (!auth) {
|
|
93
|
+
console.log(chalk_1.default.yellow('Not logged in. Run `badgerclaw login` first.'));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
console.log(chalk_1.default.dim('Checking for pending bot pairs...'));
|
|
97
|
+
const count = await runAutoPair(false);
|
|
98
|
+
if (count === 0) {
|
|
99
|
+
console.log(chalk_1.default.dim('No pending pairs found.'));
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=autopair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autopair.js","sourceRoot":"","sources":["../../src/commands/autopair.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -13,6 +13,8 @@ const crypto_1 = __importDefault(require("crypto"));
|
|
|
13
13
|
const pkce_1 = require("../lib/pkce");
|
|
14
14
|
const auth_1 = require("../lib/auth");
|
|
15
15
|
const api_1 = require("../lib/api");
|
|
16
|
+
const autopair_1 = require("./autopair");
|
|
17
|
+
const child_process_1 = require("child_process");
|
|
16
18
|
const POLL_INTERVAL_MS = 2000;
|
|
17
19
|
const POLL_TIMEOUT_MS = 120000;
|
|
18
20
|
exports.loginCommand = new commander_1.Command('login')
|
|
@@ -58,6 +60,20 @@ exports.loginCommand = new commander_1.Command('login')
|
|
|
58
60
|
// Non-fatal: registration may fail but login succeeded
|
|
59
61
|
}
|
|
60
62
|
spinner.succeed(chalk_1.default.green(`Logged in as ${(0, auth_1.extractUsername)(user_id)}`));
|
|
63
|
+
// Auto-pair any bots pending right now
|
|
64
|
+
const paired = await (0, autopair_1.runAutoPair)(true);
|
|
65
|
+
if (paired > 0) {
|
|
66
|
+
console.log(chalk_1.default.green(`✅ ${paired} bot(s) automatically paired to OpenClaw.`));
|
|
67
|
+
console.log(chalk_1.default.yellow('Run: openclaw gateway restart to activate.'));
|
|
68
|
+
}
|
|
69
|
+
// Start background watch daemon so future pairs from the app are picked up automatically
|
|
70
|
+
const self = process.argv[1];
|
|
71
|
+
const watcher = (0, child_process_1.spawn)(process.execPath, [self, 'watch'], {
|
|
72
|
+
detached: true,
|
|
73
|
+
stdio: 'ignore',
|
|
74
|
+
});
|
|
75
|
+
watcher.unref();
|
|
76
|
+
console.log(chalk_1.default.dim('Background pair-watcher started (picks up new pairs from the iOS app automatically).'));
|
|
61
77
|
return;
|
|
62
78
|
}
|
|
63
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,gDAAwB;AACxB,4CAAoB;AACpB,oDAA4B;AAC5B,sCAA0E;AAC1E,sCAAyD;AACzD,oCAAsD;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.watchCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const auth_1 = require("../lib/auth");
|
|
10
|
+
const autopair_1 = require("./autopair");
|
|
11
|
+
const POLL_INTERVAL_MS = 10000;
|
|
12
|
+
exports.watchCommand = new commander_1.Command('watch')
|
|
13
|
+
.description('Watch for pending bot pairs and connect them automatically (runs until stopped)')
|
|
14
|
+
.action(async () => {
|
|
15
|
+
const auth = (0, auth_1.readAuth)();
|
|
16
|
+
if (!auth) {
|
|
17
|
+
console.log(chalk_1.default.yellow('Not logged in. Run `badgerclaw login` first.'));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
console.log(chalk_1.default.green('👀 Watching for pending bot pairs... (Ctrl+C to stop)'));
|
|
21
|
+
console.log(chalk_1.default.dim(`Polling every ${POLL_INTERVAL_MS / 1000}s`));
|
|
22
|
+
// Run once immediately
|
|
23
|
+
await (0, autopair_1.runAutoPair)(false);
|
|
24
|
+
// Then poll on interval
|
|
25
|
+
setInterval(async () => {
|
|
26
|
+
await (0, autopair_1.runAutoPair)(false);
|
|
27
|
+
}, POLL_INTERVAL_MS);
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,sCAAuC;AACvC,yCAAyC;AAEzC,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAEnB,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,iFAAiF,CAAC;KAC9F,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,GAAG,IAAA,eAAQ,GAAE,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAEpE,uBAAuB;IACvB,MAAM,IAAA,sBAAW,EAAC,KAAK,CAAC,CAAC;IAEzB,wBAAwB;IACxB,WAAW,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,IAAA,sBAAW,EAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ const login_1 = require("./commands/login");
|
|
|
6
6
|
const logout_1 = require("./commands/logout");
|
|
7
7
|
const status_1 = require("./commands/status");
|
|
8
8
|
const bot_1 = require("./commands/bot");
|
|
9
|
+
const autopair_1 = require("./commands/autopair");
|
|
10
|
+
const watch_1 = require("./commands/watch");
|
|
9
11
|
const program = new commander_1.Command();
|
|
10
12
|
program
|
|
11
13
|
.name('badgerclaw')
|
|
@@ -15,5 +17,7 @@ program.addCommand(login_1.loginCommand);
|
|
|
15
17
|
program.addCommand(logout_1.logoutCommand);
|
|
16
18
|
program.addCommand(status_1.statusCommand);
|
|
17
19
|
program.addCommand(bot_1.botCommand);
|
|
20
|
+
program.addCommand(autopair_1.autopairCommand);
|
|
21
|
+
program.addCommand(watch_1.watchCommand);
|
|
18
22
|
program.parse(process.argv);
|
|
19
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,wCAA4C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,wCAA4C;AAC5C,kDAAsD;AACtD,4CAAgD;AAEhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,0BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|