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/
build/
# OAuth secrets
credentials.json
credentials.*
token*.json
accounts.json
# OAuth secrets (inside accountsAndCredentials/, example files are NOT ignored)
accountsAndCredentials/credentials.json
accountsAndCredentials/accounts.json
accountsAndCredentials/token*.json
!accountsAndCredentials/*.example.json
# Runtime output
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 PROJECT_ROOT = path.resolve(__dirname, "..");
const CREDENTIALS_PATH = path.join(PROJECT_ROOT, "credentials.json");
const ACCOUNTS_PATH = path.join(PROJECT_ROOT, "accounts.json");
const SECRETS_DIR = path.join(PROJECT_ROOT, "accountsAndCredentials");
const CREDENTIALS_PATH = path.join(SECRETS_DIR, "credentials.json");
const ACCOUNTS_PATH = path.join(SECRETS_DIR, "accounts.json");
const SCOPES = [
"https://www.googleapis.com/auth/gmail.modify",
@@ -26,7 +27,7 @@ function resolveTokenPath(accountKey: string): string {
`Unknown account "${accountKey}". Available: ${available}`
);
}
return path.join(PROJECT_ROOT, acct.tokenFile);
return path.join(SECRETS_DIR, acct.tokenFile);
}
async function authorize(): Promise<void> {
@@ -44,7 +45,7 @@ async function authorize(): Promise<void> {
"1. Go to https://console.cloud.google.com/\n" +
"2. Create a project and enable the Gmail, Sheets, and Calendar APIs\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);
}

View File

@@ -9,8 +9,9 @@ import path from "path";
// ---------------------------------------------------------------------------
const __dirname = path.dirname(new URL(import.meta.url).pathname);
export const PROJECT_ROOT = path.resolve(__dirname, "..", "..");
const CREDENTIALS_PATH = path.join(PROJECT_ROOT, "credentials.json");
const ACCOUNTS_PATH = path.join(PROJECT_ROOT, "accounts.json");
const SECRETS_DIR = path.join(PROJECT_ROOT, "accountsAndCredentials");
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 ACTION_PROMPT_PATH = path.join(
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}`
);
}
return path.join(PROJECT_ROOT, acct.tokenFile);
return path.join(SECRETS_DIR, acct.tokenFile);
};
export const getSummaryPath = (account: string): string => {