diff --git a/packages/xen-api/src/index.js b/packages/xen-api/src/index.js index 02f29d88c..e88c2a8dc 100644 --- a/packages/xen-api/src/index.js +++ b/packages/xen-api/src/index.js @@ -143,7 +143,9 @@ export const isOpaqueRef = value => const RE_READ_ONLY_METHOD = /^[^.]+\.get_/ const isReadOnlyCall = (method, args) => - args.length === 1 && isOpaqueRef(args[0]) && RE_READ_ONLY_METHOD.test(method) + args.length === 1 && + typeof args[0] === 'string' && + RE_READ_ONLY_METHOD.test(method) // Prepare values before passing them to the XenAPI: // @@ -407,15 +409,15 @@ export class Xapi extends EventEmitter { return this._readOnly && !isReadOnlyCall(method, args) ? Promise.reject(new Error(`cannot call ${method}() in read only mode`)) : this._sessionCall(`Async.${method}`, args).then(taskRef => { - $cancelToken.promise.then(() => { - // TODO: do not trigger if the task is already over - this._sessionCall('task.cancel', [taskRef]).catch(noop) - }) + $cancelToken.promise.then(() => { + // TODO: do not trigger if the task is already over + this._sessionCall('task.cancel', [taskRef]).catch(noop) + }) - return this.watchTask(taskRef)::lastly(() => { - this._sessionCall('task.destroy', [taskRef]).catch(noop) + return this.watchTask(taskRef)::lastly(() => { + this._sessionCall('task.destroy', [taskRef]).catch(noop) + }) }) - }) } // create a task and automatically destroy it when settled @@ -577,31 +579,31 @@ export class Xapi extends EventEmitter { // redirection before consuming body const promise = isStream ? doRequest({ - body: '', + body: '', - // omit task_id because this request will fail on purpose - query: 'task_id' in query ? omit(query, 'task_id') : query, + // omit task_id because this request will fail on purpose + query: 'task_id' in query ? omit(query, 'task_id') : query, - maxRedirects: 0, - }).then( - response => { - response.req.abort() - return doRequest() - }, - error => { - let response - if (error != null && (response = error.response) != null) { + maxRedirects: 0, + }).then( + response => { response.req.abort() + return doRequest() + }, + error => { + let response + if (error != null && (response = error.response) != null) { + response.req.abort() - const { headers: { location }, statusCode } = response - if (statusCode === 302 && location !== undefined) { - return doRequest(location) + const { headers: { location }, statusCode } = response + if (statusCode === 302 && location !== undefined) { + return doRequest(location) + } } - } - throw error - } - ) + throw error + } + ) : doRequest() return promise.then(response => {