UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

108 lines (107 loc) 5.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPluginInfo = exports.getPluginPointInfo = void 0; const fs_1 = require("fs"); const local_plugin_config_1 = require("../local-plugin-config"); const types_1 = require("../types"); const logger_1 = require("../utils/logger"); const write_local_point_config_1 = require("../utils/write-local-point-config"); const validate_point_schema_1 = require("../utils/validate-point-schema"); const localToBackend_1 = require("../utils/transform/localToBackend"); const request_1 = require("./request"); async function getPluginPointInfo(pluginId, pluginSecret, siteDomain) { try { const remotePluginInfo = await (0, request_1.request)(`${siteDomain}/goapi/v5/app/runtime/point_draft`, { method: 'POST', data: { plugin_key: pluginId, plugin_secret: pluginSecret, }, }); return remotePluginInfo.point_info_map; } catch (error) { // 不在底层 helper 里 process.exit —— 会绕过 updateProject 对 advisory diff 的 try/catch, // 让网络抖动直接让整个更新命令提前退出。由调用方决定此次失败是否致命。 logger_1.logger.error('Failed to get plugin point info:', error); throw error; } } exports.getPluginPointInfo = getPluginPointInfo; async function getPluginInfo(pluginId, pluginSecret, siteDomain) { const localConfig = await (0, local_plugin_config_1.getLocalPluginConfig)(); const remotePluginInfo = await (0, request_1.request)(`${siteDomain}/goapi/v5/app/runtime/point_draft`, { method: 'POST', data: { plugin_key: pluginId, plugin_secret: pluginSecret, }, }); let pointInfoMap = remotePluginInfo.point_info_map; if ((localConfig === null || localConfig === void 0 ? void 0 : localConfig.source_type) === 'local') { logger_1.logger.info('Using local plugin config.'); const localConfigPath = (0, write_local_point_config_1.getLocalConfigPath)(); const hasLocalConfig = (0, fs_1.existsSync)(localConfigPath); try { if (!hasLocalConfig) { throw new Error('Local config file not found'); } const localFeatures = await (0, write_local_point_config_1.getLocalPointConfig)(); const validationResult = await (0, validate_point_schema_1.validatePointConfig)(localFeatures); if (!validationResult.valid) { const { lines } = (0, validate_point_schema_1.formatValidationErrors)(validationResult, 'text'); throw new Error(`current local point config is invalid:\n${lines.join('\n')}`); } // 前端定义了一份配置供ai/开发者修改,会存在一层到后端的转换,这里转回后端的返回格式 pointInfoMap = (0, localToBackend_1.transformQueryLocalConfig)(localFeatures, { fallbackIconUrl: remotePluginInfo.plugin_info.icon, }); } catch (error) { logger_1.logger.error('Failed to get local plugin config:', error); process.exit(1); } } const features = Object.keys(pointInfoMap) // 过滤掉 platform 为空的点位,e.g. automation .filter(pointKey => pointInfoMap[pointKey].platform) .map(pointKey => { var _a, _b, _c, _d; const point = pointInfoMap[pointKey]; return { key: point.key, component_type: point.component_type, type: point.type, icon: point.icon, name: point.name, description: point.description, i18n_info: point.i18n_info, workItemTypeKeys: point.work_item_type, customWorkItemTypeKeys: point.custom_work_item_type, web: { scenes: (_a = point.platform[types_1.EFeaturePlatform.web]) === null || _a === void 0 ? void 0 : _a.scene, resourceId: { resource: (_b = point.platform[types_1.EFeaturePlatform.web]) === null || _b === void 0 ? void 0 : _b.resource, }, }, mobile: { scenes: (_c = point.platform[types_1.EFeaturePlatform.mobile]) === null || _c === void 0 ? void 0 : _c.scene, resourceId: { resource: (_d = point.platform[types_1.EFeaturePlatform.mobile]) === null || _d === void 0 ? void 0 : _d.resource, }, }, extension: point === null || point === void 0 ? void 0 : point.extension, }; }); return { frameworkVersion: remotePluginInfo.plugin_extension.runtime_version === '2.0.0' ? types_1.EPluginFrameworkVersion.v2 : types_1.EPluginFrameworkVersion.v1, id: pluginId, name: remotePluginInfo.plugin_info.name, icon: remotePluginInfo.plugin_info.icon, short: remotePluginInfo.plugin_info.short, features, }; } exports.getPluginInfo = getPluginInfo;