{"_id":"@aadvik-teklabs/onedrive-uploader","_rev":"3-36068f80157ebf3435c9260591ab9c50","name":"@aadvik-teklabs/onedrive-uploader","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@aadvik-teklabs/onedrive-uploader","version":"1.0.0","keywords":["onedrive","microsoft-graph","uploader","asset-management","oauth2"],"author":{"name":"Aadvik Labs"},"license":"MIT","_id":"@aadvik-teklabs/onedrive-uploader@1.0.0","maintainers":[{"name":"aadvik-teklabs","email":"info@aadviklabs.com"}],"dist":{"shasum":"b7765a2ee8e09547f524e97a910ad8a8a25543d1","tarball":"https://registry.npmjs.org/@aadvik-teklabs/onedrive-uploader/-/onedrive-uploader-1.0.0.tgz","fileCount":5,"integrity":"sha512-X7lUyTNtBdnq36YJpDanlES3Az6fLgFCshQzzaIIvVQvenFRcOF65kneRgjUZUq4e4TNnShetGO8yPVtB9CJUg==","signatures":[{"sig":"MEUCICEzt1m5Ytmd4dY9J0CaTyINdqjFgAjpjcXPZPO8g8z/AiEA7dDKtVeA2QczE7SeTg7Lze/a4HwQSWgFWq4WQ7Hy14I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12120},"main":"index.js","gitHead":"b192fe7a3e3494097e90c36c8d6e712f448a3681","scripts":{"dev":"nodemon demo/app.js","test":"echo \"Error: no test specified\" && exit 1","start":"node demo/app.js"},"_npmUser":{"name":"aadvik-teklabs","email":"info@aadviklabs.com"},"_npmVersion":"11.12.1","description":"Premium OneDrive Asset Uploader with a modern drag-and-drop UI and automated OAuth2 token management.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"dotenv":"^16.4.1","multer":"^1.4.5-lts.1","isomorphic-fetch":"^3.0.0","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"cors":"^2.8.6","yamljs":"^0.3.0","express":"^5.2.1","nodemon":"^3.1.0","swagger-ui-express":"^5.0.1"},"_npmOperationalInternal":{"tmp":"tmp/onedrive-uploader_1.0.0_1783078744363_0.9772107971206279","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aadvik-teklabs/onedrive-uploader","version":"1.0.1","keywords":["onedrive","microsoft-graph","uploader","asset-management","oauth2"],"author":{"name":"Aadvik Labs"},"license":"MIT","_id":"@aadvik-teklabs/onedrive-uploader@1.0.1","maintainers":[{"name":"aadvik-teklabs","email":"info@aadviklabs.com"}],"dist":{"shasum":"3a380fbd42592da82bcb828dcfcfacbd27eff95a","tarball":"https://registry.npmjs.org/@aadvik-teklabs/onedrive-uploader/-/onedrive-uploader-1.0.1.tgz","fileCount":5,"integrity":"sha512-wAjpSM5QxIMByjMPdJ/x2cNWBkb0s3Wbl7E90MRnG/NdPVP3yJkO3CwJ9MNYMFSM8Tkez6yxHkncFL+5Z9MxDw==","signatures":[{"sig":"MEQCIAQcQBzHIjwVIGFt/Ib2dkruWg6W9kYPtk9idyMxPJz6AiAAxbuex+/BMu8J0VvPPSX/QopRqVDQqKyzJS8wnwdfEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12120},"main":"index.js","gitHead":"b192fe7a3e3494097e90c36c8d6e712f448a3681","scripts":{"dev":"nodemon demo/app.js","test":"echo \"Error: no test specified\" && exit 1","start":"node demo/app.js"},"_npmUser":{"name":"aadvik-teklabs","email":"info@aadviklabs.com"},"_npmVersion":"11.12.1","description":"Premium OneDrive Asset Uploader with a modern drag-and-drop UI and automated OAuth2 token management.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"dotenv":"^16.4.1","multer":"^1.4.5-lts.1","isomorphic-fetch":"^3.0.0","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"cors":"^2.8.6","yamljs":"^0.3.0","express":"^5.2.1","nodemon":"^3.1.0","swagger-ui-express":"^5.0.1"},"_npmOperationalInternal":{"tmp":"tmp/onedrive-uploader_1.0.1_1783080112678_0.8567352898353162","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aadvik-teklabs/onedrive-uploader","version":"1.0.2","description":"Premium OneDrive Asset Uploader with a modern drag-and-drop UI and automated OAuth2 token management.","main":"index.js","scripts":{"start":"node demo/app.js","dev":"nodemon demo/app.js","test":"echo \"Error: no test specified\" && exit 1"},"keywords":["onedrive","microsoft-graph","uploader","asset-management","oauth2"],"author":{"name":"Aadvik Labs"},"license":"MIT","dependencies":{"@microsoft/microsoft-graph-client":"^3.0.7","dotenv":"^16.4.1","isomorphic-fetch":"^3.0.0","multer":"^1.4.5-lts.1"},"devDependencies":{"cors":"^2.8.6","express":"^5.2.1","nodemon":"^3.1.0","swagger-ui-express":"^5.0.1","yamljs":"^0.3.0"},"gitHead":"c89b44503de584afedf75e9eedbafc4553bf45be","_id":"@aadvik-teklabs/onedrive-uploader@1.0.2","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-UUuGwIRJp52J9xH6zjdUHwDnzl+ZoDoCkSagiydT+gsQgOAupak00RjlsYf2VnHy45woIV8Ma7HStkeJ1SUgjQ==","shasum":"832d3aee3db2fc0553202bad66d90b0e5ab379b6","tarball":"https://registry.npmjs.org/@aadvik-teklabs/onedrive-uploader/-/onedrive-uploader-1.0.2.tgz","fileCount":5,"unpackedSize":16754,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCs9+d9U8fgbxWlngkc56iRXmHFgtsvJBQq8Vv44rr6rwIhANUkOC3tTR9cSX9I52Fqeqau14LiGtA5RuVqNQzk10ZB"}]},"_npmUser":{"name":"aadvik-teklabs","email":"info@aadviklabs.com"},"directories":{},"maintainers":[{"name":"aadvik-teklabs","email":"info@aadviklabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/onedrive-uploader_1.0.2_1783081313623_0.9207933816085976"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-03T11:39:04.251Z","modified":"2026-07-03T12:21:53.889Z","1.0.0":"2026-07-03T11:39:04.483Z","1.0.1":"2026-07-03T12:01:52.821Z","1.0.2":"2026-07-03T12:21:53.789Z"},"author":{"name":"Aadvik Labs"},"license":"MIT","keywords":["onedrive","microsoft-graph","uploader","asset-management","oauth2"],"description":"Premium OneDrive Asset Uploader with a modern drag-and-drop UI and automated OAuth2 token management.","maintainers":[{"name":"aadvik-teklabs","email":"info@aadviklabs.com"}],"readme":"# @aadvik-teklabs/onedrive-uploader\r\n\r\n[![npm version](https://img.shields.io/npm/v/@aadvik-teklabs/onedrive-uploader.svg)](https://www.npmjs.com/package/@aadvik-teklabs/onedrive-uploader)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\r\n\r\nA production-ready **Microsoft OneDrive** asset uploader for Node.js. Handles OAuth2 refresh-token flow automatically (with in-memory token caching) and exposes a simple class-based API for uploading, listing, downloading, and deleting files via the Microsoft Graph API.\r\n\r\n---\r\n\r\n## ✨ Features\r\n\r\n- 🚀 **Simple API** — `OneDriveStorage` class with `uploadFile`, `listFiles`, `downloadFile`, `deleteFile`\r\n- 🔐 **Automatic OAuth2** — refresh-token flow with cached access tokens (auto-refreshed 60s before expiry)\r\n- 📁 **Folder support** — upload to `root` or any folder by ID\r\n- 🌐 **Multi-tenant** — supports `common` or specific Azure AD tenant IDs\r\n- ⚡ **Microsoft Graph** — uses the official `@microsoft/microsoft-graph-client`\r\n\r\n---\r\n\r\n## 📦 Installation\r\n\r\n```bash\r\nnpm install @aadvik-teklabs/onedrive-uploader\r\n```\r\n\r\n---\r\n\r\n## 🔧 Setup\r\n\r\n### 1. Register an Azure AD application\r\n\r\n1. Go to <https://portal.azure.com> → **Azure Active Directory** → **App registrations** → **New registration**.\r\n2. Add a **Web** redirect URI (e.g. `http://localhost:3000/callback`).\r\n3. Under **API permissions**, add delegated permissions: `Files.ReadWrite.All` and `offline_access`.\r\n4. Under **Certificates & secrets**, create a **Client secret**.\r\n5. Complete the OAuth2 auth-code flow once to obtain a **Refresh Token** (a helper script `verify-oauth.js` is included in the repo).\r\n\r\n### 2. Create a `.env` file\r\n\r\n```env\r\nMS_CLIENT_ID=your-azure-app-client-id\r\nMS_CLIENT_SECRET=your-azure-app-client-secret\r\nMS_TENANT_ID=common\r\nMS_REFRESH_TOKEN=your-long-lived-refresh-token\r\n```\r\n\r\n---\r\n\r\n## 🚀 Usage\r\n\r\n### Basic upload\r\n\r\n```js\r\nconst { OneDriveStorage } = require('@aadvik-teklabs/onedrive-uploader');\r\nconst fs = require('fs');\r\n\r\nconst storage = new OneDriveStorage();\r\n\r\nasync function main() {\r\n    const buffer = fs.readFileSync('./photo.jpg');\r\n    const result = await storage.uploadFile(buffer, 'photo.jpg');\r\n    console.log('Uploaded:', result);\r\n}\r\n\r\nmain().catch(console.error);\r\n```\r\n\r\n### Upload to a specific folder\r\n\r\n```js\r\nconst result = await storage.uploadFile(buffer, 'invoice.pdf', {\r\n    folderId: '01ABCD1234EFGH5678',\r\n});\r\n```\r\n\r\n### List files\r\n\r\n```js\r\nconst files = await storage.listFiles('root'); // or a folder ID\r\nconsole.log(files);\r\n```\r\n\r\n### Download a file\r\n\r\n```js\r\nconst stream = await storage.downloadFile('01ABCD1234EFGH5678');\r\n```\r\n\r\n### Delete a file\r\n\r\n```js\r\nawait storage.deleteFile('01ABCD1234EFGH5678');\r\n```\r\n\r\n### Express integration example\r\n\r\n```js\r\nconst express = require('express');\r\nconst multer = require('multer');\r\nconst { OneDriveStorage } = require('@aadvik-teklabs/onedrive-uploader');\r\n\r\nconst app = express();\r\nconst upload = multer({ storage: multer.memoryStorage() });\r\nconst storage = new OneDriveStorage();\r\n\r\napp.post('/upload', upload.single('file'), async (req, res) => {\r\n    try {\r\n        const result = await storage.uploadFile(req.file.buffer, req.file.originalname);\r\n        res.json({ success: true, data: result });\r\n    } catch (err) {\r\n        res.status(500).json({ error: err.message });\r\n    }\r\n});\r\n\r\napp.listen(3000);\r\n```\r\n\r\n---\r\n\r\n## 📖 API Reference\r\n\r\n### `new OneDriveStorage(config?)`\r\n\r\nCreates a new client instance. Reads credentials from environment variables (`MS_CLIENT_ID`, `MS_CLIENT_SECRET`, `MS_TENANT_ID`, `MS_REFRESH_TOKEN`).\r\n\r\n### `uploadFile(buffer, fileName, options?)`\r\n\r\n- `buffer` — `Buffer` of file contents\r\n- `fileName` — target file name\r\n- `options.folderId` — optional folder ID (defaults to `'root'`)\r\n\r\n### `listFiles(folderId)`\r\nReturns an array of files in the given folder.\r\n\r\n### `downloadFile(fileId)`\r\nReturns a download stream.\r\n\r\n### `deleteFile(fileId)`\r\nDeletes a file by ID.\r\n\r\n### `isAvailable()`\r\nReturns `true` after successful authentication.\r\n\r\n---\r\n\r\n## 🔒 Security\r\n\r\n- Never commit `.env` to source control.\r\n- Rotate the `MS_REFRESH_TOKEN` if it may have been exposed.\r\n- Use least-privilege scopes on the Azure AD app.\r\n\r\n---\r\n\r\n## 📝 License\r\n\r\nMIT © [Aadvik Labs](https://github.com/AadvikLabs)\r\n\r\n## 🔗 Links\r\n\r\n- [GitHub Repository](https://github.com/AadvikLabs/npm-onedrive-uploder)\r\n- [Report Issues](https://github.com/AadvikLabs/npm-onedrive-uploder/issues)\r\n- [Microsoft Graph API Docs](https://learn.microsoft.com/en-us/graph/api/resources/onedrive)\r\n","readmeFilename":"README.md"}