94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* List calendar events
|
|
*
|
|
* Usage:
|
|
* node list-events.mjs
|
|
* node list-events.mjs --start "2026-02-01" --end "2026-02-28"
|
|
*/
|
|
|
|
import { parseArgs } from 'util';
|
|
import { listEvents, timestampToDatetime, DEFAULT_CALENDAR_ID, DEFAULT_TIMEZONE } from '../lib/calendar.mjs';
|
|
|
|
const { values } = parseArgs({
|
|
options: {
|
|
start: { type: 'string' },
|
|
end: { type: 'string' },
|
|
timezone: { type: 'string', default: DEFAULT_TIMEZONE },
|
|
calendar: { type: 'string', default: DEFAULT_CALENDAR_ID },
|
|
json: { type: 'boolean' },
|
|
help: { type: 'boolean', short: 'h' }
|
|
}
|
|
});
|
|
|
|
if (values.help) {
|
|
console.log(`
|
|
List Lark calendar events
|
|
|
|
Options:
|
|
--start Start date: YYYY-MM-DD (default: today)
|
|
--end End date: YYYY-MM-DD (default: 7 days from now)
|
|
--timezone IANA timezone (default: Asia/Singapore)
|
|
--calendar Calendar ID
|
|
--json Output as JSON
|
|
-h, --help Show this help
|
|
|
|
Examples:
|
|
node list-events.mjs
|
|
node list-events.mjs --start "2026-02-01" --end "2026-02-28"
|
|
`);
|
|
process.exit(0);
|
|
}
|
|
|
|
async function main() {
|
|
try {
|
|
const events = await listEvents({
|
|
calendarId: values.calendar,
|
|
startTime: values.start,
|
|
endTime: values.end,
|
|
timezone: values.timezone
|
|
});
|
|
|
|
if (values.json) {
|
|
console.log(JSON.stringify(events, null, 2));
|
|
return;
|
|
}
|
|
|
|
if (events.length === 0) {
|
|
console.log('No events found in the specified range.');
|
|
return;
|
|
}
|
|
|
|
console.log(`Found ${events.length} event(s):\n`);
|
|
|
|
for (const event of events) {
|
|
const startTime = event.start_time?.timestamp
|
|
? timestampToDatetime(parseInt(event.start_time.timestamp), values.timezone)
|
|
: 'N/A';
|
|
const endTime = event.end_time?.timestamp
|
|
? timestampToDatetime(parseInt(event.end_time.timestamp), values.timezone)
|
|
: 'N/A';
|
|
|
|
console.log(`📅 ${event.summary || '(No title)'}`);
|
|
console.log(` ID: ${event.event_id}`);
|
|
console.log(` Time: ${startTime} → ${endTime}`);
|
|
if (event.location?.name) {
|
|
console.log(` Location: ${event.location.name}`);
|
|
}
|
|
if (event.description) {
|
|
console.log(` Description: ${event.description.substring(0, 100)}${event.description.length > 100 ? '...' : ''}`);
|
|
}
|
|
console.log('');
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('❌ Failed to list events:', error.message);
|
|
if (error.larkResponse) {
|
|
console.error('Lark response:', JSON.stringify(error.larkResponse, null, 2));
|
|
}
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|