{"_id":"@ashikpy/gcal","_rev":"3-3c39046cf04055048e0eb8157512163c","name":"@ashikpy/gcal","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@ashikpy/gcal","version":"1.0.0","keywords":["gcal","google-calendar","cli","terminal"],"author":{"name":"Jessica Charlet"},"license":"MIT","_id":"@ashikpy/gcal@1.0.0","maintainers":[{"name":"ashikpy","email":"ashikofficial455@gmail.com"}],"bin":{"gcal":"dist/index.js"},"dist":{"shasum":"68b62a376ee14c25a4ac84ee7b0f240f77884be1","tarball":"https://registry.npmjs.org/@ashikpy/gcal/-/gcal-1.0.0.tgz","fileCount":58,"integrity":"sha512-2HnY3JzWQxxnRf6iddfc3HY3xyQYu9HedxOaeiC7SwMsK0HyfzdroES7PkQdDrEuIPKpT5E4eA3JCE2RRgJwEA==","signatures":[{"sig":"MEUCIFpDYM7TV6ISiEn2v5KEXrGrrJsXCxJdNV2+aYV6uugUAiEA0/zFVrB6E0mgNpErtcHNdGOIbDDTAartE3r3tdnRpjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116449},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"3bc070f23cd44efb385be072e0d0a45bcf06fedb","scripts":{"gcal":"tsx src/index.ts","build":"tsc","start":"tsx src/index.ts","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"ashikpy","email":"ashikofficial455@gmail.com"},"_npmVersion":"11.6.2","description":"Manage Google Calendar directly from your terminal","directories":{},"_nodeVersion":"25.2.1","dependencies":{"open":"^11.0.0","chalk":"^5.4.1","date-fns":"^4.1.0","commander":"^13.1.0","googleapis":"^174.0.1","oh-my-logo":"^0.5.0","@inquirer/prompts":"^7.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/gcal_1.0.0_1786521358162_0.8496037596178865","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ashikpy/gcal","version":"1.0.1","keywords":["gcal","google-calendar","cli","terminal"],"author":{"name":"Jessica Charlet"},"license":"MIT","_id":"@ashikpy/gcal@1.0.1","maintainers":[{"name":"ashikpy","email":"ashikofficial455@gmail.com"}],"bin":{"gcal":"dist/index.js"},"dist":{"shasum":"d38aa7a99c72609f45c8a54af77043fe8ab99811","tarball":"https://registry.npmjs.org/@ashikpy/gcal/-/gcal-1.0.1.tgz","fileCount":58,"integrity":"sha512-9h+O9DoXGC9+Ue6+rugl7Kt0MOAMT5TOnCBGKm0rRDCArXTaVgFrN1CFYnQFabxWxEs+LZRzLU0AISNDlrFHZQ==","signatures":[{"sig":"MEUCIQDNKPLVEXw5k7aFC/dbWNvcXPgUnuqBpEzbbXL2CeioXgIgJjPXGlXveAuYOrHB9Aw5tIjSnhelKk0aLRDUJxneLLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116686},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"3bc070f23cd44efb385be072e0d0a45bcf06fedb","scripts":{"gcal":"tsx src/index.ts","build":"tsc","start":"tsx src/index.ts","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"ashikpy","email":"ashikofficial455@gmail.com"},"_npmVersion":"11.6.2","description":"Manage Google Calendar directly from your terminal","directories":{},"_nodeVersion":"25.2.1","dependencies":{"open":"^11.0.0","chalk":"^5.4.1","date-fns":"^4.1.0","commander":"^13.1.0","googleapis":"^174.0.1","oh-my-logo":"^0.5.0","@inquirer/prompts":"^7.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/gcal_1.0.1_1786521636198_0.8385870692995967","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ashikpy/gcal","version":"1.1.0","description":"Manage Google Calendar directly from your terminal","main":"dist/index.js","type":"module","bin":{"gcal":"dist/index.js"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","prepare":"npm run build","start":"tsx src/index.ts","gcal":"tsx src/index.ts"},"keywords":["gcal","google-calendar","cli","terminal"],"author":{"name":"Jessica Charlet"},"license":"MIT","dependencies":{"@inquirer/prompts":"^7.3.0","chalk":"^5.4.1","chrono-node":"^2.10.1","commander":"^13.1.0","date-fns":"^4.1.0","googleapis":"^174.0.1","oh-my-logo":"^0.5.0","open":"^11.0.0"},"devDependencies":{"@types/node":"^22.13.1","tsx":"^4.19.2","typescript":"^5.7.3"},"gitHead":"4b5e3d722c2d27ffd3353235b0a001a9cf8e8c4a","types":"./dist/index.d.ts","_id":"@ashikpy/gcal@1.1.0","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-ouKt4XlFXXENHZnKo+SdnpE1fzPopILdrFXPCPeV2GUAwLQI10uiSRD54rSJoh4zNpLg8t0sJ0V+JE3QeD1/cg==","shasum":"028435041eed30cbb1290468d7f7fe72a4b7ab3b","tarball":"https://registry.npmjs.org/@ashikpy/gcal/-/gcal-1.1.0.tgz","fileCount":64,"unpackedSize":128788,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEsrEqw7MXfN3j5sbvDsD5CUyHJdoVe8OrW1+wwDoKZtAiAgak0B4RvJ06suyLm9ypzHaiNc6LqiFx9kW9ivNtuTZw=="}]},"_npmUser":{"name":"ashikpy","email":"ashikofficial455@gmail.com"},"directories":{},"maintainers":[{"name":"ashikpy","email":"ashikofficial455@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gcal_1.1.0_1786524502425_0.6990992330370438"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-12T07:55:57.847Z","modified":"2026-08-12T08:48:22.688Z","1.0.0":"2026-08-12T07:55:58.314Z","1.0.1":"2026-08-12T08:00:36.352Z","1.1.0":"2026-08-12T08:48:22.543Z"},"author":{"name":"Jessica Charlet"},"license":"MIT","keywords":["gcal","google-calendar","cli","terminal"],"description":"Manage Google Calendar directly from your terminal","maintainers":[{"name":"ashikpy","email":"ashikofficial455@gmail.com"}],"readme":"# gcal\n\nManage Google Calendar directly from your terminal.\n\n`gcal` is a fast, responsive command-line client built with Node.js, TypeScript, Commander, `oh-my-logo` TUI, and the official Google Calendar API.\n\n## Features\n\n- 📹 **Google Meet Auto-Creation & Multi-Recipient Invites**: Auto-generate Google Meet links and send simultaneous email invitations (`--meet`, `--email \"user1@gmail.com user2@gmail.com\"`).\n- ⚡ **Direct Natural Language Scheduling**: Pass prompt strings directly like `gcal \"make meeting at 9:00 today\"` (Instant 0ms local execution via `chrono-node`).\n- 🖥️ **Interactive TUI Dashboard**: Launch an interactive terminal dashboard using `gcal tui` or `gcal --tui`.\n- 🤖 **Cloud AI Event Creation**: Use `--ai` powered by NVIDIA NIM API (`meta/llama-3.1-70b-instruct`) for neural language parsing.\n- ⚙️ **Interactive Setup & Diagnostics**: Guided setup wizard (`gcal setup`), system health check (`gcal status`), and factory reset (`gcal reset`).\n- 🔐 **OAuth 2.0 Authentication**: Direct & secure authentication with Google.\n- 📅 **List Today & Upcoming Events**: View `today` or `upcoming` events grouped by day.\n- ➕ **Add & Meet Commands**: Flexible command flags (`--date`, `--time`, `--duration`, `--at`, `--email`, `--meet`) or interactive prompts.\n- ✏️ **Edit & Delete Events**: Modify or remove events cleanly using event IDs.\n- 🔍 **Search**: Search across events by keyword or title.\n- 🗓️ **Calendars List**: View all available Google Calendars for your account.\n\n## Installation\n\n### For End-Users (Global Installation)\n\nInstall directly from NPM without cloning the repo:\n\n```bash\nnpm install -g @ashikpy/gcal\n```\n\nOr run directly without installing:\n\n```bash\nnpx @ashikpy/gcal today\n```\n\n### For Contributors (Clone & Build)\n\n```bash\n# Clone the repository\ngit clone https://github.com/jessicacharlet/gcal.git\ncd gcal\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n\n# Link binary globally\nnpm link\n```\n\n## OAuth 2.0 Configuration\n\n`gcal` connects directly to your Google Calendar account using Google's official OAuth 2.0 API. \n\n### How to Get Your Free Google OAuth Credentials (5-Minute Setup)\n\nTo use `gcal`, you need a **Client ID** and **Client Secret** from Google Cloud Console. Here is how to get them step-by-step:\n\n#### Step 1: Create a Google Cloud Project\n1. Go to [console.cloud.google.com](https://console.cloud.google.com/) and sign in with your Google account.\n2. Click the project selector dropdown at the top navigation bar → click **New Project**.\n3. Name your project `gcal-cli` and click **Create**.\n\n#### Step 2: Enable the Google Calendar API\n1. In the top search bar, search for **Google Calendar API**.\n2. Click on **Google Calendar API** from the results → click the blue **ENABLE** button.\n\n#### Step 3: Configure the OAuth Consent Screen\n1. On the left sidebar, go to **APIs & Services > OAuth consent screen**.\n2. Select **External** and click **Create**.\n3. Fill in **App name** (e.g., `gcal`) and your email for **User support email** and **Developer contact info**. Click **Save and Continue**.\n4. Skip the **Scopes** page by clicking **Save and Continue**.\n5. On the **Test users** page, click **+ ADD USERS**, type your personal `@gmail.com` email address, and click **Add**. *(This grants your account permission to log in).* Click **Save and Continue**.\n\n#### Step 4: Create Desktop OAuth Credentials\n1. On the left sidebar, go to **APIs & Services > Credentials**.\n2. Click **+ CREATE CREDENTIALS** at the top → select **OAuth client ID**.\n3. Set **Application type** to **Desktop app**.\n4. Name it `gcal-desktop` and click **Create**.\n5. Copy your **Client ID** and **Client Secret**.\n\n#### Step 5: Save Credentials to `gcal`\nRun the interactive setup wizard in your terminal:\n\n```bash\ngcal setup\n```\n\nOr manually save your credentials in `~/.config/gcal/config.json`:\n\n```json\n{\n  \"clientId\": \"YOUR_CLIENT_ID.apps.googleusercontent.com\",\n  \"clientSecret\": \"YOUR_CLIENT_SECRET\"\n}\n```\n\n## NVIDIA NIM API Key Configuration (`.env`)\n\n`gcal` supports AI natural language event creation powered by NVIDIA NIM (`meta/llama-3.1-70b-instruct`).\n\n### How to Get Your Free NVIDIA API Key (3-Minute Setup)\n\n1. **Sign In / Register:** Go to [build.nvidia.com](https://build.nvidia.com) and sign in with your NVIDIA account.\n2. **Generate Key:** Navigate to [build.nvidia.com/settings/api-keys](https://build.nvidia.com/settings/api-keys) and click **Get API Key** / **Generate API Key**.\n3. **Copy Key:** Copy your key starting with `nvapi-`.\n\n### Setting Up `.env`\n\nCopy `.env.example` to `.env` in the repository root:\n\n```bash\ncp .env.example .env\n```\n\nAdd your API key inside `.env`:\n\n```env\nNVIDIA_API_KEY=nvapi-your-key-here\n```\n\nYou can also save `\"nvidiaApiKey\"` inside `~/.config/gcal/config.json` via `gcal setup`.\n\n## Authentication\n\nConnect your Google account via browser-based OAuth 2.0:\n\n```bash\ngcal login\n```\n\nTokens are stored securely at `~/.config/gcal/tokens.json` (`0600` permissions).\n\nTo disconnect your session:\n\n```bash\ngcal logout\n```\n\n## Commands & Usage\n\n### 1. Setup, Health & Reset\n```bash\n# Interactive setup wizard to configure Google OAuth Client ID & Secret\ngcal setup\n\n# Check configuration health & account login status\ngcal status\n\n# Factory reset all local config & tokens\ngcal reset\n```\n\n### 2. Natural Language Scheduling\n\n#### Instant Local Parsing (No API key required)\n```bash\n# Direct positional argument\ngcal \"read book tomorrow 8pm\"\n\n# With email recipients\ngcal \"make a meet with Alex tomorrow 3pm\" --email \"user1@gmail.com user2@gmail.com\"\n\n# Subcommand alias\ngcal parse \"Team sync tomorrow 3pm to 4:30pm in Room 4B\" -y\n```\n\n#### Cloud LLM AI Parsing (Powered by NVIDIA NIM Llama 3.1 70B)\n```bash\n# Top-level --ai option (requires NVIDIA API key in gcal setup)\ngcal --ai \"Doctor appointment on Friday from 10am to 11:30am\" --email \"colleague@gmail.com\"\n```\n\n### 3. Google Meet Auto-Creation\n```bash\n# Using --meet flag with recipient email\ngcal --meet \"jessicacharlet04@gmail.com\"\n\n# Dedicated meet command\ngcal meet user@example.com \"Quick Sync Call\"\n```\n\n### 4. Interactive Terminal UI (TUI) Dashboard\n```bash\n# Launch interactive dashboard\ngcal tui\n\n# Or with --tui flag\ngcal --tui\n```\n\n### 5. Today's & Upcoming Events\n```bash\n# Today's timeline\ngcal today\n\n# Upcoming events\ngcal upcoming\ngcal upcoming --days 14\n```\n\n### 6. Add Event with Flags\n```bash\n# Add event with Google Meet link & multiple recipient emails\ngcal add \"Team Sync\" --at \"tomorrow 3pm\" --duration 1h --meet --email \"user1@gmail.com user2@gmail.com\"\n\n# Bypass confirmation prompt (-y / --yes)\ngcal add \"Weekly Standup\" --date tomorrow --time 09:00 -y\n```\n\n### 7. Edit & Delete Events\n```bash\n# Edit using flags\ngcal edit <event-id> --title \"Updated Standup\" --time 09:30 --yes\n\n# Delete event\ngcal delete <event-id> --yes\n```\n\n### 8. Search & List Calendars\n```bash\n# Search events\ngcal search \"meeting\"\n\n# List calendars\ngcal calendars\n```\n\n### 9. Display ASCII Banner Logo\n```bash\ngcal banner\n```\n\n## Architecture\n\n```text\nCLI commands (Commander) & TUI (Inquirer / oh-my-logo)\n     ↓\nCalendar Service (GoogleCalendarService)\n     ↓\nGoogle Client (GoogleCalendarClient & GoogleAuthManager)\n     ↓\nGoogle Calendar API v3\n```\n\n- `src/commands/`: CLI command definitions (`setup`, `status`, `reset`, `today`, `upcoming`, `add`, `meet`, `ai`, `tui`, `edit`, `delete`, `search`, `calendars`, `login`, `logout`).\n- `src/google/`: Google OAuth 2.0 authorization manager and API v3 client wrapper.\n- `src/services/`: Modular `CalendarService` interface and `GoogleCalendarService` implementation.\n- `src/ui/`: Terminal formatters, `oh-my-logo` banner styling, error handlers, and interactive prompts.\n- `src/utils/`: Natural date parsing, duration, and email validation utilities.\n\n## Contributing\n\nWe welcome contributions of all kinds! Check out our beginner-friendly [Contributing Guide](CONTRIBUTING.md) to get started step-by-step.\n","readmeFilename":"README.md"}