From 0f446b664e43742a7782ee3bfe328bf857237b47 Mon Sep 17 00:00:00 2001 From: solo samurai Date: Tue, 23 Apr 2024 02:16:51 +0300 Subject: [PATCH 1/3] fix: use `body.arrayBuffer()` instead of `body.buffer()` --- src/response.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/response.js b/src/response.js index 2753bb7b..c46bbb1e 100644 --- a/src/response.js +++ b/src/response.js @@ -48,7 +48,7 @@ export function parseDownloadResponse(res) { if (isWindowOrWorker()) { res.blob().then((data) => resolve(data)); } else { - res.buffer().then((data) => resolve(data)); + res.arrayBuffer().then((data) => resolve(Buffer.from(data))); } }).then((data) => { const result = JSON.parse(res.headers.get('dropbox-api-result')); From 652121949faa87f19367698e65d069d848dd3fa0 Mon Sep 17 00:00:00 2001 From: solo samurai Date: Tue, 23 Apr 2024 02:32:38 +0300 Subject: [PATCH 2/3] only require `node-fetch` when isn't passed --- src/auth.js | 2 +- src/dropbox.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/auth.js b/src/auth.js index 59990f5b..714089bc 100644 --- a/src/auth.js +++ b/src/auth.js @@ -55,7 +55,7 @@ export default class DropboxAuth { crypto = self.crypto; /* eslint-enable no-restricted-globals */ } else { - fetch = require('node-fetch'); // eslint-disable-line global-require + fetch = options.fetch || require('node-fetch'); // eslint-disable-line global-require crypto = require('crypto'); // eslint-disable-line global-require } diff --git a/src/dropbox.js b/src/dropbox.js index fa33f58b..283ef915 100644 --- a/src/dropbox.js +++ b/src/dropbox.js @@ -57,7 +57,7 @@ export default class Dropbox { this.auth = new DropboxAuth(options); } - this.fetch = options.fetch || this.auth.fetch; + this.fetch = this.auth.fetch; this.selectUser = options.selectUser; this.selectAdmin = options.selectAdmin; this.pathRoot = options.pathRoot; From 499d21fd026e055de4e2e0cc38509bfe6d07d1ce Mon Sep 17 00:00:00 2001 From: solo samurai Date: Thu, 2 May 2024 20:33:03 +0300 Subject: [PATCH 3/3] enhancement: use built-in node fetch if available / clean up --- src/auth.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/auth.js b/src/auth.js index 714089bc..fdd5b40f 100644 --- a/src/auth.js +++ b/src/auth.js @@ -45,17 +45,18 @@ const IncludeGrantedScopes = ['none', 'user', 'team']; export default class DropboxAuth { constructor(options) { options = options || {}; + fetch = options.fetch; if (isBrowserEnv()) { - fetch = window.fetch.bind(window); + fetch = fetch || window.fetch.bind(window); crypto = window.crypto || window.msCrypto; // for IE11 } else if (isWorkerEnv()) { /* eslint-disable no-restricted-globals */ - fetch = self.fetch.bind(self); + fetch = fetch || self.fetch.bind(self); crypto = self.crypto; /* eslint-enable no-restricted-globals */ } else { - fetch = options.fetch || require('node-fetch'); // eslint-disable-line global-require + fetch = fetch || global.fetch || require('node-fetch'); // eslint-disable-line global-require crypto = require('crypto'); // eslint-disable-line global-require } @@ -65,7 +66,7 @@ export default class DropboxAuth { Encoder = TextEncoder; } - this.fetch = options.fetch || fetch; + this.fetch = fetch; this.accessToken = options.accessToken; this.accessTokenExpiresAt = options.accessTokenExpiresAt; this.refreshToken = options.refreshToken; @@ -340,7 +341,7 @@ export default class DropboxAuth { checkAndRefreshAccessToken() { const canRefresh = this.getRefreshToken() && this.getClientId(); const needsRefresh = !this.getAccessTokenExpiresAt() - || (new Date(Date.now() + TokenExpirationBuffer)) >= this.getAccessTokenExpiresAt(); + || (new Date(Date.now() + TokenExpirationBuffer)) >= this.getAccessTokenExpiresAt(); const needsToken = !this.getAccessToken(); if ((needsRefresh || needsToken) && canRefresh) { return this.refreshAccessToken();