@larksuite/openclaw-lark-tools 1.0.19-alpha.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.
Files changed (45) hide show
  1. package/dist/commands/doctor.d.ts +5 -0
  2. package/dist/commands/doctor.d.ts.map +1 -0
  3. package/dist/commands/doctor.js +169 -0
  4. package/dist/commands/doctor.js.map +1 -0
  5. package/dist/commands/info.d.ts +5 -0
  6. package/dist/commands/info.d.ts.map +1 -0
  7. package/dist/commands/info.js +120 -0
  8. package/dist/commands/info.js.map +1 -0
  9. package/dist/commands/install.d.ts +10 -0
  10. package/dist/commands/install.d.ts.map +1 -0
  11. package/dist/commands/install.js +292 -0
  12. package/dist/commands/install.js.map +1 -0
  13. package/dist/commands/self-update.d.ts +4 -0
  14. package/dist/commands/self-update.d.ts.map +1 -0
  15. package/dist/commands/self-update.js +79 -0
  16. package/dist/commands/self-update.js.map +1 -0
  17. package/dist/commands/update.d.ts +4 -0
  18. package/dist/commands/update.d.ts.map +1 -0
  19. package/dist/commands/update.js +140 -0
  20. package/dist/commands/update.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +45 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/utils/config.d.ts +38 -0
  26. package/dist/utils/config.d.ts.map +1 -0
  27. package/dist/utils/config.js +71 -0
  28. package/dist/utils/config.js.map +1 -0
  29. package/dist/utils/feishu-auth.d.ts +47 -0
  30. package/dist/utils/feishu-auth.d.ts.map +1 -0
  31. package/dist/utils/feishu-auth.js +149 -0
  32. package/dist/utils/feishu-auth.js.map +1 -0
  33. package/dist/utils/install-prompts.d.ts +19 -0
  34. package/dist/utils/install-prompts.d.ts.map +1 -0
  35. package/dist/utils/install-prompts.js +210 -0
  36. package/dist/utils/install-prompts.js.map +1 -0
  37. package/dist/utils/prompts.d.ts +8 -0
  38. package/dist/utils/prompts.d.ts.map +1 -0
  39. package/dist/utils/prompts.js +60 -0
  40. package/dist/utils/prompts.js.map +1 -0
  41. package/dist/utils/system.d.ts +14 -0
  42. package/dist/utils/system.d.ts.map +1 -0
  43. package/dist/utils/system.js +123 -0
  44. package/dist/utils/system.js.map +1 -0
  45. package/package.json +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-update.d.ts","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB,GAAU,SAAS;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,kBAoCpE,CAAC"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.selfUpdateCommand = void 0;
40
+ const child_process_1 = require("child_process");
41
+ const ora_1 = __importDefault(require("ora"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const path = __importStar(require("path"));
44
+ const fs = __importStar(require("fs-extra"));
45
+ const selfUpdateCommand = async (options) => {
46
+ const spinner = (0, ora_1.default)('Checking for updates...').start();
47
+ try {
48
+ // Find package.json to determine package name
49
+ // Assuming dist structure: dist/commands/self-update.js
50
+ const packageJsonPath = path.resolve(__dirname, '../../package.json');
51
+ let packageName = '';
52
+ if (await fs.pathExists(packageJsonPath)) {
53
+ const pkg = await fs.readJson(packageJsonPath);
54
+ packageName = pkg.name;
55
+ }
56
+ else {
57
+ spinner.fail('Could not find package.json to determine package name.');
58
+ return;
59
+ }
60
+ const targetVersion = options.version || 'latest';
61
+ const installCmd = `npm install -g ${packageName}@${targetVersion}`;
62
+ spinner.stop();
63
+ console.log(chalk_1.default.blue(`Executing: ${installCmd}`));
64
+ // Execute command
65
+ (0, child_process_1.execSync)(installCmd, { stdio: 'inherit' });
66
+ console.log(chalk_1.default.green(`\nUpdate completed successfully!`));
67
+ }
68
+ catch (error) {
69
+ if (spinner.isSpinning) {
70
+ spinner.fail(chalk_1.default.red(`Update failed: ${error.message}`));
71
+ }
72
+ else {
73
+ console.error(chalk_1.default.red(`\nUpdate failed: ${error.message}`));
74
+ }
75
+ process.exit(1);
76
+ }
77
+ };
78
+ exports.selfUpdateCommand = selfUpdateCommand;
79
+ //# sourceMappingURL=self-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAyC;AACzC,8CAAsB;AACtB,kDAA0B;AAC1B,2CAA6B;AAC7B,6CAA+B;AAExB,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAA6B,EAAE,EAAE;IACvE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEvD,IAAI,CAAC;QACH,8CAA8C;QAC9C,wDAAwD;QACxD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAEtE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC/C,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACvE,OAAO;QACX,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;QAElD,MAAM,UAAU,GAAG,kBAAkB,WAAW,IAAI,aAAa,EAAE,CAAC;QAEpE,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC,CAAC;QAEpD,kBAAkB;QAClB,IAAA,wBAAQ,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AApCW,QAAA,iBAAiB,qBAoC5B"}
@@ -0,0 +1,4 @@
1
+ export declare function updateCommand(options: {
2
+ version?: string;
3
+ }, silent?: boolean, skipDoctor?: boolean): Promise<string | undefined>;
4
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAcA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,GAAE,OAAe,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkGpJ"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.updateCommand = updateCommand;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const config_1 = require("../utils/config");
44
+ const system_1 = require("../utils/system");
45
+ const doctor_1 = require("./doctor");
46
+ const EXTENSIONS_DIR = (0, config_1.getExtensionsDir)();
47
+ const PLUGIN_NAME = 'feishu-openclaw-plugin';
48
+ const PLUGIN_PATH = path.join(EXTENSIONS_DIR, PLUGIN_NAME);
49
+ const PACKAGE_NAME = '@larksuite/openclaw-lark';
50
+ async function updateCommand(options, silent = false, skipDoctor = false) {
51
+ if (options.version && !/^[0-9a-zA-Z.\-+]+$/.test(options.version)) {
52
+ console.error(chalk_1.default.red('Error: Invalid version format.'));
53
+ process.exit(1);
54
+ }
55
+ console.log(chalk_1.default.blue('Starting update process...'));
56
+ // 1. Remove from configuration
57
+ console.log(chalk_1.default.blue('Cleaning up configuration...'));
58
+ const config = await (0, config_1.readConfig)();
59
+ // Remove plugins.entries.feishu-openclaw-plugin
60
+ if (config.plugins?.entries?.[PLUGIN_NAME]) {
61
+ delete config.plugins.entries[PLUGIN_NAME];
62
+ }
63
+ // Remove from plugins.allow
64
+ if (config.plugins?.allow) {
65
+ config.plugins.allow = config.plugins.allow.filter(name => name !== PLUGIN_NAME);
66
+ }
67
+ await (0, config_1.writeConfig)(config);
68
+ // 2. Remove files
69
+ console.log(chalk_1.default.blue('Removing old plugin files...'));
70
+ if (await fs.pathExists(PLUGIN_PATH)) {
71
+ await fs.remove(PLUGIN_PATH);
72
+ }
73
+ // 3. Install new version
74
+ console.log(chalk_1.default.blue('Installing new version...'));
75
+ try {
76
+ const npmCmd = (0, system_1.getPlatformCommand)('npm');
77
+ (0, system_1.runCommand)(npmCmd, ['config', 'set', 'registry', 'https://registry.npmjs.org/']);
78
+ }
79
+ catch (e) {
80
+ console.error(chalk_1.default.red('Failed to set npm registry.'));
81
+ }
82
+ try {
83
+ const packageIdentifier = options.version ? `${PACKAGE_NAME}@${options.version}` : PACKAGE_NAME;
84
+ console.log(chalk_1.default.blue(`Installing plugin ${packageIdentifier}...`));
85
+ const openclawCmd = (0, system_1.getPlatformCommand)('openclaw');
86
+ (0, system_1.runCommand)(openclawCmd, ['plugins', 'install', packageIdentifier]);
87
+ }
88
+ catch (error) {
89
+ console.error(chalk_1.default.red('Failed to install plugin from npm.'));
90
+ console.error(error);
91
+ process.exit(1);
92
+ }
93
+ // 4. Update configuration again
94
+ const newConfig = await (0, config_1.readConfig)();
95
+ if (!newConfig.plugins)
96
+ newConfig.plugins = {};
97
+ if (!newConfig.plugins.allow)
98
+ newConfig.plugins.allow = [];
99
+ if (!newConfig.plugins.allow.includes(PLUGIN_NAME)) {
100
+ newConfig.plugins.allow.push(PLUGIN_NAME);
101
+ }
102
+ // Remove built-in feishu plugin from allow list if present
103
+ if (newConfig.plugins.allow.includes('feishu')) {
104
+ newConfig.plugins.allow = newConfig.plugins.allow.filter(name => name !== 'feishu');
105
+ }
106
+ // Ensure built-in feishu plugin is disabled to prevent conflicts
107
+ if (newConfig.plugins.entries?.feishu?.enabled) {
108
+ console.log(chalk_1.default.blue('Disabling built-in Feishu plugin...'));
109
+ newConfig.plugins.entries.feishu.enabled = false;
110
+ }
111
+ await (0, config_1.writeConfig)(newConfig);
112
+ // 5. Run Doctor Check
113
+ if (!skipDoctor) {
114
+ await (0, doctor_1.doctorCommand)();
115
+ }
116
+ // 6. Report Success and Version
117
+ let version;
118
+ try {
119
+ const packageJsonPath = path.join(PLUGIN_PATH, 'package.json');
120
+ if (await fs.pathExists(packageJsonPath)) {
121
+ const pkg = await fs.readJSON(packageJsonPath);
122
+ version = pkg.version;
123
+ if (!silent) {
124
+ console.log(chalk_1.default.green(`Update complete! New version: ${version}`));
125
+ }
126
+ }
127
+ else {
128
+ if (!silent) {
129
+ console.warn(chalk_1.default.yellow('Update complete, but could not determine new version (package.json missing).'));
130
+ }
131
+ }
132
+ }
133
+ catch (error) {
134
+ if (!silent) {
135
+ console.warn(chalk_1.default.yellow('Update complete, but failed to read version info.'));
136
+ }
137
+ }
138
+ return version;
139
+ }
140
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const install_1 = require("./commands/install");
6
+ const info_1 = require("./commands/info");
7
+ const doctor_1 = require("./commands/doctor");
8
+ const update_1 = require("./commands/update");
9
+ const self_update_1 = require("./commands/self-update");
10
+ const program = new commander_1.Command();
11
+ program
12
+ .name('feishu-plugin-onboard')
13
+ .description('CLI for managing Feishu official plugin for OpenClaw')
14
+ .version('1.0.0', '-V, --cli-version');
15
+ program
16
+ .command('install')
17
+ .description('Install and configure Feishu official plugin')
18
+ .option('--version <version>', 'Install a specific version of the plugin')
19
+ .option('--env <env>', 'Environment to use (prod, boe, pre)', 'prod')
20
+ .option('--lane <lane>', 'Traffic lane for requests')
21
+ .option('--debug', 'Enable debug logging')
22
+ .option('--verbose', 'Show detailed output including URLs')
23
+ .action((options) => (0, install_1.installCommand)(options));
24
+ program
25
+ .command('info')
26
+ .description('Show configuration information')
27
+ .option('--all', 'Show all information including configuration content')
28
+ .action((options) => (0, info_1.infoCommand)(options));
29
+ program
30
+ .command('doctor')
31
+ .description('Diagnose installation issues')
32
+ .option('--fix', 'Attempt to automatically fix issues')
33
+ .action((options) => (0, doctor_1.doctorCommand)(options));
34
+ program
35
+ .command('update')
36
+ .description('Update Feishu official plugin')
37
+ .option('--version <version>', 'Update to a specific version of the plugin')
38
+ .action(async (options) => { await (0, update_1.updateCommand)(options); });
39
+ program
40
+ .command('self-update')
41
+ .description('Update the CLI tool to the latest version')
42
+ .option('--version <ver>', 'Specify the version to install')
43
+ .action(async (options) => { await (0, self_update_1.selfUpdateCommand)(options); });
44
+ program.parse(process.argv);
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,gDAAoD;AACpD,0CAA8C;AAC9C,8CAAkD;AAClD,8CAAkD;AAClD,wDAA2D;AAE3D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,uBAAuB,CAAC;KAC7B,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAEzC,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;KACzE,MAAM,CAAC,aAAa,EAAE,qCAAqC,EAAE,MAAM,CAAC;KACpE,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;KACzC,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;KAC1D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC,CAAC;AAEhD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,OAAO,EAAE,sDAAsD,CAAC;KACvE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,OAAO,EAAE,qCAAqC,CAAC;KACtD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC,CAAC;AAE/C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ export declare const FEISHU_ENV_URLS: {
2
+ prod: string;
3
+ boe: string;
4
+ pre: string;
5
+ };
6
+ export type FeishuEnv = keyof typeof FEISHU_ENV_URLS;
7
+ export interface OpenClawConfig {
8
+ plugins?: {
9
+ allow?: string[];
10
+ entries?: {
11
+ [key: string]: {
12
+ enabled: boolean;
13
+ [key: string]: any;
14
+ };
15
+ };
16
+ };
17
+ channels?: {
18
+ feishu?: {
19
+ enabled: boolean;
20
+ appId: string;
21
+ appSecret?: string;
22
+ domain: string;
23
+ connectionMode: string;
24
+ requireMention: boolean;
25
+ dmPolicy: string;
26
+ groupPolicy: string;
27
+ allowFrom: any[];
28
+ groupAllowFrom: any[];
29
+ };
30
+ [key: string]: any;
31
+ };
32
+ }
33
+ export declare function getOpenClawDir(): string;
34
+ export declare function getConfigPath(): string;
35
+ export declare function getExtensionsDir(): string;
36
+ export declare function readConfig(): Promise<OpenClawConfig>;
37
+ export declare function writeConfig(config: OpenClawConfig): Promise<void>;
38
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,eAAe,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE;YACR,CAAC,GAAG,EAAE,MAAM,GAAG;gBACb,OAAO,EAAE,OAAO,CAAC;gBACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;aACpB,CAAC;SACH,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE;YACP,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC;YACf,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,OAAO,CAAC;YACxB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,GAAG,EAAE,CAAC;YACjB,cAAc,EAAE,GAAG,EAAE,CAAC;SACvB,CAAC;QACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,CAM1D;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FEISHU_ENV_URLS = void 0;
37
+ exports.getOpenClawDir = getOpenClawDir;
38
+ exports.getConfigPath = getConfigPath;
39
+ exports.getExtensionsDir = getExtensionsDir;
40
+ exports.readConfig = readConfig;
41
+ exports.writeConfig = writeConfig;
42
+ const path = __importStar(require("path"));
43
+ const fs = __importStar(require("fs-extra"));
44
+ const os = __importStar(require("os"));
45
+ exports.FEISHU_ENV_URLS = {
46
+ prod: 'https://accounts.feishu.cn',
47
+ boe: 'https://accounts.feishu-boe.cn',
48
+ pre: 'https://accounts.feishu-pre.cn',
49
+ };
50
+ function getOpenClawDir() {
51
+ return process.env.OPENCLAW_STATE_DIR || path.join(os.homedir(), '.openclaw');
52
+ }
53
+ function getConfigPath() {
54
+ return path.join(getOpenClawDir(), 'openclaw.json');
55
+ }
56
+ function getExtensionsDir() {
57
+ return path.join(getOpenClawDir(), 'extensions');
58
+ }
59
+ async function readConfig() {
60
+ const configPath = getConfigPath();
61
+ if (await fs.pathExists(configPath)) {
62
+ return fs.readJSON(configPath);
63
+ }
64
+ return {};
65
+ }
66
+ async function writeConfig(config) {
67
+ const configPath = getConfigPath();
68
+ await fs.ensureDir(path.dirname(configPath));
69
+ await fs.writeJSON(configPath, config, { spaces: 2 });
70
+ }
71
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,wCAEC;AAED,sCAEC;AAED,4CAEC;AAED,gCAMC;AAED,kCAIC;AA/DD,2CAA6B;AAC7B,6CAA+B;AAC/B,uCAAyB;AAEZ,QAAA,eAAe,GAAG;IAC7B,IAAI,EAAE,4BAA4B;IAClC,GAAG,EAAE,gCAAgC;IACrC,GAAG,EAAE,gCAAgC;CACtC,CAAC;AA+BF,SAAgB,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,eAAe,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC;AAEM,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,MAAsB;IACtD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { FeishuEnv } from './config';
2
+ export interface FeishuAuthOptions {
3
+ env?: FeishuEnv;
4
+ lane?: string;
5
+ debug?: boolean;
6
+ verbose?: boolean;
7
+ }
8
+ export interface InitResponse {
9
+ nonce: string;
10
+ supported_auth_methods: string[];
11
+ }
12
+ export interface BeginResponse {
13
+ device_code: string;
14
+ verification_uri: string;
15
+ user_code: string;
16
+ verification_uri_complete: string;
17
+ interval: number;
18
+ expire_in: number;
19
+ }
20
+ export interface PollResponse {
21
+ client_id?: string;
22
+ client_secret?: string;
23
+ user_info?: {
24
+ open_id?: string;
25
+ };
26
+ error?: string;
27
+ error_description?: string;
28
+ }
29
+ export declare class FeishuAuth {
30
+ private baseUrl;
31
+ private client;
32
+ private debug;
33
+ constructor(options?: FeishuAuthOptions);
34
+ init(): Promise<InitResponse>;
35
+ begin(): Promise<BeginResponse>;
36
+ poll(deviceCode: string): Promise<PollResponse>;
37
+ static printQRCode(url: string): void;
38
+ }
39
+ /**
40
+ * Validates the Feishu app credentials (appId and appSecret) by calling the tenant_access_token_internal endpoint.
41
+ *
42
+ * @param appId The Feishu App ID
43
+ * @param appSecret The Feishu App Secret
44
+ * @returns Promise<boolean> True if credentials are valid, false otherwise.
45
+ */
46
+ export declare function validateAppCredentials(appId: string, appSecret: string): Promise<boolean>;
47
+ //# sourceMappingURL=feishu-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu-auth.d.ts","sourceRoot":"","sources":["../../src/utils/feishu-auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,SAAS,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,GAAE,iBAAsB;IAuCrC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAO7B,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAU/B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAerD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM;CAG/B;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B/F"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.FeishuAuth = void 0;
40
+ exports.validateAppCredentials = validateAppCredentials;
41
+ const axios_1 = __importDefault(require("axios"));
42
+ const qrcode = __importStar(require("qrcode-terminal"));
43
+ const config_1 = require("./config");
44
+ class FeishuAuth {
45
+ constructor(options = {}) {
46
+ const env = options.env || 'prod';
47
+ this.baseUrl = config_1.FEISHU_ENV_URLS[env];
48
+ this.debug = !!options.debug;
49
+ const headers = {
50
+ 'Content-Type': 'application/x-www-form-urlencoded',
51
+ };
52
+ if (options.lane) {
53
+ headers['x-tt-env'] = options.lane;
54
+ }
55
+ this.client = axios_1.default.create({
56
+ baseURL: this.baseUrl,
57
+ headers,
58
+ timeout: 10000,
59
+ });
60
+ if (this.debug) {
61
+ this.client.interceptors.request.use(req => {
62
+ console.log('[DEBUG] Request:', {
63
+ url: req.url,
64
+ method: req.method,
65
+ headers: req.headers,
66
+ data: req.data,
67
+ });
68
+ return req;
69
+ });
70
+ this.client.interceptors.response.use(res => {
71
+ console.log('[DEBUG] Response:', {
72
+ status: res.status,
73
+ data: res.data,
74
+ });
75
+ return res;
76
+ });
77
+ }
78
+ }
79
+ async init() {
80
+ const response = await this.client.post('/oauth/v1/app/registration', new URLSearchParams({
81
+ action: 'init'
82
+ }).toString());
83
+ return response.data;
84
+ }
85
+ async begin() {
86
+ const response = await this.client.post('/oauth/v1/app/registration', new URLSearchParams({
87
+ action: 'begin',
88
+ archetype: 'PersonalAgent',
89
+ auth_method: 'client_secret',
90
+ request_user_info: 'open_id'
91
+ }).toString());
92
+ return response.data;
93
+ }
94
+ async poll(deviceCode) {
95
+ try {
96
+ const response = await this.client.post('/oauth/v1/app/registration', new URLSearchParams({
97
+ action: 'poll',
98
+ device_code: deviceCode
99
+ }).toString());
100
+ return response.data;
101
+ }
102
+ catch (error) {
103
+ if (error.response && error.response.data) {
104
+ return error.response.data;
105
+ }
106
+ throw error;
107
+ }
108
+ }
109
+ static printQRCode(url) {
110
+ qrcode.generate(url, { small: true });
111
+ }
112
+ }
113
+ exports.FeishuAuth = FeishuAuth;
114
+ /**
115
+ * Validates the Feishu app credentials (appId and appSecret) by calling the tenant_access_token_internal endpoint.
116
+ *
117
+ * @param appId The Feishu App ID
118
+ * @param appSecret The Feishu App Secret
119
+ * @returns Promise<boolean> True if credentials are valid, false otherwise.
120
+ */
121
+ async function validateAppCredentials(appId, appSecret) {
122
+ // Trim inputs to avoid whitespace issues
123
+ const cleanAppId = appId ? appId.trim() : '';
124
+ const cleanAppSecret = appSecret ? appSecret.trim() : '';
125
+ if (!cleanAppId || !cleanAppSecret) {
126
+ return false;
127
+ }
128
+ try {
129
+ // Use feishu.cn for better compatibility and matching user feedback
130
+ const response = await axios_1.default.post('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', {
131
+ app_id: cleanAppId,
132
+ app_secret: cleanAppSecret
133
+ }, {
134
+ timeout: 10000 // 10 seconds timeout
135
+ });
136
+ // If the call is successful and we get a tenant_access_token, the credentials are valid.
137
+ // The API returns code: 0 on success.
138
+ if (response.data && response.data.code === 0 && response.data.tenant_access_token) {
139
+ return true;
140
+ }
141
+ return false;
142
+ }
143
+ catch (error) {
144
+ // If the request fails (network error, 4xx, 5xx), consider it invalid or check specific error codes if needed.
145
+ // For now, any error means validation failed.
146
+ return false;
147
+ }
148
+ }
149
+ //# sourceMappingURL=feishu-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu-auth.js","sourceRoot":"","sources":["../../src/utils/feishu-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { FeishuAuthOptions } from './feishu-auth';
2
+ interface AuthConfig {
3
+ appId: string;
4
+ appSecret: string;
5
+ userInfo?: {
6
+ openId?: string | undefined;
7
+ };
8
+ }
9
+ /**
10
+ * Handles the interactive installation flow for Feishu configuration.
11
+ *
12
+ * @param currentAppId Optional existing App ID
13
+ * @param currentAppSecret Optional existing App Secret
14
+ * @param options Auth options (env, lane, debug)
15
+ * @returns Promise<AuthConfig> The validated App ID and App Secret
16
+ */
17
+ export declare function runInstallAuthFlow(currentAppId?: string, currentAppSecret?: string, options?: FeishuAuthOptions): Promise<AuthConfig>;
18
+ export {};
19
+ //# sourceMappingURL=install-prompts.d.ts.map