|
@@ -1,12 +1,3 @@
|
|
|
-// TODO: This file was created by bulk-decaffeinate.
|
|
|
|
|
-// Fix any style issues and re-enable lint.
|
|
|
|
|
-/*
|
|
|
|
|
- * decaffeinate suggestions:
|
|
|
|
|
- * DS101: Remove unnecessary use of Array.from
|
|
|
|
|
- * DS102: Remove unnecessary code created because of implicit returns
|
|
|
|
|
- * DS207: Consider shorter variations of null checks
|
|
|
|
|
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
|
|
|
- */
|
|
|
|
|
import request from 'request'
|
|
import request from 'request'
|
|
|
|
|
|
|
|
import settings from '@overleaf/settings'
|
|
import settings from '@overleaf/settings'
|
|
@@ -27,82 +18,61 @@ const DEFAULT_V1_PARAMS = {
|
|
|
|
|
|
|
|
const v1Request = request.defaults(DEFAULT_V1_PARAMS)
|
|
const v1Request = request.defaults(DEFAULT_V1_PARAMS)
|
|
|
|
|
|
|
|
-const DEFAULT_V1_OAUTH_PARAMS = {
|
|
|
|
|
- baseUrl: settings.apis.v1.url,
|
|
|
|
|
- json: true,
|
|
|
|
|
- timeout: settings.apis.v1.timeout,
|
|
|
|
|
|
|
+function makeRequest(options, callback) {
|
|
|
|
|
+ if (!callback) {
|
|
|
|
|
+ return request(options)
|
|
|
|
|
+ }
|
|
|
|
|
+ v1Request(options, (error, response, body) =>
|
|
|
|
|
+ _responseHandler(options, error, response, body, callback)
|
|
|
|
|
+ )
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const v1OauthRequest = request.defaults(DEFAULT_V1_OAUTH_PARAMS)
|
|
|
|
|
-
|
|
|
|
|
-const V1Api = {
|
|
|
|
|
- request(options, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- return request(options)
|
|
|
|
|
- }
|
|
|
|
|
- return v1Request(options, (error, response, body) =>
|
|
|
|
|
- V1Api._responseHandler(options, error, response, body, callback)
|
|
|
|
|
|
|
+function _responseHandler(options, error, response, body, callback) {
|
|
|
|
|
+ const { expectedStatusCodes } = options
|
|
|
|
|
+ if (error) {
|
|
|
|
|
+ return callback(
|
|
|
|
|
+ new Errors.V1ConnectionError('error from V1 API').withCause(error)
|
|
|
)
|
|
)
|
|
|
- },
|
|
|
|
|
-
|
|
|
|
|
- oauthRequest(options, token, callback) {
|
|
|
|
|
- if (options.uri == null) {
|
|
|
|
|
- return callback(new Error('uri required'))
|
|
|
|
|
- }
|
|
|
|
|
- if (options.method == null) {
|
|
|
|
|
- options.method = 'GET'
|
|
|
|
|
- }
|
|
|
|
|
- options.auth = { bearer: token }
|
|
|
|
|
- return v1OauthRequest(options, (error, response, body) =>
|
|
|
|
|
- V1Api._responseHandler(options, error, response, body, callback)
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ if (response && response.statusCode >= 500) {
|
|
|
|
|
+ return callback(
|
|
|
|
|
+ new Errors.V1ConnectionError({
|
|
|
|
|
+ message: 'error from V1 API',
|
|
|
|
|
+ info: { status: response.statusCode, body },
|
|
|
|
|
+ })
|
|
|
)
|
|
)
|
|
|
- },
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ if (
|
|
|
|
|
+ (response && response.statusCode >= 200 && response.statusCode < 300) ||
|
|
|
|
|
+ (expectedStatusCodes || []).includes(response?.statusCode)
|
|
|
|
|
+ ) {
|
|
|
|
|
+ return callback(null, response, body)
|
|
|
|
|
+ } else if (response?.statusCode === 403) {
|
|
|
|
|
+ error = new Errors.ForbiddenError('overleaf v1 returned forbidden')
|
|
|
|
|
+ error.statusCode = response.statusCode
|
|
|
|
|
+ return callback(error)
|
|
|
|
|
+ } else if (response?.statusCode === 404) {
|
|
|
|
|
+ error = new Errors.NotFoundError(
|
|
|
|
|
+ `overleaf v1 returned non-success code: ${response.statusCode} ${options.method} ${options.uri}`
|
|
|
|
|
+ )
|
|
|
|
|
+ error.statusCode = response.statusCode
|
|
|
|
|
+ return callback(error)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ error = new OError('overleaf v1 returned non-success code', {
|
|
|
|
|
+ status: response?.statusCode,
|
|
|
|
|
+ method: options.method,
|
|
|
|
|
+ url: options.uri,
|
|
|
|
|
+ })
|
|
|
|
|
+ error.statusCode = response?.statusCode
|
|
|
|
|
+ return callback(error)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- _responseHandler(options, error, response, body, callback) {
|
|
|
|
|
- if (error != null) {
|
|
|
|
|
- return callback(
|
|
|
|
|
- new Errors.V1ConnectionError('error from V1 API').withCause(error)
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- if (response && response.statusCode >= 500) {
|
|
|
|
|
- return callback(
|
|
|
|
|
- new Errors.V1ConnectionError({
|
|
|
|
|
- message: 'error from V1 API',
|
|
|
|
|
- info: { status: response.statusCode, body },
|
|
|
|
|
- })
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- if (
|
|
|
|
|
- (response && response.statusCode >= 200 && response.statusCode < 300) ||
|
|
|
|
|
- Array.from(options.expectedStatusCodes || []).includes(
|
|
|
|
|
- response?.statusCode
|
|
|
|
|
- )
|
|
|
|
|
- ) {
|
|
|
|
|
- return callback(null, response, body)
|
|
|
|
|
- } else if (response?.statusCode === 403) {
|
|
|
|
|
- error = new Errors.ForbiddenError('overleaf v1 returned forbidden')
|
|
|
|
|
- error.statusCode = response.statusCode
|
|
|
|
|
- return callback(error)
|
|
|
|
|
- } else if (response?.statusCode === 404) {
|
|
|
|
|
- error = new Errors.NotFoundError(
|
|
|
|
|
- `overleaf v1 returned non-success code: ${response.statusCode} ${options.method} ${options.uri}`
|
|
|
|
|
- )
|
|
|
|
|
- error.statusCode = response.statusCode
|
|
|
|
|
- return callback(error)
|
|
|
|
|
- } else {
|
|
|
|
|
- error = new OError('overleaf v1 returned non-success code', {
|
|
|
|
|
- status: response?.statusCode,
|
|
|
|
|
- method: options.method,
|
|
|
|
|
- url: options.uri,
|
|
|
|
|
- })
|
|
|
|
|
- error.statusCode = response?.statusCode
|
|
|
|
|
- return callback(error)
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
|
|
+const V1Api = {
|
|
|
|
|
+ request: makeRequest,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
V1Api.promises = {
|
|
V1Api.promises = {
|
|
|
request: promisifyMultiResult(V1Api.request, ['response', 'body']),
|
|
request: promisifyMultiResult(V1Api.request, ['response', 'body']),
|
|
|
- oauthRequest: promisifyMultiResult(V1Api.oauthRequest, ['response', 'body']),
|
|
|
|
|
}
|
|
}
|
|
|
export default V1Api
|
|
export default V1Api
|