diff --git a/examples/shared/files.js b/examples/shared/files.js index 68ea827..663b408 100644 --- a/examples/shared/files.js +++ b/examples/shared/files.js @@ -1,5 +1,3 @@ -const axios = require('axios'); -const FormData = require('form-data'); const fs = require('fs'); const path = require('path'); const splitFile = require('split-file'); @@ -25,14 +23,7 @@ const JSON_HEADERS = { async function createFileUpload(options = { mode: 'single_part' }) { try { - const response = await axios({ - method: 'POST', - url: NOTION_FILE_UPLOAD_URL, - headers: JSON_HEADERS, - data: options, - }); - - return response.data; + return await notion.fileUploads.create(options); } catch (error) { console.error('Error creating file upload:', error); throw error; @@ -125,45 +116,35 @@ async function getFileSize(filePath) { return stats.size; } -async function uploadPart(fileId, partBuffer, partNumber = null) { - const formData = new FormData(); - formData.append('file', partBuffer); +async function uploadPart(file, blob, partNumber = null) { + const params = { + file_upload_id: file.id, + file: { + data: blob, + filename: file.filename, + }, + }; if (partNumber) { console.log('uploading part', partNumber); - formData.append('part_number', partNumber.toString()); + // Minor issue with the API, part_number must be a string + params.part_number = partNumber.toString(); } - const response = await axios({ - method: 'POST', - url: `${NOTION_FILE_UPLOAD_URL}/${fileId}/send`, - data: formData, - headers: { - ...NOTION_HEADERS, - 'Content-Type': 'multipart/form-data', - }, - ...(!partNumber && { maxContentLength: SINGLE_PART_LIMIT }), - }); - - return response.data; + return await notion.fileUploads.send(params); } -async function completeMultiPartUpload(fileId) { +async function completeMultiPartUpload(file) { console.log('completing upload'); - const response = await axios({ - method: 'POST', - url: `${NOTION_FILE_UPLOAD_URL}/${fileId}/complete`, - headers: JSON_HEADERS, + return await notion.fileUploads.complete({ + file_upload_id: file.id, }); - - return response.data; } async function uploadFile(filePath, fileName = path.basename(filePath)) { const fileSize = await getFileSize(filePath); const needsMultiPart = fileSize > SINGLE_PART_LIMIT; - const contentType = getContentType(fileName); if (!contentType) { @@ -191,17 +172,19 @@ async function uploadFile(filePath, fileName = path.basename(filePath)) { }); for (let i = 1; i <= parts.length; i++) { - const fileStream = fs.createReadStream(parts[i - 1]); - upload = await uploadPart(file.id, fileStream, i); + const buffer = await fs.promises.readFile(parts[i - 1]); + const blob = new Blob([buffer], { type: contentType }); + upload = await uploadPart(file, blob, i); } // Complete the upload - upload = await completeMultiPartUpload(file.id); + upload = await completeMultiPartUpload(file); } else { // Single-part upload - const fileStream = fs.createReadStream(filePath); + const buffer = await fs.promises.readFile(filePath); + const blob = new Blob([buffer], { type: contentType }); file = await createFileUpload(); - upload = await uploadPart(file.id, fileStream); + upload = await uploadPart(file, blob); } return { file, upload }; diff --git a/package-lock.json b/package-lock.json index eeb9002..05d9c70 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,14 +9,13 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@notionhq/client": "^3.0.1", + "@notionhq/client": "^3.1.1", "@notionhq/notion-mcp-server": "^1.8.0", "async-sema": "^3.1.1", "axios": "^1.4.0", "date-fns": "^2.28.0", "date-fns-tz": "^1.3.5", "dotenv": "^16.3.1", - "form-data": "^4.0.2", "lodash": "^4.17.21", "split-file": "^2.3.0", "yargs": "^17.5.1" @@ -330,9 +329,10 @@ } }, "node_modules/@notionhq/client": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@notionhq/client/-/client-3.0.1.tgz", - "integrity": "sha512-vHtFKrRKQg2PZSky1A9fTe+L9/WxNYRJWHmD6ZiBNgeN5jnFmv27ootRl9ROzEm/N+mOxfTo37EnuCHsaPgETg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@notionhq/client/-/client-3.1.1.tgz", + "integrity": "sha512-sAFNjrW5IVX1jgVRxn83mtLNphWsp4qj1koW5YKx9w0qH1pJLfJyAjedwvIFjWG2VNzPuXxVrXpQaRnxSUt5aQ==", + "license": "MIT", "engines": { "node": ">=18" } @@ -2137,9 +2137,9 @@ } }, "@notionhq/client": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@notionhq/client/-/client-3.0.1.tgz", - "integrity": "sha512-vHtFKrRKQg2PZSky1A9fTe+L9/WxNYRJWHmD6ZiBNgeN5jnFmv27ootRl9ROzEm/N+mOxfTo37EnuCHsaPgETg==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@notionhq/client/-/client-3.1.1.tgz", + "integrity": "sha512-sAFNjrW5IVX1jgVRxn83mtLNphWsp4qj1koW5YKx9w0qH1pJLfJyAjedwvIFjWG2VNzPuXxVrXpQaRnxSUt5aQ==" }, "@notionhq/notion-mcp-server": { "version": "1.8.0", diff --git a/package.json b/package.json index 111effd..aa400bf 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,13 @@ "author": "Benjamin Borowski ", "license": "MIT", "dependencies": { - "@notionhq/client": "^3.0.1", + "@notionhq/client": "^3.1.1", "@notionhq/notion-mcp-server": "^1.8.0", "async-sema": "^3.1.1", "axios": "^1.4.0", "date-fns": "^2.28.0", "date-fns-tz": "^1.3.5", "dotenv": "^16.3.1", - "form-data": "^4.0.2", "lodash": "^4.17.21", "split-file": "^2.3.0", "yargs": "^17.5.1"