UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

47 lines (46 loc) 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveBackendAppType = void 0; const update_plugin_description_1 = require("../../../api/tools/update-plugin-description"); const derive_app_type_1 = require("../../../utils/derive-app-type"); const logger_1 = require("../../../utils/logger"); /** * 确定要写进本地 plugin.config.json 的 `app_type`——**以后端为准,不以请求为准**。 * * `lpm create --app-type X` 里的 X 只是"请求后端建成什么形态";后端可能忽略 / 改写它, * 且 resume 路径根本不调 create 接口。所以本地的事实来源必须是 `GetAppDescriptionInfo` * 返回的真实 `app_type` / `point_types`(与 config-only init 同一套判定,见 * dispatcher.ts 的 config-only 分支)。 * * - 后端可达:返回 `deriveAppTypeFromBackend(descInfo)`;若与 `requested` 不一致,warn 出来 * (这正是"请求 ai_node 却建成 normal"这类需要暴露的异常信号)。 * - 后端不可达:由 `onUnreachable` 决定—— * - `'fallback'`(默认,`lpm create` 用):退回 `requested`(聊胜于无的兜底,至少不让 config * 缺字段被当 normal)并 warn;`requested` 未传(如 `lpm init` 存量插件)则返回 undefined, * 由调用方 no-op、保持原样。 * - `'throw'`(`lpm init --config-only` 用):直接抛出。config-only 是在"领养"一个已存在的 * 后端插件、没有 `requested` 可兜底,拿不到真实 app_type 就不能继续,必须 fail-fast。 */ async function resolveBackendAppType({ siteDomain, appKey, requested, onUnreachable = 'fallback', }) { try { const descInfo = await (0, update_plugin_description_1.getPluginDescriptionInfo)({ siteDomain, appKey }); const backendAppType = (0, derive_app_type_1.deriveAppTypeFromBackend)(descInfo); if (requested && backendAppType !== requested) { logger_1.logger.warn(`Requested app_type "${requested}" but the backend reports "${backendAppType}"; ` + 'writing the backend value (it is the source of truth).'); } return backendAppType; } catch (e) { if (onUnreachable === 'throw') { throw e; } logger_1.logger.debug(e); if (requested) { logger_1.logger.warn(`Could not confirm app_type from the backend for ${appKey}; ` + `falling back to the requested "${requested}".`); } return requested; } } exports.resolveBackendAppType = resolveBackendAppType;