@uppy/companion-client
Advanced tools
Comparing version 3.7.0 to 3.7.1
# @uppy/companion-client | ||
## 3.7.1 | ||
Released: 2024-02-19 | ||
Included in: Uppy v3.22.0 | ||
- @uppy/aws-s3-multipart,@uppy/aws-s3,@uppy/companion-client,@uppy/tus,@uppy/xhr-upload: update `uppyfile` objects before emitting events (antoine du hamel / #4928) | ||
- @uppy/companion-client: fix tests and linter (antoine du hamel / #4890) | ||
- @uppy/companion-client: migrate to ts (merlijn vos / #4864) | ||
- @uppy/companion-client: fix `typeerror` (antoine du hamel) | ||
## 3.7.0 | ||
@@ -4,0 +14,0 @@ |
@@ -6,7 +6,7 @@ 'use strict'; | ||
*/ | ||
export { default as RequestClient } from './RequestClient.js'; | ||
export { default as Provider } from './Provider.js'; | ||
export { default as SearchProvider } from './SearchProvider.js'; | ||
export { default as RequestClient } from "./RequestClient.js"; | ||
export { default as Provider } from "./Provider.js"; | ||
export { default as SearchProvider } from "./SearchProvider.js"; | ||
// TODO: remove in the next major | ||
export { default as Socket } from './Socket.js'; | ||
export { default as Socket } from "./Socket.js"; |
@@ -1,8 +0,9 @@ | ||
'use strict'; | ||
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; } | ||
var id = 0; | ||
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; } | ||
import RequestClient, { authErrorStatusCode } from './RequestClient.js'; | ||
import * as tokenStorage from './tokenStorage.js'; | ||
import RequestClient, { authErrorStatusCode } from "./RequestClient.js"; | ||
import * as tokenStorage from "./tokenStorage.js"; | ||
// TODO: remove deprecated options in next major release | ||
const getName = id => { | ||
@@ -30,2 +31,3 @@ return id.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' '); | ||
var _getAuthToken = /*#__PURE__*/_classPrivateFieldLooseKey("getAuthToken"); | ||
var _getPlugin = /*#__PURE__*/_classPrivateFieldLooseKey("getPlugin"); | ||
export default class Provider extends RequestClient { | ||
@@ -35,2 +37,5 @@ constructor(uppy, opts) { | ||
super(uppy, opts); | ||
Object.defineProperty(this, _getPlugin, { | ||
value: _getPlugin2 | ||
}); | ||
Object.defineProperty(this, _getAuthToken, { | ||
@@ -52,3 +57,2 @@ value: _getAuthToken2 | ||
} | ||
async headers() { | ||
@@ -72,3 +76,3 @@ const [headers, token] = await Promise.all([super.headers(), _classPrivateFieldLooseBase(this, _getAuthToken)[_getAuthToken]()]); | ||
super.onReceiveResponse(response); | ||
const plugin = this.uppy.getPlugin(this.pluginId); | ||
const plugin = _classPrivateFieldLooseBase(this, _getPlugin)[_getPlugin](); | ||
const oldAuthenticated = plugin.getPluginState().authenticated; | ||
@@ -82,9 +86,7 @@ const authenticated = oldAuthenticated ? response.status !== authErrorStatusCode : response.status < 400; | ||
async setAuthToken(token) { | ||
return this.uppy.getPlugin(this.pluginId).storage.setItem(this.tokenKey, token); | ||
return _classPrivateFieldLooseBase(this, _getPlugin)[_getPlugin]().storage.setItem(this.tokenKey, token); | ||
} | ||
/** @protected */ | ||
async removeAuthToken() { | ||
return this.uppy.getPlugin(this.pluginId).storage.removeItem(this.tokenKey); | ||
return _classPrivateFieldLooseBase(this, _getPlugin)[_getPlugin]().storage.removeItem(this.tokenKey); | ||
} | ||
/** | ||
@@ -103,11 +105,11 @@ * Ensure we have a preauth token if necessary. Attempts to fetch one if we don't, | ||
// eslint-disable-next-line class-methods-use-this | ||
authQuery() { | ||
// eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars | ||
authQuery(data) { | ||
return {}; | ||
} | ||
authUrl(_temp) { | ||
authUrl(_ref) { | ||
let { | ||
authFormData, | ||
query | ||
} = _temp === void 0 ? {} : _temp; | ||
} = _ref; | ||
const params = new URLSearchParams({ | ||
@@ -127,5 +129,3 @@ ...query, | ||
} | ||
/** @protected */ | ||
async loginSimpleAuth(_ref) { | ||
async loginSimpleAuth(_ref2) { | ||
let { | ||
@@ -135,3 +135,3 @@ uppyVersions, | ||
signal | ||
} = _ref; | ||
} = _ref2; | ||
const response = await this.post(`${this.id}/simple-auth`, { | ||
@@ -147,5 +147,3 @@ form: authFormData | ||
} | ||
/** @protected */ | ||
async loginOAuth(_ref2) { | ||
async loginOAuth(_ref3) { | ||
let { | ||
@@ -155,3 +153,3 @@ uppyVersions, | ||
signal | ||
} = _ref2; | ||
} = _ref3; | ||
await this.ensurePreAuth(); | ||
@@ -185,3 +183,3 @@ signal.throwIfAborted(); | ||
companionAllowedHosts | ||
} = this.uppy.getPlugin(this.pluginId).opts; | ||
} = _classPrivateFieldLooseBase(this, _getPlugin)[_getPlugin]().opts; | ||
if (!isOriginAllowed(e.origin, companionAllowedHosts)) { | ||
@@ -214,3 +212,3 @@ reject(new Error(`rejecting event from ${e.origin} vs allowed pattern ${companionAllowedHosts}`)); | ||
cleanup = () => { | ||
authWindow.close(); | ||
authWindow == null || authWindow.close(); | ||
window.removeEventListener('message', handleToken); | ||
@@ -223,3 +221,3 @@ signal.removeEventListener('abort', cleanup); | ||
} | ||
async login(_ref3) { | ||
async login(_ref4) { | ||
let { | ||
@@ -229,3 +227,3 @@ uppyVersions, | ||
signal | ||
} = _ref3; | ||
} = _ref4; | ||
return this.loginOAuth({ | ||
@@ -243,4 +241,2 @@ uppyVersions, | ||
} | ||
/** @protected */ | ||
async request() { | ||
@@ -310,3 +306,5 @@ await _classPrivateFieldLooseBase(this, _refreshingTokenPromise)[_refreshingTokenPromise]; | ||
} | ||
static initPlugin(plugin, opts, defaultOpts) { | ||
static initPlugin(plugin, | ||
// any because static methods cannot use class generics | ||
opts, defaultOpts) { | ||
/* eslint-disable no-param-reassign */ | ||
@@ -332,4 +330,5 @@ plugin.type = 'acquirer'; | ||
} else if (/^(?!https?:\/\/).*$/i.test(opts.companionUrl)) { | ||
var _opts$companionUrl; | ||
// does not start with https:// | ||
plugin.opts.companionAllowedHosts = `https://${opts.companionUrl.replace(/^\/\//, '')}`; | ||
plugin.opts.companionAllowedHosts = `https://${(_opts$companionUrl = opts.companionUrl) == null ? void 0 : _opts$companionUrl.replace(/^\/\//, '')}`; | ||
} else { | ||
@@ -343,3 +342,8 @@ plugin.opts.companionAllowedHosts = new URL(opts.companionUrl).origin; | ||
async function _getAuthToken2() { | ||
return this.uppy.getPlugin(this.pluginId).storage.getItem(this.tokenKey); | ||
return _classPrivateFieldLooseBase(this, _getPlugin)[_getPlugin]().storage.getItem(this.tokenKey); | ||
} | ||
function _getPlugin2() { | ||
const plugin = this.uppy.getPlugin(this.pluginId); | ||
if (plugin == null) throw new Error('Plugin was nullish'); | ||
return plugin; | ||
} |
@@ -14,6 +14,9 @@ 'use strict'; | ||
import getSocketHost from '@uppy/utils/lib/getSocketHost'; | ||
import AuthError from './AuthError.js'; | ||
import AuthError from "./AuthError.js"; | ||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
// @ts-ignore We don't want TS to generate types for the package.json | ||
const packageJson = { | ||
"version": "3.7.0" | ||
}; // Remove the trailing slash so we can always safely append /xyz. | ||
"version": "3.7.1" | ||
}; | ||
// Remove the trailing slash so we can always safely append /xyz. | ||
function stripSlash(url) { | ||
@@ -33,3 +36,2 @@ return url.replace(/\/$/, ''); | ||
super(message); | ||
this.statusCode = void 0; | ||
this.name = 'HttpError'; | ||
@@ -77,4 +79,2 @@ this.statusCode = statusCode; | ||
* It will retry if the websocket gets disconnected | ||
* | ||
* @param {{ file: UppyFile, queue: RateLimitedQueue, signal: AbortSignal }} file | ||
*/ | ||
@@ -94,2 +94,3 @@ Object.defineProperty(this, _awaitRemoteFileUpload, { | ||
value: async _ref2 => { | ||
var _file$remote; | ||
let { | ||
@@ -100,3 +101,3 @@ file, | ||
} = _ref2; | ||
if (file.remote.url == null) { | ||
if (((_file$remote = file.remote) == null ? void 0 : _file$remote.url) == null) { | ||
throw new Error('Cannot connect to an undefined URL'); | ||
@@ -107,3 +108,5 @@ } | ||
...postBody | ||
}, signal); | ||
}, { | ||
signal | ||
}); | ||
return res.token; | ||
@@ -115,2 +118,3 @@ } | ||
this.onReceiveResponse = this.onReceiveResponse.bind(this); | ||
// TODO: Remove optional chaining | ||
_classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders] = opts == null ? void 0 : opts.companionHeaders; | ||
@@ -147,6 +151,6 @@ } | ||
} | ||
onReceiveResponse(_ref3) { | ||
let { | ||
onReceiveResponse(res) { | ||
const { | ||
headers | ||
} = _ref3; | ||
} = res; | ||
const state = this.uppy.getState(); | ||
@@ -166,4 +170,3 @@ const companion = state.companion || {}; | ||
} | ||
/** @protected */ | ||
async request(_ref4) { | ||
async request(_ref3) { | ||
let { | ||
@@ -175,3 +178,3 @@ path, | ||
signal | ||
} = _ref4; | ||
} = _ref3; | ||
try { | ||
@@ -197,5 +200,2 @@ const headers = await this.headers(!data); | ||
async get(path, options) { | ||
if (options === void 0) { | ||
options = undefined; | ||
} | ||
// TODO: remove boolean support for options that was added for backward compatibility. | ||
@@ -212,5 +212,2 @@ // eslint-disable-next-line no-param-reassign | ||
async post(path, data, options) { | ||
if (options === void 0) { | ||
options = undefined; | ||
} | ||
// TODO: remove boolean support for options that was added for backward compatibility. | ||
@@ -229,5 +226,2 @@ // eslint-disable-next-line no-param-reassign | ||
async delete(path, data, options) { | ||
if (data === void 0) { | ||
data = undefined; | ||
} | ||
// TODO: remove boolean support for options that was added for backward compatibility. | ||
@@ -253,13 +247,5 @@ // eslint-disable-next-line no-param-reassign | ||
* uploading or is otherwise done (failed, canceled) | ||
* | ||
* @param {*} file | ||
* @param {*} reqBody | ||
* @param {*} options | ||
* @returns | ||
*/ | ||
async uploadRemoteFile(file, reqBody, options) { | ||
var _this = this; | ||
if (options === void 0) { | ||
options = {}; | ||
} | ||
try { | ||
@@ -269,3 +255,3 @@ const { | ||
getQueue | ||
} = options; | ||
} = options || {}; | ||
return await pRetry(async () => { | ||
@@ -340,3 +326,3 @@ var _this$uppy$getFile; | ||
} | ||
async function _awaitRemoteFileUpload2(_ref5) { | ||
async function _awaitRemoteFileUpload2(_ref4) { | ||
let { | ||
@@ -346,3 +332,3 @@ file, | ||
signal | ||
} = _ref5; | ||
} = _ref4; | ||
let removeEventHandlers; | ||
@@ -355,7 +341,5 @@ const { | ||
const token = file.serverToken; | ||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | ||
const host = getSocketHost(file.remote.companionUrl); | ||
/** @type {WebSocket} */ | ||
let socket; | ||
/** @type {AbortController?} */ | ||
let socketAbortController; | ||
@@ -390,3 +374,3 @@ let activityTimeout; | ||
}); | ||
(_socketAbortControlle = socketAbortController) == null || _socketAbortControlle.abort == null ? void 0 : _socketAbortControlle.abort(); | ||
(_socketAbortControlle = socketAbortController) == null || _socketAbortControlle.abort == null || _socketAbortControlle.abort(); | ||
reject(err); | ||
@@ -403,4 +387,5 @@ }; | ||
await queue.wrapPromiseFunction(async () => { | ||
const reconnectWebsocket = async () => | ||
// eslint-disable-next-line promise/param-names | ||
const reconnectWebsocket = async () => new Promise((resolveSocket, rejectSocket) => { | ||
new Promise((_, rejectSocket) => { | ||
socket = new WebSocket(`${host}/api/${token}`); | ||
@@ -413,6 +398,6 @@ resetActivityTimeout(); | ||
socket.addEventListener('error', error => { | ||
var _socket2; | ||
this.uppy.log(`Companion socket error ${JSON.stringify(error)}, closing socket`, 'warning'); | ||
socket.close(); // will 'close' event to be emitted | ||
(_socket2 = socket) == null || _socket2.close(); // will 'close' event to be emitted | ||
}); | ||
socket.addEventListener('open', () => { | ||
@@ -431,3 +416,3 @@ sendState(); | ||
{ | ||
emitSocketProgress(this, payload, file); | ||
emitSocketProgress(this, payload, this.uppy.getFile(file.id)); | ||
break; | ||
@@ -438,6 +423,9 @@ } | ||
var _socketAbortControlle2; | ||
this.uppy.emit('upload-success', file, { | ||
this.uppy.emit('upload-success', this.uppy.getFile(file.id), | ||
// @ts-expect-error event expects a lot more data. | ||
// TODO: add missing data? | ||
{ | ||
uploadURL: payload.url | ||
}); | ||
(_socketAbortControlle2 = socketAbortController) == null || _socketAbortControlle2.abort == null ? void 0 : _socketAbortControlle2.abort(); | ||
(_socketAbortControlle2 = socketAbortController) == null || _socketAbortControlle2.abort == null || _socketAbortControlle2.abort(); | ||
resolve(); | ||
@@ -493,3 +481,3 @@ break; | ||
// Remove this file from the queue so another file can start in its place. | ||
(_socketAbortControlle3 = socketAbortController) == null || _socketAbortControlle3.abort == null ? void 0 : _socketAbortControlle3.abort(); // close socket to free up the request for other uploads | ||
(_socketAbortControlle3 = socketAbortController) == null || _socketAbortControlle3.abort == null || _socketAbortControlle3.abort(); // close socket to free up the request for other uploads | ||
} else { | ||
@@ -506,15 +494,15 @@ // Resuming an upload should be queued, else you could pause and then | ||
socketSend('cancel'); | ||
(_socketAbortControlle4 = socketAbortController) == null || _socketAbortControlle4.abort == null ? void 0 : _socketAbortControlle4.abort(); | ||
(_socketAbortControlle4 = socketAbortController) == null || _socketAbortControlle4.abort == null || _socketAbortControlle4.abort(); | ||
this.uppy.log(`upload ${file.id} was removed`, 'info'); | ||
resolve(); | ||
}; | ||
const onCancelAll = _ref6 => { | ||
const onCancelAll = _ref5 => { | ||
var _socketAbortControlle5; | ||
let { | ||
reason | ||
} = _ref6; | ||
} = _ref5; | ||
if (reason === 'user') { | ||
socketSend('cancel'); | ||
} | ||
(_socketAbortControlle5 = socketAbortController) == null || _socketAbortControlle5.abort == null ? void 0 : _socketAbortControlle5.abort(); | ||
(_socketAbortControlle5 = socketAbortController) == null || _socketAbortControlle5.abort == null || _socketAbortControlle5.abort(); | ||
this.uppy.log(`upload ${file.id} was canceled`, 'info'); | ||
@@ -543,3 +531,3 @@ resolve(); | ||
var _socketAbortControlle6; | ||
(_socketAbortControlle6 = socketAbortController) == null ? void 0 : _socketAbortControlle6.abort(); | ||
(_socketAbortControlle6 = socketAbortController) == null || _socketAbortControlle6.abort(); | ||
}); | ||
@@ -549,5 +537,6 @@ createWebsocket(); | ||
} finally { | ||
removeEventHandlers == null ? void 0 : removeEventHandlers(); | ||
// @ts-expect-error used before defined | ||
removeEventHandlers == null || removeEventHandlers(); | ||
} | ||
} | ||
RequestClient.VERSION = packageJson.version; |
'use strict'; | ||
import RequestClient from './RequestClient.js'; | ||
import RequestClient from "./RequestClient.js"; | ||
const getName = id => { | ||
@@ -5,0 +5,0 @@ return id.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' '); |
@@ -5,2 +5,4 @@ let _Symbol$for, _Symbol$for2; | ||
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; } | ||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
// @ts-ignore no types | ||
import ee from 'namespace-emitter'; | ||
@@ -65,2 +67,3 @@ var _queued = /*#__PURE__*/_classPrivateFieldLooseKey("queued"); | ||
const first = _classPrivateFieldLooseBase(this, _queued)[_queued].shift(); | ||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | ||
this.send(first.action, first.payload); | ||
@@ -77,3 +80,3 @@ } | ||
var _classPrivateFieldLoo; | ||
(_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _socket)[_socket]) == null ? void 0 : _classPrivateFieldLoo.close(); | ||
(_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _socket)[_socket]) == null || _classPrivateFieldLoo.close(); | ||
} | ||
@@ -80,0 +83,0 @@ send(action, payload) { |
{ | ||
"name": "@uppy/companion-client", | ||
"description": "Client library for communication with Companion. Intended for use in Uppy plugins.", | ||
"version": "3.7.0", | ||
"version": "3.7.1", | ||
"license": "MIT", | ||
@@ -25,3 +25,3 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"@uppy/utils": "^5.7.0", | ||
"@uppy/utils": "^5.7.1", | ||
"namespace-emitter": "^2.0.1", | ||
@@ -31,4 +31,7 @@ "p-retry": "^6.1.0" | ||
"devDependencies": { | ||
"vitest": "^0.34.5" | ||
"vitest": "^1.2.1" | ||
}, | ||
"peerDependencies": { | ||
"@uppy/core": "^3.9.0" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
166953
2354
4
1
+ Added@transloadit/prettier-bytes@0.3.4(transitive)
+ Added@uppy/core@3.13.1(transitive)
+ Added@uppy/store-default@3.2.2(transitive)
+ Addedmime-match@1.0.2(transitive)
+ Addednanoid@4.0.2(transitive)
+ Addedwildcard@1.1.2(transitive)
Updated@uppy/utils@^5.7.1