"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pluginCommand = void 0; /** * `inkreach-teable plugin` — plugin management commands. */ const commander_1 = require("commander"); const ctx_1 = require("../lib/ctx"); const output_1 = require("../lib/output"); const request_1 = require("../lib/request"); void ctx_1.requireBaseId; function pluginCommand() { const cmd = new commander_1.Command('plugin'); cmd.description('Manage plugins (list, register, config)'); cmd .command('list') .description('List registered plugins') .action((0, ctx_1.run)(async (ctx) => { try { const list = (await ctx.client.getPlugins()); if (ctx.json) { (0, output_1.printJson)(list); } else { (0, output_1.printTable)([ { key: 'id', header: 'ID' }, { key: 'name', header: 'NAME' }, { key: 'status', header: 'STATUS' }, { key: 'runtimeType', header: 'RUNTIME' }, ], list.map((p) => ({ id: p.id, name: p.name, status: p.status, runtimeType: p.runtimeType ?? 'url' }))); } } catch (e) { if (e instanceof request_1.ApiError && e.status === 401) { process.stderr.write('Unauthorized — log in via "auth login" or provide --token\n'); process.exit(1); } throw e; } })); cmd .command('register') .description('Register a plugin by URL') .requiredOption('--url ', 'Plugin URL') .requiredOption('--name ', 'Plugin name') .option('--description ', 'Plugin description') .option('--logo ', 'Logo URL') .option('--positions ', 'Positions array, e.g. \'["panel"]\'', '["panel"]') .action((0, ctx_1.run)(async (ctx, _args, o) => { const opts = o; const positions = JSON.parse(opts.positions); const created = await ctx.client.registerPlugin({ name: opts.name, url: opts.url, description: opts.description, logo: opts.logo ?? '', positions, status: 'published', }); if (ctx.json) (0, output_1.printJson)(created); else process.stdout.write(`✓ Plugin registered: ${created.id}\n`); })); const config = cmd.command('config').description('Manage per-table plugin enablement'); config .command('list') .description('List plugin configs for the base') .action((0, ctx_1.run)(async (ctx) => { const list = await ctx.client.listPluginConfigs(ctx.baseId); if (ctx.json) (0, output_1.printJson)(list); else { (0, output_1.printTable)([ { key: 'pluginId', header: 'PLUGIN' }, { key: 'tableId', header: 'TABLE' }, { key: 'enabled', header: 'ON' }, { key: 'runtimeForm', header: 'FORM' }, { key: 'writeEnabled', header: 'WRITE' }, ], list.map((r) => ({ pluginId: r.pluginId, tableId: r.tableId || '-', enabled: r.enabled, runtimeForm: r.runtimeForm, writeEnabled: r.writeEnabled, }))); } })); config .command('enable') .description('Enable a plugin for a table (or base-wide if no --table)') .requiredOption('--plugin ', 'Plugin ID') .option('--table ', 'Table ID (omit for base-wide)') .option('--write', 'Allow write-back') .action((0, ctx_1.run)(async (ctx, _args, o) => { const opts = o; const result = await ctx.client.upsertPluginConfig(ctx.baseId, opts.plugin, { enabled: true, runtimeForm: 'panel', writeEnabled: !!opts.write, tableIds: opts.table ? [opts.table] : [], }); if (ctx.json) (0, output_1.printJson)(result); else process.stdout.write(`✓ Plugin ${opts.plugin} enabled${opts.table ? ` for table ${opts.table}` : ' base-wide'}\n`); })); config .command('disable') .description('Disable a plugin for a table (or base-wide if no --table)') .requiredOption('--plugin ', 'Plugin ID') .option('--table ', 'Table ID') .action((0, ctx_1.run)(async (ctx, _args, o) => { const opts = o; await ctx.client.upsertPluginConfig(ctx.baseId, opts.plugin, { enabled: false, runtimeForm: 'panel', writeEnabled: false, tableIds: opts.table ? [opts.table] : [], }); process.stdout.write(`✓ Plugin ${opts.plugin} disabled${opts.table ? ` for table ${opts.table}` : ' base-wide'}\n`); })); return cmd; } exports.pluginCommand = pluginCommand;