UNPKG

kawazu

Version:

kawazu CLI tool for real-time chat in your editor

208 lines (207 loc) 9.66 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.approveFileShare = approveFileShare; exports.denyFileShare = denyFileShare; exports.listPendingRequests = listPendingRequests; const chalk_1 = __importDefault(require("chalk")); const inquirer_1 = __importDefault(require("inquirer")); const config_1 = require("../utils/config"); async function approveFileShare(shareToken, options = {}) { try { const config = await (0, config_1.loadConfig)(); if (!config.server_url || !config.default_username) { console.error(chalk_1.default.red('❌ 設定が不完全です')); console.log(chalk_1.default.yellow('💡 設定方法: ') + chalk_1.default.cyan('kawazu config')); return; } console.log(chalk_1.default.blue(`📝 ファイル共有を承認します`)); console.log(chalk_1.default.gray(`トークン: ${shareToken}`)); // 承認確認 const { confirm } = await inquirer_1.default.prompt([ { type: 'confirm', name: 'confirm', message: 'このファイル共有リクエストを承認しますか?', default: true } ]); if (!confirm) { console.log(chalk_1.default.yellow('❌ 承認をキャンセルしました')); return; } // API呼び出し const response = await fetch(`${config.server_url}/api/file-sharing/shares/${shareToken}/approve`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username: config.default_username, reason: options.reason }) }); const result = await response.json(); if (result.success) { console.log(chalk_1.default.green('\n✅ ファイル共有を承認しました!')); console.log(chalk_1.default.cyan(`ファイル: ${result.data.file_name}`)); console.log(chalk_1.default.gray(`所有者: ${result.data.owner}`)); console.log(chalk_1.default.blue('\n💡 ファイルにアクセスするには:')); console.log(chalk_1.default.cyan(`kawazu download ${shareToken}`)); } else { console.error(chalk_1.default.red('❌ 承認に失敗しました:'), result.error); } } catch (error) { console.error(chalk_1.default.red('❌ エラーが発生しました:'), error); } } async function denyFileShare(shareToken, options = {}) { try { const config = await (0, config_1.loadConfig)(); if (!config.server_url || !config.default_username) { console.error(chalk_1.default.red('❌ 設定が不完全です')); return; } console.log(chalk_1.default.yellow(`🚫 ファイル共有を拒否します`)); console.log(chalk_1.default.gray(`トークン: ${shareToken}`)); // 拒否理由の入力(オプション) let reason = options.reason; if (!reason) { const { inputReason } = await inquirer_1.default.prompt([ { type: 'input', name: 'inputReason', message: '拒否理由を入力してください(オプション):', } ]); reason = inputReason; } // 拒否確認 const { confirm } = await inquirer_1.default.prompt([ { type: 'confirm', name: 'confirm', message: 'このファイル共有リクエストを拒否しますか?', default: false } ]); if (!confirm) { console.log(chalk_1.default.yellow('❌ 拒否をキャンセルしました')); return; } // API呼び出し const response = await fetch(`${config.server_url}/api/file-sharing/shares/${shareToken}/deny`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username: config.default_username, reason }) }); const result = await response.json(); if (result.success) { console.log(chalk_1.default.green('\n✅ ファイル共有を拒否しました')); console.log(chalk_1.default.cyan(`ファイル: ${result.data.file_name}`)); console.log(chalk_1.default.gray(`所有者: ${result.data.owner}`)); if (reason) { console.log(chalk_1.default.gray(`理由: ${reason}`)); } } else { console.error(chalk_1.default.red('❌ 拒否に失敗しました:'), result.error); } } catch (error) { console.error(chalk_1.default.red('❌ エラーが発生しました:'), error); } } async function listPendingRequests() { try { const config = await (0, config_1.loadConfig)(); if (!config.server_url || !config.default_username) { console.error(chalk_1.default.red('❌ 設定が不完全です')); return; } // 現在のルームを取得 const { getCurrentRoomFromCodechat } = await Promise.resolve().then(() => __importStar(require('../utils/file'))); const roomSlug = await getCurrentRoomFromCodechat(); if (!roomSlug) { console.error(chalk_1.default.red('❌ ルーム情報が見つかりません')); console.log(chalk_1.default.yellow('💡 ルームに参加してから実行してください')); return; } // 共有ファイル一覧を取得 const response = await fetch(`${config.server_url}/api/file-sharing/${roomSlug}/shares?username=${config.default_username}`); const result = await response.json(); if (result.success) { const pendingFiles = result.data.filter((file) => file.status === 'pending'); if (pendingFiles.length === 0) { console.log(chalk_1.default.yellow('📨 承認待ちのファイル共有リクエストはありません')); return; } console.log(chalk_1.default.blue.bold(`\n📨 承認待ちのファイル共有リクエスト (${pendingFiles.length}件)\n`)); pendingFiles.forEach((file, index) => { const permissionIcon = file.permission_type === 'write' ? '✏️' : '👀'; console.log(`${index + 1}. ${permissionIcon} ${chalk_1.default.cyan(file.file_name)}`); console.log(` 所有者: ${chalk_1.default.yellow(file.owner_username)}`); console.log(` 権限: ${chalk_1.default.gray(file.permission_type === 'read' ? '読み取り専用' : '読み書き可能')}`); if (file.expires_at) { const expiresAt = new Date(file.expires_at); const isExpired = expiresAt < new Date(); console.log(` 有効期限: ${isExpired ? chalk_1.default.red('期限切れ') : chalk_1.default.gray(expiresAt.toLocaleString())}`); } console.log(` 承認: ${chalk_1.default.green('kawazu approve ' + file.share_token)}`); console.log(` 拒否: ${chalk_1.default.red('kawazu deny ' + file.share_token)}`); console.log(''); }); console.log(chalk_1.default.blue('💡 承認・拒否のコマンド例:')); console.log(chalk_1.default.cyan(`kawazu approve ${pendingFiles[0].share_token}`)); console.log(chalk_1.default.cyan(`kawazu deny ${pendingFiles[0].share_token}`)); } else { console.error(chalk_1.default.red('❌ リクエスト一覧の取得に失敗しました:'), result.error); } } catch (error) { console.error(chalk_1.default.red('❌ エラーが発生しました:'), error); } }