kawazu
Version:
kawazu CLI tool for real-time chat in your editor
208 lines (207 loc) • 9.66 kB
JavaScript
;
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);
}
}