gcal-commander
Version:
A command-line interface for Google Calendar operations
76 lines (75 loc) • 2.32 kB
TypeScript
import { calendar_v3 as calendarV3 } from 'googleapis';
import { SupportedLanguage } from '../constants/languages';
export interface ListEventsParams {
calendarId: string;
maxResults: number;
timeMax: string;
timeMin: string;
}
export interface CreateEventParams {
attendees?: string[];
calendarId: string;
description?: string;
end: CalendarDateTime;
location?: string;
sendUpdates?: 'all' | 'externalOnly' | 'none';
start: CalendarDateTime;
summary: string;
}
export interface CalendarDateTime {
date?: string;
dateTime?: string;
timeZone?: string;
}
export interface ICalendarService {
createEvent(params: CreateEventParams): Promise<calendarV3.Schema$Event>;
getEvent(eventId: string, calendarId: string): Promise<calendarV3.Schema$Event>;
listCalendars(): Promise<calendarV3.Schema$CalendarListEntry[]>;
listEvents(params: ListEventsParams): Promise<calendarV3.Schema$Event[]>;
}
export interface AuthResult {
client: any;
}
export interface IAuthService {
getCalendarAuth(): Promise<AuthResult>;
}
export interface SelectChoice {
name: string;
value: string;
}
export interface IPromptService {
confirm(message: string, defaultValue?: boolean): Promise<boolean>;
select(message: string, choices: SelectChoice[]): Promise<string>;
}
export interface II18nService {
changeLanguage(language: string): Promise<void>;
init(language?: string): Promise<void>;
t(key: string, options?: any): string;
}
export interface Config extends Record<string, unknown> {
defaultCalendar?: string;
events?: {
days?: number;
format?: 'json' | 'pretty-json' | 'table';
maxResults?: number;
};
language?: SupportedLanguage;
}
export interface IConfigService {
get<T>(key: string): Promise<T | undefined>;
getConfigPath(): string;
getValidKeys(): readonly string[];
list(): Promise<Config>;
load(): Promise<void>;
reset(): Promise<void>;
save(): Promise<void>;
set(key: string, value: unknown): Promise<void>;
unset(key: string): Promise<void>;
validateKey(key: string): boolean;
validateValue(key: string, value: unknown): {
error?: string;
errorKey?: string;
errorOptions?: unknown;
valid: boolean;
};
}