This commit is contained in:
KS Jannette
2026-02-20 12:36:46 -05:00
parent fc3223a119
commit 21b4e656f6
6 changed files with 32 additions and 12 deletions

10
.gitignore vendored
View File

@@ -1,11 +1,11 @@
node_modules/ node_modules/
build/ build/
# OAuth secrets # OAuth secrets (inside accountsAndCredentials/, example files are NOT ignored)
credentials.json accountsAndCredentials/credentials.json
credentials.* accountsAndCredentials/accounts.json
token*.json accountsAndCredentials/token*.json
accounts.json !accountsAndCredentials/*.example.json
# Runtime output # Runtime output
mailSummaries/ mailSummaries/

View File

@@ -0,0 +1,11 @@
{
"installed": {
"client_id": "",
"project_id": "",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "",
"redirect_uris": ["http://localhost"]
}
}

View File

@@ -0,0 +1,7 @@
{
"access_token": "",
"refresh_token": "",
"scope": "https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/calendar.events",
"token_type": "Bearer",
"expiry_date": 0
}

View File

@@ -5,8 +5,9 @@ import readline from "readline";
const __dirname = path.dirname(new URL(import.meta.url).pathname); const __dirname = path.dirname(new URL(import.meta.url).pathname);
const PROJECT_ROOT = path.resolve(__dirname, ".."); const PROJECT_ROOT = path.resolve(__dirname, "..");
const CREDENTIALS_PATH = path.join(PROJECT_ROOT, "credentials.json"); const SECRETS_DIR = path.join(PROJECT_ROOT, "accountsAndCredentials");
const ACCOUNTS_PATH = path.join(PROJECT_ROOT, "accounts.json"); const CREDENTIALS_PATH = path.join(SECRETS_DIR, "credentials.json");
const ACCOUNTS_PATH = path.join(SECRETS_DIR, "accounts.json");
const SCOPES = [ const SCOPES = [
"https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.modify",
@@ -26,7 +27,7 @@ function resolveTokenPath(accountKey: string): string {
`Unknown account "${accountKey}". Available: ${available}` `Unknown account "${accountKey}". Available: ${available}`
); );
} }
return path.join(PROJECT_ROOT, acct.tokenFile); return path.join(SECRETS_DIR, acct.tokenFile);
} }
async function authorize(): Promise<void> { async function authorize(): Promise<void> {
@@ -44,7 +45,7 @@ async function authorize(): Promise<void> {
"1. Go to https://console.cloud.google.com/\n" + "1. Go to https://console.cloud.google.com/\n" +
"2. Create a project and enable the Gmail, Sheets, and Calendar APIs\n" + "2. Create a project and enable the Gmail, Sheets, and Calendar APIs\n" +
"3. Create OAuth 2.0 credentials (Desktop app type)\n" + "3. Create OAuth 2.0 credentials (Desktop app type)\n" +
"4. Download the JSON and save it as credentials.json in the project root\n" "4. Download the JSON and save it as credentials.json in the accountsAndCredentials/ folder\n"
); );
process.exit(1); process.exit(1);
} }

View File

@@ -9,8 +9,9 @@ import path from "path";
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const __dirname = path.dirname(new URL(import.meta.url).pathname); const __dirname = path.dirname(new URL(import.meta.url).pathname);
export const PROJECT_ROOT = path.resolve(__dirname, "..", ".."); export const PROJECT_ROOT = path.resolve(__dirname, "..", "..");
const CREDENTIALS_PATH = path.join(PROJECT_ROOT, "credentials.json"); const SECRETS_DIR = path.join(PROJECT_ROOT, "accountsAndCredentials");
const ACCOUNTS_PATH = path.join(PROJECT_ROOT, "accounts.json"); const CREDENTIALS_PATH = path.join(SECRETS_DIR, "credentials.json");
const ACCOUNTS_PATH = path.join(SECRETS_DIR, "accounts.json");
const CLASSIFY_PROMPT_PATH = path.join(PROJECT_ROOT, "classify-emails.txt"); const CLASSIFY_PROMPT_PATH = path.join(PROJECT_ROOT, "classify-emails.txt");
const ACTION_PROMPT_PATH = path.join( const ACTION_PROMPT_PATH = path.join(
PROJECT_ROOT, "src", "prompts", "take-action-on-emails.txt" PROJECT_ROOT, "src", "prompts", "take-action-on-emails.txt"
@@ -46,7 +47,7 @@ export const getTokenPath = (account: string): string => {
`Unknown account "${account}". Available accounts: ${available}` `Unknown account "${account}". Available accounts: ${available}`
); );
} }
return path.join(PROJECT_ROOT, acct.tokenFile); return path.join(SECRETS_DIR, acct.tokenFile);
}; };
export const getSummaryPath = (account: string): string => { export const getSummaryPath = (account: string): string => {