From 6d2956262a0eb9d3f0703d36a3d2258dec5ebc5a Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 28 Jun 2026 07:09:22 +0000 Subject: [PATCH] feat(farm-aggregator): add Dropbox folder explorer script Recursively lists /Farm folder contents so you can see what data is available to route into DairyComp / FeedLync subfolders. Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01KBD2dN2KEjzz3UQFa9hEpu --- farm-aggregator/scripts/dropbox-explore.js | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 farm-aggregator/scripts/dropbox-explore.js diff --git a/farm-aggregator/scripts/dropbox-explore.js b/farm-aggregator/scripts/dropbox-explore.js new file mode 100644 index 0000000..d4d64a3 --- /dev/null +++ b/farm-aggregator/scripts/dropbox-explore.js @@ -0,0 +1,39 @@ +/** + * Lists all files under /Farm in Dropbox so you can see what's available. + * Run from the farm-aggregator directory: + * node scripts/dropbox-explore.js + */ +import 'dotenv/config'; +import { Dropbox } from 'dropbox'; + +const dbx = new Dropbox({ + clientId: process.env.DROPBOX_APP_KEY, + clientSecret: process.env.DROPBOX_APP_SECRET, + refreshToken: process.env.DROPBOX_REFRESH_TOKEN, +}); + +async function listFolder(path, indent = '') { + try { + const res = await dbx.filesListFolder({ path, recursive: false }); + for (const entry of res.result.entries) { + if (entry['.tag'] === 'folder') { + console.log(`${indent}📁 ${entry.name}/`); + await listFolder(entry.path_lower, indent + ' '); + } else { + const size = entry.size ? `(${(entry.size / 1024).toFixed(1)} KB)` : ''; + const date = entry.client_modified?.slice(0, 10) ?? '?'; + console.log(`${indent}📄 ${entry.name} ${size} — ${date}`); + } + } + if (res.result.entries.length === 0) { + console.log(`${indent}(empty)`); + } + } catch (e) { + console.log(`${indent}⚠ Could not read ${path}: ${e.message}`); + } +} + +console.log('Scanning your Dropbox /Farm folder...\n'); +listFolder('/Farm').then(() => { + console.log('\nDone. Copy relevant files into /Farm/DairyComp or /Farm/FeedLync.'); +});