@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.
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +169 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/info.d.ts +5 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +120 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/install.d.ts +10 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +292 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/self-update.d.ts +4 -0
- package/dist/commands/self-update.d.ts.map +1 -0
- package/dist/commands/self-update.js +79 -0
- package/dist/commands/self-update.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +140 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +38 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +71 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/feishu-auth.d.ts +47 -0
- package/dist/utils/feishu-auth.d.ts.map +1 -0
- package/dist/utils/feishu-auth.js +149 -0
- package/dist/utils/feishu-auth.js.map +1 -0
- package/dist/utils/install-prompts.d.ts +19 -0
- package/dist/utils/install-prompts.d.ts.map +1 -0
- package/dist/utils/install-prompts.js +210 -0
- package/dist/utils/install-prompts.js.map +1 -0
- package/dist/utils/prompts.d.ts +8 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +60 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/system.d.ts +14 -0
- package/dist/utils/system.d.ts.map +1 -0
- package/dist/utils/system.js +123 -0
- package/dist/utils/system.js.map +1 -0
- 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 @@
|
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,sCAkGC;AAhHD,6CAA+B;AAC/B,2CAA6B;AAE7B,kDAA0B;AAE1B,4CAA4E;AAC5E,4CAAiE;AACjE,qCAAyC;AAEzC,MAAM,cAAc,GAAG,IAAA,yBAAgB,GAAE,CAAC;AAC1C,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAC3D,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEzC,KAAK,UAAU,aAAa,CAAC,OAA6B,EAAE,SAAkB,KAAK,EAAE,aAAsB,KAAK;IACrH,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEtD,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;IAElC,gDAAgD;IAChD,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,4BAA4B;IAC5B,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAE1B,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAC;QACzC,IAAA,mBAAU,EAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,6BAA6B,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,iBAAiB,KAAK,CAAC,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAA,2BAAkB,EAAC,UAAU,CAAC,CAAC;QACnD,IAAA,mBAAU,EAAC,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gCAAgC;IAChC,MAAM,SAAS,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;IACrC,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK;QAAE,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,2DAA2D;IAC3D,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACtF,CAAC;IAED,iEAAiE;IACjE,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC/D,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IACnD,CAAC;IAED,MAAM,IAAA,oBAAW,EAAC,SAAS,CAAC,CAAC;IAE7B,sBAAsB;IACtB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAA,sBAAa,GAAE,CAAC;IACxB,CAAC;IAED,gCAAgC;IAChC,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC/C,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,8EAA8E,CAAC,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|