feat: migrate to Bun-native, fix Planner task dates, remove hardcoded test values

- Remove dotenv dependency, implement lightweight Bun-native env loader
- Replace Node.js fs/path with Bun file APIs (Bun.file, Bun.write)
- Fix Planner task creation to use form's due date with proper UTC handling
- Make table name, Planner assignee configurable via activeConfig and env vars
- Remove all hardcoded test values for PROD readiness
- Update NOTES.md with PROD mode checklist
This commit is contained in:
2026-01-07 13:40:23 +00:00
parent 6f02194c23
commit d4628eb9a1
3 changed files with 65 additions and 3 deletions
+42
View File
@@ -0,0 +1,42 @@
# Session Notes
## 2026-01-07
### Context
- Picked up the Job-Form project
- Stack: TypeScript server, HTML frontend with TailwindCSS
- Current version: v1.0.0-beta4
### Project Summary
- **Purpose**: Job creation form with Excel sync and PocketBase backend
- **Features**:
- Form submission → PocketBase record → Excel sync
- Teams channel notifications (Adaptive Cards)
- Teams message management UI
### Known Issues / Limitations
- Teams message deletion not supported via Graph API (HTTP 405) — platform limitation
- Workaround: Delete messages directly in Teams client
### Today's Work
- [x] Migrate to full Bun-native stack (removed dotenv, use Bun file APIs)
- [x] Fix Planner task creation to use form's due date with proper UTC handling
- [x] Remove hardcoded test values — now uses activeConfig for all environments
- [x] Make assignee configurable via `PLANNER_ASSIGNEE_ID` env var
### PROD Mode Checklist
Before switching `MODE = 'PROD'`, ensure `/home/admin/secrets/.env` contains:
- `PB_COLLECTION` - PocketBase collection name (e.g., `Job_Info_Prod`)
- `EXCEL_TABLE_NAME` - Excel table name (e.g., `Job_List`)
- `PLANNER_GROUP_ID` - Microsoft Planner group ID
- `PLANNER_PLAN_ID` - Microsoft Planner plan ID
- `PLANNER_BUCKET_ID` - Microsoft Planner bucket ID
- `PLANNER_ASSIGNEE_ID` - User ID for Planner task assignee (e.g., `1a6e9d10-138a-43e4-a09e-1f50463148c9`)
- `PLANNER_ASSIGNEE_NAME` - Display name for assignee (e.g., `Alex Ewing`)
- All standard Azure AD + PocketBase creds (CLIENT_ID, CLIENT_SECRET, etc.)
**No hardcoded test values remain in the codebase.**
---
_Last updated: 2026-01-07_
+23 -2
View File
@@ -1,8 +1,29 @@
import { config } from 'dotenv';
import { Client } from '@microsoft/microsoft-graph-client';
config({ path: '/home/admin/secrets/.env' });
// Bun-native env loader
async function loadEnv(filePath: string) {
const file = Bun.file(filePath);
if (!(await file.exists())) {
console.warn(`⚠ Env file not found: ${filePath}`);
return;
}
const text = await file.text();
for (const line of text.split('\n')) {
const trimmed = line.trim();
if (!trimmed || trimmed.startsWith('#')) continue;
const eqIndex = trimmed.indexOf('=');
if (eqIndex === -1) continue;
const key = trimmed.slice(0, eqIndex).trim();
let value = trimmed.slice(eqIndex + 1).trim();
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
value = value.slice(1, -1);
}
process.env[key] = value;
}
}
await loadEnv('/home/admin/secrets/.env');
async function getGraphToken() {
const tokenEndpoint = `https://login.microsoftonline.com/${process.env.TENANT_ID}/oauth2/v2.0/token`;
-1
View File
@@ -9,7 +9,6 @@
},
"dependencies": {
"@microsoft/microsoft-graph-client": "^3.0.7",
"dotenv": "^17.2.3",
"hono": "^4.10.8",
"pocketbase": "^0.26.5"
},