diff --git a/BACKLOG.md b/BACKLOG.md index 870ee90d51..ba5be5e5e3 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -80,7 +80,6 @@ here. ### New providers -- [ ] Google Photos (#2163) - [ ] MediaLibrary provider which shows you files that have already been uploaded #450, #1121, #1112 #362 - [ ] Giphy image search (on top of Unsplash plugin) () diff --git a/e2e/cypress/integration/dashboard-transloadit.spec.ts b/e2e/cypress/integration/dashboard-transloadit.spec.ts index b66876c89b..782963d1b0 100644 --- a/e2e/cypress/integration/dashboard-transloadit.spec.ts +++ b/e2e/cypress/integration/dashboard-transloadit.spec.ts @@ -129,7 +129,7 @@ describe('Dashboard with Transloadit', () => { client_ip: null, client_referer: null, transloadit_client: - 'uppy-core:3.2.0,uppy-transloadit:3.1.3,uppy-tus:3.1.0,uppy-dropbox:3.1.1,uppy-box:2.1.1,uppy-facebook:3.1.1,uppy-google-drive:3.1.1,uppy-google-photos:0.0.1,uppy-instagram:3.1.1,uppy-onedrive:3.1.1,uppy-zoom:2.1.1,uppy-url:3.3.1', + 'uppy-core:3.2.0,uppy-transloadit:3.1.3,uppy-tus:3.1.0,uppy-dropbox:3.1.1,uppy-box:2.1.1,uppy-facebook:3.1.1,uppy-google-drive:3.1.1,uppy-instagram:3.1.1,uppy-onedrive:3.1.1,uppy-zoom:2.1.1,uppy-url:3.3.1', start_date: new Date().toISOString(), upload_meta_data_extracted: false, warnings: [], diff --git a/e2e/package.json b/e2e/package.json index c835aa7c36..ea019d9dea 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -26,7 +26,6 @@ "@uppy/golden-retriever": "workspace:^", "@uppy/google-drive": "workspace:^", "@uppy/google-drive-picker": "workspace:^", - "@uppy/google-photos": "workspace:^", "@uppy/google-photos-picker": "workspace:^", "@uppy/image-editor": "workspace:^", "@uppy/informer": "workspace:^", diff --git a/examples/angular-example/package.json b/examples/angular-example/package.json index bf06688715..97ba1ea8c7 100644 --- a/examples/angular-example/package.json +++ b/examples/angular-example/package.json @@ -23,7 +23,6 @@ "@uppy/core": "workspace:*", "@uppy/drag-drop": "workspace:*", "@uppy/google-drive": "workspace:*", - "@uppy/google-photos": "workspace:*", "@uppy/progress-bar": "workspace:*", "@uppy/tus": "workspace:*", "@uppy/webcam": "workspace:*", diff --git a/packages/@uppy/companion/src/config/grant.js b/packages/@uppy/companion/src/config/grant.js index 32b81a513e..90150bb7d4 100644 --- a/packages/@uppy/companion/src/config/grant.js +++ b/packages/@uppy/companion/src/config/grant.js @@ -1,18 +1,3 @@ -const google = { - // access_type: offline is needed in order to get refresh tokens. - // prompt: 'consent' is needed because sometimes a user will get stuck in an authenticated state where we will - // receive no refresh tokens from them. This seems to be happen when running on different subdomains. - // therefore to be safe that we always get refresh tokens, we set this. - // https://stackoverflow.com/questions/10827920/not-receiving-google-oauth-refresh-token/65108513#65108513 - custom_params: { access_type : 'offline', prompt: 'consent' }, - - // copied from https://github.com/simov/grant/blob/master/config/oauth.json - "authorize_url": "https://accounts.google.com/o/oauth2/v2/auth", - "access_url": "https://oauth2.googleapis.com/token", - "oauth": 2, - "scope_delimiter": " " -} - const defaults = { transport: 'session', state: true, // Enable CSRF check @@ -25,17 +10,22 @@ module.exports = () => { // and because it would be a too big rewrite to allow reuse of the same provider. googledrive: { ...defaults, - ...google, + // access_type: offline is needed in order to get refresh tokens. + // prompt: 'consent' is needed because sometimes a user will get stuck in an authenticated state where we will + // receive no refresh tokens from them. This seems to be happen when running on different subdomains. + // therefore to be safe that we always get refresh tokens, we set this. + // https://stackoverflow.com/questions/10827920/not-receiving-google-oauth-refresh-token/65108513#65108513 + custom_params: { access_type : 'offline', prompt: 'consent' }, + + // copied from https://github.com/simov/grant/blob/master/config/oauth.json + authorize_url: "https://accounts.google.com/o/oauth2/v2/auth", + access_url: "https://oauth2.googleapis.com/token", + oauth: 2, + scope_delimiter: ' ', state: true, callback: '/drive/callback', scope: ['https://www.googleapis.com/auth/drive.readonly'], }, - googlephotos: { - ...defaults, - ...google, - callback: '/googlephotos/callback', - scope: ['https://www.googleapis.com/auth/photoslibrary.readonly', 'https://www.googleapis.com/auth/userinfo.email'], // if name is needed, then add https://www.googleapis.com/auth/userinfo.profile too - }, dropbox: { ...defaults, authorize_url: 'https://www.dropbox.com/oauth2/authorize', diff --git a/packages/@uppy/companion/src/server/provider/google/googlephotos/index.js b/packages/@uppy/companion/src/server/provider/google/googlephotos/index.js deleted file mode 100644 index 54c31f642e..0000000000 --- a/packages/@uppy/companion/src/server/provider/google/googlephotos/index.js +++ /dev/null @@ -1,166 +0,0 @@ -const got = require('../../../got') - -const { logout, refreshToken } = require('../index') -const { withGoogleErrorHandling } = require('../../providerErrors') -const { prepareStream } = require('../../../helpers/utils') -const { MAX_AGE_REFRESH_TOKEN } = require('../../../helpers/jwt') -const logger = require('../../../logger') -const Provider = require('../../Provider') - - -const getBaseClient = async ({ token }) => (await got).extend({ - headers: { - authorization: `Bearer ${token}`, - }, -}) - -const getPhotosClient = async ({ token }) => (await getBaseClient({ token })).extend({ - prefixUrl: 'https://photoslibrary.googleapis.com/v1', -}) - -const getOauthClient = async ({ token }) => (await getBaseClient({ token })).extend({ - prefixUrl: 'https://www.googleapis.com/oauth2/v1', -}) - -async function paginate(fn, getter, limit = 5) { - const items = [] - let pageToken - - for (let i = 0; (i === 0 || pageToken != null); i++) { - if (i >= limit) { - logger.warn(`Hit pagination limit of ${limit}`) - break; - } - const response = await fn(pageToken); - items.push(...getter(response)); - pageToken = response.nextPageToken - } - return items -} - -/** - * Provider for Google Photos API - */ -class GooglePhotos extends Provider { - static get oauthProvider () { - return 'googlephotos' - } - - static get authStateExpiry () { - return MAX_AGE_REFRESH_TOKEN - } - - // eslint-disable-next-line class-methods-use-this - async list (options) { - return withGoogleErrorHandling(GooglePhotos.oauthProvider, 'provider.photos.list.error', async () => { - const { directory, query } = options - const { token } = options - - const isRoot = !directory - - const client = await getPhotosClient({ token }) - - - async function fetchAlbums () { - if (!isRoot) return [] // albums are only in the root - - return paginate( - (pageToken) => client.get('albums', { searchParams: { pageToken, pageSize: 50 }, responseType: 'json' }).json(), - (response) => response.albums ?? [], // seems to be undefined if no albums - ) - } - - async function fetchSharedAlbums () { - if (!isRoot) return [] // albums are only in the root - - return paginate( - (pageToken) => client.get('sharedAlbums', { searchParams: { pageToken, pageSize: 50 }, responseType: 'json' }).json(), - (response) => response.sharedAlbums ?? [], // seems to be undefined if no shared albums - ) - } - - async function fetchMediaItems () { - if (isRoot) return { mediaItems: [] } // no images in root (album list only) - const resp = await client.post('mediaItems:search', { json: { pageToken: query?.cursor, albumId: directory, pageSize: 50 }, responseType: 'json' }).json(); - return resp - } - - // mediaItems seems to be undefined if empty folder - const [sharedAlbums, albums, { mediaItems = [], nextPageToken }] = await Promise.all([ - fetchSharedAlbums(), fetchAlbums(), fetchMediaItems() - ]) - - const newSp = new URLSearchParams(Object.entries(query)); - if (nextPageToken) newSp.set('cursor', nextPageToken); - - const iconSize = 64 - const thumbSize = 300 - const getIcon = (baseUrl) => `${baseUrl}=w${iconSize}-h${iconSize}-c` - const getThumbnail = (baseUrl) => `${baseUrl}=w${thumbSize}-h${thumbSize}-c` - const adaptedItems = [ - ...albums.map((album) => ({ - isFolder: true, - icon: 'https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.folder', - mimeType: 'application/vnd.google-apps.folder', - thumbnail: getThumbnail(album.coverPhotoBaseUrl), - name: album.title, - id: album.id, - requestPath: album.id, - })), - ...sharedAlbums.map((sharedAlbum) => ({ - isFolder: true, - icon: 'https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.folder', - mimeType: 'application/vnd.google-apps.folder', - thumbnail: getThumbnail(sharedAlbum.coverPhotoBaseUrl), - name: sharedAlbum.title, - id: sharedAlbum.id, - requestPath: sharedAlbum.id, - })), - ...mediaItems.map((mediaItem) => ({ - isFolder: false, - icon: getIcon(mediaItem.baseUrl), - thumbnail: getThumbnail(mediaItem.baseUrl), - name: mediaItem.filename, - id: mediaItem.id, - mimeType: mediaItem.mimeType, - modifiedDate: mediaItem.creationTime, - requestPath: mediaItem.id, - custom: { - imageWidth: mediaItem.photo ? mediaItem.width : undefined, - imageHeight: mediaItem.photo ? mediaItem.height : undefined, - videoWidth: mediaItem.video ? mediaItem.width : undefined, - videoHeight: mediaItem.video ? mediaItem.height : undefined, - }, - })), - ]; - - const { email: username } = await (await getOauthClient({ token })).get('userinfo').json() - - return { - username, - items: adaptedItems, - nextPagePath: newSp.size > 0 ? `${directory ?? ''}?${newSp.toString()}` : null, - } - }) - } - - // eslint-disable-next-line class-methods-use-this - async download ({ id, token }) { - return withGoogleErrorHandling(GooglePhotos.oauthProvider, 'provider.photos.download.error', async () => { - const client = await getPhotosClient({ token }) - - const { baseUrl } = await client.get(`mediaItems/${encodeURIComponent(id)}`, { responseType: 'json' }).json() - - const url = `${baseUrl}=d`; - const stream = (await got).stream.get(url, { responseType: 'json' }) - const { size } = await prepareStream(stream) - - return { stream, size } - }) - } -} - -GooglePhotos.prototype.logout = logout -GooglePhotos.prototype.refreshToken = refreshToken - -module.exports = GooglePhotos diff --git a/packages/@uppy/companion/src/server/provider/index.js b/packages/@uppy/companion/src/server/provider/index.js index 746782b2a8..3b1d6d99ba 100644 --- a/packages/@uppy/companion/src/server/provider/index.js +++ b/packages/@uppy/companion/src/server/provider/index.js @@ -4,7 +4,6 @@ const dropbox = require('./dropbox') const box = require('./box') const { Drive } = require('./google/drive') -const googlephotos = require('./google/googlephotos') const instagram = require('./instagram/graph') const facebook = require('./facebook') const onedrive = require('./onedrive') @@ -69,7 +68,7 @@ module.exports.getProviderMiddleware = (providers, grantConfig) => { * @returns {Record} */ module.exports.getDefaultProviders = () => { - const providers = { dropbox, box, drive: Drive, googlephotos, facebook, onedrive, zoom, instagram, unsplash, webdav } + const providers = { dropbox, box, drive: Drive, facebook, onedrive, zoom, instagram, unsplash, webdav } return providers } diff --git a/packages/@uppy/companion/src/standalone/helper.js b/packages/@uppy/companion/src/standalone/helper.js index 4db99e03e7..14a97d48fa 100644 --- a/packages/@uppy/companion/src/standalone/helper.js +++ b/packages/@uppy/companion/src/standalone/helper.js @@ -89,11 +89,6 @@ const getConfigFromEnv = () => { secret: getSecret('COMPANION_GOOGLE_SECRET'), credentialsURL: process.env.COMPANION_GOOGLE_KEYS_ENDPOINT, }, - googlephotos: { - key: process.env.COMPANION_GOOGLE_KEY, - secret: getSecret('COMPANION_GOOGLE_SECRET'), - credentialsURL: process.env.COMPANION_GOOGLE_KEYS_ENDPOINT, - }, dropbox: { key: process.env.COMPANION_DROPBOX_KEY, secret: getSecret('COMPANION_DROPBOX_SECRET'), diff --git a/packages/@uppy/companion/test/__tests__/provider-manager.js b/packages/@uppy/companion/test/__tests__/provider-manager.js index ce28981401..ad861f9d61 100644 --- a/packages/@uppy/companion/test/__tests__/provider-manager.js +++ b/packages/@uppy/companion/test/__tests__/provider-manager.js @@ -26,7 +26,6 @@ describe('Test Provider options', () => { expect(grantConfig.googledrive.key).toBe('google_key') expect(grantConfig.googledrive.secret).toBe('google_secret') - expect(grantConfig.googlephotos.key).toBe('google_key') expect(grantConfig.googledrive.secret).toBe('google_secret') expect(grantConfig.instagram.key).toBe('instagram_key') @@ -96,25 +95,6 @@ describe('Test Provider options', () => { }, }) - expect(grantConfig.googlephotos).toEqual({ - access_url: "https://oauth2.googleapis.com/token", - authorize_url: "https://accounts.google.com/o/oauth2/v2/auth", - oauth: 2, - scope_delimiter: " ", - - key: 'google_key', - secret: 'google_secret', - transport: 'session', - "state": true, - redirect_uri: 'http://localhost:3020/googlephotos/redirect', - scope: ['https://www.googleapis.com/auth/photoslibrary.readonly', 'https://www.googleapis.com/auth/userinfo.email'], - callback: '/googlephotos/callback', - custom_params: { - access_type: 'offline', - prompt: 'consent', - }, - }) - expect(grantConfig.zoom).toEqual({ key: 'zoom_key', secret: 'zoom_secret', @@ -142,7 +122,6 @@ describe('Test Provider options', () => { expect(grantConfig.dropbox.secret).toBe('xobpord') expect(grantConfig.box.secret).toBe('xwbepqd') expect(grantConfig.googledrive.secret).toBe('elgoog') - expect(grantConfig.googlephotos.secret).toBe('elgoog') expect(grantConfig.instagram.secret).toBe('margatsni') expect(grantConfig.zoom.secret).toBe('u8Z5ceq') expect(companionOptions.providerOptions.zoom.verificationToken).toBe('o0u8Z5c') @@ -162,9 +141,6 @@ describe('Test Provider options', () => { expect(grantConfig.googledrive.key).toBeUndefined() expect(grantConfig.googledrive.secret).toBeUndefined() - expect(grantConfig.googlephotos.key).toBeUndefined() - expect(grantConfig.googlephotos.secret).toBeUndefined() - expect(grantConfig.instagram.key).toBeUndefined() expect(grantConfig.instagram.secret).toBeUndefined() @@ -179,7 +155,6 @@ describe('Test Provider options', () => { expect(grantConfig.dropbox.redirect_uri).toBe('http://domain.com/dropbox/redirect') expect(grantConfig.box.redirect_uri).toBe('http://domain.com/box/redirect') expect(grantConfig.googledrive.redirect_uri).toBe('http://domain.com/drive/redirect') - expect(grantConfig.googlephotos.redirect_uri).toBe('http://domain.com/googlephotos/redirect') expect(grantConfig.instagram.redirect_uri).toBe('http://domain.com/instagram/redirect') expect(grantConfig.zoom.redirect_uri).toBe('http://domain.com/zoom/redirect') }) diff --git a/packages/@uppy/companion/test/__tests__/providers.js b/packages/@uppy/companion/test/__tests__/providers.js index 2dfc5bdcf0..1eeeafb97b 100644 --- a/packages/@uppy/companion/test/__tests__/providers.js +++ b/packages/@uppy/companion/test/__tests__/providers.js @@ -191,48 +191,6 @@ describe('list provider files', () => { expect1({ username, items: rest, providerFixture }) }) - test('googlephotos', async () => { - nock('https://photoslibrary.googleapis.com').get('/v1/albums?pageSize=50').reply(200, { - albums: [ - { - coverPhotoBaseUrl: 'https://test', - title: 'album', - id: '1', - } - ] - }) - - nock('https://photoslibrary.googleapis.com').get('/v1/sharedAlbums?pageSize=50').reply(200, { - sharedAlbums: [ - { - coverPhotoBaseUrl: 'https://test2', - title: 'shared album', - id: '2', - } - ] - }) - - nock('https://www.googleapis.com').get('/oauth2/v1/userinfo').reply(200, { - email: defaults.USERNAME, - }) - - const { items } = await runTest('googlephotos') - - expect(items[0].isFolder).toBe(true) - expect(items[0].name).toBe('album') - expect(items[0].id).toBe('1') - expect(items[0].requestPath).toBe('1') - expect(items[0].icon).toBe('https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.folder') - expect(items[0].thumbnail).toBe('https://test=w300-h300-c') - - expect(items[1].isFolder).toBe(true) - expect(items[1].name).toBe('shared album') - expect(items[1].id).toBe('2') - expect(items[1].requestPath).toBe('2') - expect(items[1].icon).toBe('https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.folder') - expect(items[1].thumbnail).toBe('https://test2=w300-h300-c') - }) - test('facebook', async () => { nock('https://graph.facebook.com').post('/', [ @@ -399,16 +357,6 @@ describe('provider file gets downloaded from', () => { await runTest('drive') }) - test('googlephotos', async () => { - nock('https://photoslibrary.googleapis.com').get(`/v1/mediaItems/${defaults.ITEM_ID}`).reply(200, { - baseUrl: 'https://lh3.googleusercontent.com/test', - }) - - nock('https://lh3.googleusercontent.com').get(`/test=d`).reply(200, ' ', { 'content-length': 1 }) - - await runTest('googlephotos') - }) - test('facebook', async () => { // times(2) because of size request nock('https://graph.facebook.com').post('/', @@ -484,7 +432,7 @@ describe('logout of provider', () => { .expect(200) // only some providers can actually be revoked - const expectRevoked = ['box', 'dropbox', 'drive', 'googlephotos', 'facebook', 'zoom'].includes(providerName) + const expectRevoked = ['box', 'dropbox', 'drive', 'facebook', 'zoom'].includes(providerName) expect(res.body).toMatchObject({ ok: true, @@ -512,11 +460,6 @@ describe('logout of provider', () => { await runTest('drive') }) - test('googlephotos', async () => { - nock('https://accounts.google.com').post('/o/oauth2/revoke?token=token+value').reply(200, {}) - await runTest('googlephotos') - }) - test('facebook', async () => { // times(2) because of size request nock('https://graph.facebook.com').post('/', diff --git a/packages/@uppy/google-photos/.npmignore b/packages/@uppy/google-photos/.npmignore deleted file mode 100644 index 6c816673f0..0000000000 --- a/packages/@uppy/google-photos/.npmignore +++ /dev/null @@ -1 +0,0 @@ -tsconfig.* diff --git a/packages/@uppy/google-photos/CHANGELOG.md b/packages/@uppy/google-photos/CHANGELOG.md deleted file mode 100644 index a9c6446813..0000000000 --- a/packages/@uppy/google-photos/CHANGELOG.md +++ /dev/null @@ -1,43 +0,0 @@ -# @uppy/google-photos - -## 0.5.0 - -Released: 2025-01-06 -Included in: Uppy v4.11.0 - -- @uppy/angular,@uppy/audio,@uppy/aws-s3,@uppy/box,@uppy/companion-client,@uppy/compressor,@uppy/core,@uppy/dashboard,@uppy/drag-drop,@uppy/drop-target,@uppy/dropbox,@uppy/facebook,@uppy/file-input,@uppy/form,@uppy/golden-retriever,@uppy/google-drive-picker,@uppy/google-drive,@uppy/google-photos-picker,@uppy/google-photos,@uppy/image-editor,@uppy/informer,@uppy/instagram,@uppy/locales,@uppy/onedrive,@uppy/progress-bar,@uppy/provider-views,@uppy/react,@uppy/remote-sources,@uppy/screen-capture,@uppy/status-bar,@uppy/thumbnail-generator,@uppy/transloadit,@uppy/tus,@uppy/unsplash,@uppy/url,@uppy/vue,@uppy/webcam,@uppy/webdav,@uppy/xhr-upload,@uppy/zoom: Remove "paths" from all tsconfig's (Merlijn Vos / #5572) - -## 0.4.0 - -Released: 2024-12-05 -Included in: Uppy v4.8.0 - -- @uppy/audio,@uppy/aws-s3,@uppy/box,@uppy/companion-client,@uppy/compressor,@uppy/core,@uppy/dashboard,@uppy/drag-drop,@uppy/drop-target,@uppy/dropbox,@uppy/facebook,@uppy/file-input,@uppy/form,@uppy/golden-retriever,@uppy/google-drive,@uppy/google-photos,@uppy/image-editor,@uppy/informer,@uppy/instagram,@uppy/locales,@uppy/onedrive,@uppy/progress-bar,@uppy/provider-views,@uppy/react,@uppy/remote-sources,@uppy/screen-capture,@uppy/status-bar,@uppy/store-default,@uppy/thumbnail-generator,@uppy/transloadit,@uppy/tus,@uppy/unsplash,@uppy/url,@uppy/utils,@uppy/vue,@uppy/webcam,@uppy/xhr-upload,@uppy/zoom: cleanup tsconfig (Mikael Finstad / #5520) - -## 0.3.1 - -Released: 2024-10-31 -Included in: Uppy v4.6.0 - -- @uppy/aws-s3,@uppy/box,@uppy/companion-client,@uppy/core,@uppy/dashboard,@uppy/drag-drop,@uppy/dropbox,@uppy/facebook,@uppy/file-input,@uppy/form,@uppy/golden-retriever,@uppy/google-drive,@uppy/google-photos,@uppy/image-editor,@uppy/informer,@uppy/instagram,@uppy/locales,@uppy/onedrive,@uppy/progress-bar,@uppy/provider-views,@uppy/react-native,@uppy/react,@uppy/redux-dev-tools,@uppy/screen-capture,@uppy/status-bar,@uppy/store-default,@uppy/store-redux,@uppy/svelte,@uppy/thumbnail-generator,@uppy/transloadit,@uppy/tus,@uppy/unsplash,@uppy/url,@uppy/utils,@uppy/vue,@uppy/webcam,@uppy/xhr-upload,@uppy/zoom: Fix links (Anthony Veaudry / #5492) - -## 0.3.0 - -Released: 2024-08-29 -Included in: Uppy v4.3.0 - -- @uppy/aws-s3,@uppy/box,@uppy/compressor,@uppy/dropbox,@uppy/facebook,@uppy/google-drive,@uppy/google-photos,@uppy/image-editor,@uppy/informer,@uppy/instagram,@uppy/onedrive,@uppy/screen-capture,@uppy/tus,@uppy/unsplash,@uppy/url,@uppy/xhr-upload,@uppy/zoom: export plugin options (Antoine du Hamel / #5433) - -## 0.2.0-beta.2 - -Released: 2024-06-27 -Included in: Uppy v4.0.0-beta.13 - -- @uppy/google-photos: fix various issues (Mikael Finstad / #5275) - -## 0.1.0 - -Released: 2024-06-18 -Included in: Uppy v3.27.0 - -- @uppy/google-photos: add plugin (Mikael Finstad / #5061) diff --git a/packages/@uppy/google-photos/LICENSE b/packages/@uppy/google-photos/LICENSE deleted file mode 100644 index 6f25c43720..0000000000 --- a/packages/@uppy/google-photos/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2024 Transloadit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/@uppy/google-photos/README.md b/packages/@uppy/google-photos/README.md deleted file mode 100644 index 0607bdc34d..0000000000 --- a/packages/@uppy/google-photos/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# @uppy/google-photos - -Uppy logo: a smiling puppy above a pink upwards arrow - -[![npm version](https://img.shields.io/npm/v/@uppy/google-photos.svg?style=flat-square)](https://www.npmjs.com/package/@uppy/google-photos) -![CI status for Uppy tests](https://github.com/transloadit/uppy/workflows/CI/badge.svg) -![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg) -![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg) - -The Google Photos plugin for Uppy lets users import photos from their Google -Photos account. - -A Companion instance is required for the GooglePhotos plugin to work. Companion -handles authentication with Google, downloads photos from Google Photos and -uploads them to the destination. This saves the user bandwidth, especially -helpful if they are on a mobile connection. - -Uppy is being developed by the folks at [Transloadit](https://transloadit.com), -a versatile file encoding service. - -## Example - -```js -import Uppy from '@uppy/core' -import GooglePhotos from '@uppy/google-photos' - -const uppy = new Uppy() -uppy.use(GooglePhotos, { - // Options -}) -``` - -## Installation - -```bash -$ npm install @uppy/google-photos -``` - -Alternatively, you can also use this plugin in a pre-built bundle from -Transloadit’s CDN: Smart CDN. In that case `Uppy` will attach itself to the -global `window.Uppy` object. See the -[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions. - -## Documentation - -Documentation for this plugin can be found on the -[Uppy website](https://uppy.io/docs/google-photos). - -## License - -The [MIT License](./LICENSE). diff --git a/packages/@uppy/google-photos/package.json b/packages/@uppy/google-photos/package.json deleted file mode 100644 index 3a96f76e3d..0000000000 --- a/packages/@uppy/google-photos/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@uppy/google-photos", - "description": "The Google Photos plugin for Uppy lets users import photos from their Google Photos account", - "version": "0.5.1", - "license": "MIT", - "main": "lib/index.js", - "type": "module", - "keywords": [ - "file uploader", - "google photos", - "cloud storage", - "uppy", - "uppy-plugin" - ], - "homepage": "https://uppy.io", - "bugs": { - "url": "https://github.com/transloadit/uppy/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/transloadit/uppy.git" - }, - "dependencies": { - "@uppy/companion-client": "workspace:^", - "@uppy/provider-views": "workspace:^", - "@uppy/utils": "workspace:^", - "preact": "^10.5.13" - }, - "peerDependencies": { - "@uppy/core": "workspace:^" - } -} diff --git a/packages/@uppy/google-photos/src/GooglePhotos.tsx b/packages/@uppy/google-photos/src/GooglePhotos.tsx deleted file mode 100644 index 3933428493..0000000000 --- a/packages/@uppy/google-photos/src/GooglePhotos.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { UIPlugin, Uppy } from '@uppy/core' -import { ProviderViews } from '@uppy/provider-views' -import { - Provider, - tokenStorage, - getAllowedHosts, - type CompanionPluginOptions, -} from '@uppy/companion-client' -import { h, type ComponentChild } from 'preact' - -import type { - UppyFile, - Body, - Meta, - AsyncStore, - UnknownProviderPlugin, - UnknownProviderPluginState, -} from '@uppy/core' - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore We don't want TS to generate types for the package.json -import packageJson from '../package.json' -import locale from './locale.js' - -export type GooglePhotosOptions = CompanionPluginOptions - -export default class GooglePhotos - extends UIPlugin - implements UnknownProviderPlugin -{ - static VERSION = packageJson.version - - icon: () => h.JSX.Element - - provider: Provider - - view!: ProviderViews - - storage: AsyncStore - - files: UppyFile[] - - rootFolderId: string | null = null - - constructor(uppy: Uppy, opts: GooglePhotosOptions) { - super(uppy, opts) - this.type = 'acquirer' - this.storage = this.opts.storage || tokenStorage - this.files = [] - this.id = this.opts.id || 'GooglePhotos' - this.icon = () => ( - - ) - - this.opts.companionAllowedHosts = getAllowedHosts( - this.opts.companionAllowedHosts, - this.opts.companionUrl, - ) - this.provider = new Provider(uppy, { - companionUrl: this.opts.companionUrl, - companionHeaders: this.opts.companionHeaders, - companionKeysParams: this.opts.companionKeysParams, - companionCookiesRule: this.opts.companionCookiesRule, - provider: 'googlephotos', - pluginId: this.id, - supportsRefreshToken: true, - }) - - this.defaultLocale = locale - - this.i18nInit() - this.title = this.i18n('pluginNameGooglePhotos') - - this.render = this.render.bind(this) - } - - install(): void { - this.view = new ProviderViews(this, { - provider: this.provider, - loadAllFiles: true, - }) - - const { target } = this.opts - if (target) { - this.mount(target, this) - } - } - - uninstall(): void { - this.view.tearDown() - this.unmount() - } - - render(state: unknown): ComponentChild { - const { partialTree, currentFolderId } = this.getPluginState() - - const foldersInThisFolder = partialTree.filter( - (i) => i.type === 'folder' && i.parentId === currentFolderId, - ) - - if (foldersInThisFolder.length === 0) { - return this.view.render(state, { - viewType: 'grid', - showFilter: false, - showTitles: false, - }) - } - return this.view.render(state) - } -} diff --git a/packages/@uppy/google-photos/src/index.ts b/packages/@uppy/google-photos/src/index.ts deleted file mode 100644 index 8220ac9bf3..0000000000 --- a/packages/@uppy/google-photos/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default } from './GooglePhotos.jsx' -export type { GooglePhotosOptions } from './GooglePhotos.jsx' diff --git a/packages/@uppy/google-photos/src/locale.ts b/packages/@uppy/google-photos/src/locale.ts deleted file mode 100644 index e12b583018..0000000000 --- a/packages/@uppy/google-photos/src/locale.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default { - strings: { - pluginNameGooglePhotos: 'Google Photos', - }, -} diff --git a/packages/@uppy/google-photos/tsconfig.build.json b/packages/@uppy/google-photos/tsconfig.build.json deleted file mode 100644 index 82e187bca0..0000000000 --- a/packages/@uppy/google-photos/tsconfig.build.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "extends": "../../../tsconfig.shared", - "compilerOptions": { - "outDir": "./lib", - "resolveJsonModule": false, - "rootDir": "./src" - }, - "include": ["./src/**/*.*"], - "exclude": ["./src/**/*.test.ts"], - "references": [ - { - "path": "../companion-client/tsconfig.build.json" - }, - { - "path": "../provider-views/tsconfig.build.json" - }, - { - "path": "../utils/tsconfig.build.json" - }, - { - "path": "../core/tsconfig.build.json" - } - ] -} diff --git a/packages/@uppy/google-photos/tsconfig.json b/packages/@uppy/google-photos/tsconfig.json deleted file mode 100644 index b90847da71..0000000000 --- a/packages/@uppy/google-photos/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": "../../../tsconfig.shared", - "compilerOptions": { - "emitDeclarationOnly": false, - "noEmit": true, - }, - "include": ["./package.json", "./src/**/*.*"], - "references": [ - { - "path": "../companion-client/tsconfig.build.json", - }, - { - "path": "../provider-views/tsconfig.build.json", - }, - { - "path": "../utils/tsconfig.build.json", - }, - { - "path": "../core/tsconfig.build.json", - }, - ], -} diff --git a/packages/@uppy/locales/src/en_US.ts b/packages/@uppy/locales/src/en_US.ts index 67c23043e2..b388b772e6 100644 --- a/packages/@uppy/locales/src/en_US.ts +++ b/packages/@uppy/locales/src/en_US.ts @@ -143,7 +143,6 @@ en_US.strings = { pluginNameDropbox: 'Dropbox', pluginNameFacebook: 'Facebook', pluginNameGoogleDrive: 'Google Drive', - pluginNameGooglePhotos: 'Google Photos', pluginNameGoogleDrivePicker: 'Google Drive', pluginNameGooglePhotosPicker: 'Google Photos', pluginNameInstagram: 'Instagram', diff --git a/packages/@uppy/locales/src/ms_MY.ts b/packages/@uppy/locales/src/ms_MY.ts index b6b98aca96..0926cd197b 100644 --- a/packages/@uppy/locales/src/ms_MY.ts +++ b/packages/@uppy/locales/src/ms_MY.ts @@ -139,7 +139,6 @@ ms_MY.strings = { pluginNameDropbox: 'Dropbox', pluginNameFacebook: 'Facebook', pluginNameGoogleDrive: 'Google Drive', - pluginNameGooglePhotos: 'Google Photos', pluginNameInstagram: 'Instagram', pluginNameOneDrive: 'OneDrive', pluginNameScreenCapture: 'Screencast', diff --git a/packages/@uppy/remote-sources/package.json b/packages/@uppy/remote-sources/package.json index f546e8d2f3..0c32452fd2 100644 --- a/packages/@uppy/remote-sources/package.json +++ b/packages/@uppy/remote-sources/package.json @@ -9,7 +9,6 @@ "file uploader", "instagram", "google-drive", - "google-photos", "facebook", "dropbox", "onedrive", @@ -32,7 +31,6 @@ "@uppy/dropbox": "workspace:^", "@uppy/facebook": "workspace:^", "@uppy/google-drive": "workspace:^", - "@uppy/google-photos": "workspace:^", "@uppy/instagram": "workspace:^", "@uppy/onedrive": "workspace:^", "@uppy/unsplash": "workspace:^", diff --git a/packages/@uppy/remote-sources/src/index.test.ts b/packages/@uppy/remote-sources/src/index.test.ts index 0faec72626..4aad6a0ed8 100644 --- a/packages/@uppy/remote-sources/src/index.test.ts +++ b/packages/@uppy/remote-sources/src/index.test.ts @@ -47,7 +47,7 @@ describe('RemoteSources', () => { sources: ['Webcam'], }) }).toThrow( - 'Invalid plugin: "Webcam" is not one of: Box, Dropbox, Facebook, GoogleDrive, GooglePhotos, Instagram, OneDrive, Unsplash, Url, or Zoom.', + 'Invalid plugin: "Webcam" is not one of: Box, Dropbox, Facebook, GoogleDrive, Instagram, OneDrive, Unsplash, Url, or Zoom.', ) }) diff --git a/packages/@uppy/remote-sources/src/index.ts b/packages/@uppy/remote-sources/src/index.ts index c7ec1d8674..e266f13969 100644 --- a/packages/@uppy/remote-sources/src/index.ts +++ b/packages/@uppy/remote-sources/src/index.ts @@ -8,7 +8,6 @@ import type { } from '@uppy/core' import Dropbox from '@uppy/dropbox' import GoogleDrive from '@uppy/google-drive' -import GooglePhotos from '@uppy/google-photos' import Instagram from '@uppy/instagram' import Facebook from '@uppy/facebook' import OneDrive from '@uppy/onedrive' @@ -29,7 +28,6 @@ const availablePlugins = { Dropbox, Facebook, GoogleDrive, - GooglePhotos, Instagram, OneDrive, Unsplash, @@ -42,7 +40,6 @@ type AvailablePluginsKeys = | 'Dropbox' | 'Facebook' | 'GoogleDrive' - | 'GooglePhotos' | 'Instagram' | 'OneDrive' | 'Unsplash' diff --git a/packages/@uppy/remote-sources/tsconfig.build.json b/packages/@uppy/remote-sources/tsconfig.build.json index d073046335..4fee751e8d 100644 --- a/packages/@uppy/remote-sources/tsconfig.build.json +++ b/packages/@uppy/remote-sources/tsconfig.build.json @@ -23,9 +23,6 @@ { "path": "../google-drive/tsconfig.build.json" }, - { - "path": "../google-photos/tsconfig.build.json" - }, { "path": "../instagram/tsconfig.build.json" }, diff --git a/packages/@uppy/remote-sources/tsconfig.json b/packages/@uppy/remote-sources/tsconfig.json index 820a89b917..cfbf5c1759 100644 --- a/packages/@uppy/remote-sources/tsconfig.json +++ b/packages/@uppy/remote-sources/tsconfig.json @@ -21,9 +21,6 @@ { "path": "../google-drive/tsconfig.build.json", }, - { - "path": "../google-photos/tsconfig.build.json", - }, { "path": "../instagram/tsconfig.build.json", }, diff --git a/packages/@uppy/transloadit/src/index.ts b/packages/@uppy/transloadit/src/index.ts index f4b69fd991..5cea7127ad 100644 --- a/packages/@uppy/transloadit/src/index.ts +++ b/packages/@uppy/transloadit/src/index.ts @@ -338,7 +338,6 @@ export default class Transloadit< addPluginVersion('Box', 'uppy-box') addPluginVersion('Facebook', 'uppy-facebook') addPluginVersion('GoogleDrive', 'uppy-google-drive') - addPluginVersion('GooglePhotos', 'uppy-google-photos') addPluginVersion('GoogleDrivePicker', 'uppy-google-drive-picker') addPluginVersion('GooglePhotosPicker', 'uppy-google-photos-picker') addPluginVersion('Instagram', 'uppy-instagram') diff --git a/packages/uppy/package.json b/packages/uppy/package.json index d97c22f086..028cdfd1f2 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -47,7 +47,6 @@ "@uppy/golden-retriever": "workspace:^", "@uppy/google-drive": "workspace:^", "@uppy/google-drive-picker": "workspace:^", - "@uppy/google-photos": "workspace:^", "@uppy/google-photos-picker": "workspace:^", "@uppy/image-editor": "workspace:^", "@uppy/informer": "workspace:^", diff --git a/packages/uppy/src/bundle.ts b/packages/uppy/src/bundle.ts index 42bd06d094..43e488ad76 100644 --- a/packages/uppy/src/bundle.ts +++ b/packages/uppy/src/bundle.ts @@ -42,7 +42,6 @@ export { default as Box } from '@uppy/box' export { default as Dropbox } from '@uppy/dropbox' export { default as Facebook } from '@uppy/facebook' export { default as GoogleDrive } from '@uppy/google-drive' -export { default as GooglePhotos } from '@uppy/google-photos' export { default as GoogleDrivePicker } from '@uppy/google-drive-picker' export { default as GooglePhotosPicker } from '@uppy/google-photos-picker' export { default as Instagram } from '@uppy/instagram' diff --git a/packages/uppy/src/index.ts b/packages/uppy/src/index.ts index c3fc785790..68efed5aff 100644 --- a/packages/uppy/src/index.ts +++ b/packages/uppy/src/index.ts @@ -19,7 +19,6 @@ export type { BoxOptions } from '@uppy/box' export type { DropboxOptions } from '@uppy/dropbox' export type { FacebookOptions } from '@uppy/facebook' export type { GoogleDriveOptions } from '@uppy/google-drive' -export type { GooglePhotosOptions } from '@uppy/google-photos' export type { InstagramOptions } from '@uppy/instagram' export type { OneDriveOptions } from '@uppy/onedrive' export type { RemoteSourcesOptions } from '@uppy/remote-sources' diff --git a/packages/uppy/tsconfig.build.json b/packages/uppy/tsconfig.build.json index 0ad78d400c..2075033a2a 100644 --- a/packages/uppy/tsconfig.build.json +++ b/packages/uppy/tsconfig.build.json @@ -53,9 +53,6 @@ { "path": "../@uppy/google-drive/tsconfig.build.json" }, - { - "path": "../@uppy/google-photos/tsconfig.build.json" - }, { "path": "../@uppy/image-editor/tsconfig.build.json" }, diff --git a/packages/uppy/tsconfig.json b/packages/uppy/tsconfig.json index a9000eec05..cc0f299673 100644 --- a/packages/uppy/tsconfig.json +++ b/packages/uppy/tsconfig.json @@ -51,9 +51,6 @@ { "path": "../@uppy/google-drive/tsconfig.build.json", }, - { - "path": "../@uppy/google-photos/tsconfig.build.json", - }, { "path": "../@uppy/image-editor/tsconfig.build.json", }, diff --git a/private/dev/Dashboard.js b/private/dev/Dashboard.js index 726dc1ed07..37d0bd53fb 100644 --- a/private/dev/Dashboard.js +++ b/private/dev/Dashboard.js @@ -148,7 +148,6 @@ export default () => { .use(RemoteSources, { companionUrl: COMPANION_URL, sources: [ - 'GooglePhotos', 'Box', 'Dropbox', 'Facebook', diff --git a/tsconfig.json b/tsconfig.json index b3781ad6be..a8d5b03a5a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -46,9 +46,6 @@ { "path": "./packages/@uppy/google-drive/tsconfig.build.json", }, - { - "path": "./packages/@uppy/google-photos/tsconfig.build.json", - }, { "path": "./packages/@uppy/google-drive-picker/tsconfig.build.json", }, diff --git a/yarn.lock b/yarn.lock index 70bcbbc149..bcc91520f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8479,7 +8479,6 @@ __metadata: "@uppy/core": "workspace:*" "@uppy/drag-drop": "workspace:*" "@uppy/google-drive": "workspace:*" - "@uppy/google-photos": "workspace:*" "@uppy/progress-bar": "workspace:*" "@uppy/tus": "workspace:*" "@uppy/webcam": "workspace:*" @@ -9135,19 +9134,6 @@ __metadata: languageName: unknown linkType: soft -"@uppy/google-photos@workspace:*, @uppy/google-photos@workspace:^, @uppy/google-photos@workspace:packages/@uppy/google-photos": - version: 0.0.0-use.local - resolution: "@uppy/google-photos@workspace:packages/@uppy/google-photos" - dependencies: - "@uppy/companion-client": "workspace:^" - "@uppy/provider-views": "workspace:^" - "@uppy/utils": "workspace:^" - preact: "npm:^10.5.13" - peerDependencies: - "@uppy/core": "workspace:^" - languageName: unknown - linkType: soft - "@uppy/image-editor@workspace:*, @uppy/image-editor@workspace:^, @uppy/image-editor@workspace:packages/@uppy/image-editor": version: 0.0.0-use.local resolution: "@uppy/image-editor@workspace:packages/@uppy/image-editor" @@ -9302,7 +9288,6 @@ __metadata: "@uppy/dropbox": "workspace:^" "@uppy/facebook": "workspace:^" "@uppy/google-drive": "workspace:^" - "@uppy/google-photos": "workspace:^" "@uppy/instagram": "workspace:^" "@uppy/onedrive": "workspace:^" "@uppy/unsplash": "workspace:^" @@ -13826,7 +13811,6 @@ __metadata: "@uppy/golden-retriever": "workspace:^" "@uppy/google-drive": "workspace:^" "@uppy/google-drive-picker": "workspace:^" - "@uppy/google-photos": "workspace:^" "@uppy/google-photos-picker": "workspace:^" "@uppy/image-editor": "workspace:^" "@uppy/informer": "workspace:^" @@ -30374,7 +30358,6 @@ __metadata: "@uppy/golden-retriever": "workspace:^" "@uppy/google-drive": "workspace:^" "@uppy/google-drive-picker": "workspace:^" - "@uppy/google-photos": "workspace:^" "@uppy/google-photos-picker": "workspace:^" "@uppy/image-editor": "workspace:^" "@uppy/informer": "workspace:^"