UNPKG

@uppy/companion

Version:

OAuth helper and remote fetcher for Uppy's (https://uppy.io) extensible file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox and Google Drive, S3 and more :dog:

114 lines (113 loc) 3.36 kB
import { MAX_AGE_24H } from '../helpers/jwt.js'; /** * Provider interface defines the specifications of any provider implementation */ export default class Provider { /** * * @param {{providerName: string, allowLocalUrls: boolean, providerGrantConfig?: object, secret: string}} options */ constructor({ allowLocalUrls, providerGrantConfig, secret }) { // Some providers might need cookie auth for the thumbnails fetched via companion this.needsCookieAuth = false; this.allowLocalUrls = allowLocalUrls; this.providerGrantConfig = providerGrantConfig; this.secret = secret; // biome-ignore lint/correctness/noConstructorReturn: ... return this; } /** * config to extend the grant config */ static getExtraGrantConfig() { return {}; } /** * list the files and folders in the provider account * * @param {object} options * @returns {Promise} */ async list(options) { throw new Error('method not implemented'); } /** * search for files/folders in the provider account * * @param {object} options * @returns {Promise} */ async search(options) { throw new Error('method not implemented'); } /** * download a certain file from the provider account * * @param {object} options * @returns {Promise} */ async download(options) { throw new Error('method not implemented'); } /** * return a thumbnail for a provider file * * @param {object} options * @returns {Promise} */ async thumbnail(options) { throw new Error('method not implemented'); } /** * first Companion will try to get the size from the content-length response header, * if that fails, it will call this method to get the size. * So if your provider has a different method for getting the size, you can return the size here * * @param {object} options * @returns {Promise} */ async size(options) { return undefined; } /** * handle deauthorization notification from oauth providers * * @param {object} options * @returns {Promise} */ async deauthorizationCallback(options) { throw new Error('method not implemented'); } /** * Generate a new access token based on the refresh token */ async refreshToken(options) { throw new Error('method not implemented'); } /** * @param {any} param0 * @returns {Promise<any>} */ async simpleAuth({ requestBody }) { throw new Error('method not implemented'); } /** * Name of the OAuth provider (passed to Grant). Return empty string if no OAuth provider is needed. * * @returns {string} */ static get oauthProvider() { return undefined; } static grantDynamicToUserSession({ grantDynamic }) { return {}; } static get hasSimpleAuth() { return false; } static get authStateExpiry() { return MAX_AGE_24H; } } // OAuth providers are those that have an `oauthProvider` set. It means they require OAuth authentication to work export const isOAuthProvider = (oauthProvider) => typeof oauthProvider === 'string' && oauthProvider.length > 0;