Skip to content

Commit

Permalink
feat(upload-client): rename UploadClientError export to the `Upload…
Browse files Browse the repository at this point in the history
…Error`.

`UploadClientError` is deprecated but still available
  • Loading branch information
nd0ut committed Dec 21, 2023
1 parent 6432653 commit 7c03c3d
Show file tree
Hide file tree
Showing 32 changed files with 136 additions and 148 deletions.
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
import { defaultSettings } from '../defaultSettings'
import request from '../request/request.node'
import buildFormData from '../tools/buildFormData'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import getUrl from '../tools/getUrl'
import { getUserAgent } from '../tools/getUserAgent'
import { retryIfFailed } from '../tools/retryIfFailed'
Expand Down Expand Up @@ -100,7 +100,7 @@ export default function base(
}).then(({ data, headers, request }) => {
const response = camelizeKeys(JSON.parse(data)) as Response
if ('error' in response) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
response.error.errorCode,
request,
Expand Down
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/fromUrl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import getUrl from '../tools/getUrl'

import defaultSettings from '../defaultSettings'
import { getUserAgent } from '../tools/getUserAgent'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import { retryIfFailed } from '../tools/retryIfFailed'
import { getStoreValue } from '../tools/getStoreValue'

Expand Down Expand Up @@ -118,7 +118,7 @@ export default function fromUrl(
const response = camelizeKeys(JSON.parse(data)) as Response

if ('error' in response) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
response.error.errorCode,
request,
Expand Down
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/fromUrlStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import getUrl from '../tools/getUrl'

import defaultSettings from '../defaultSettings'
import { getUserAgent } from '../tools/getUserAgent'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import { retryIfFailed } from '../tools/retryIfFailed'

export enum Status {
Expand Down Expand Up @@ -107,7 +107,7 @@ export default function fromUrlStatus(
const response = camelizeKeys(JSON.parse(data)) as Response

if ('error' in response && !isErrorResponse(response)) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
undefined,
request,
Expand Down
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/group.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import getUrl from '../tools/getUrl'

import defaultSettings from '../defaultSettings'
import { getUserAgent } from '../tools/getUserAgent'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import { retryIfFailed } from '../tools/retryIfFailed'

export type GroupOptions = {
Expand Down Expand Up @@ -68,7 +68,7 @@ export default function group(
const response = camelizeKeys(JSON.parse(data)) as Response

if ('error' in response) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
response.error.errorCode,
request,
Expand Down
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/groupInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import getUrl from '../tools/getUrl'

import defaultSettings from '../defaultSettings'
import { getUserAgent } from '../tools/getUserAgent'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import { retryIfFailed } from '../tools/retryIfFailed'

export type GroupInfoOptions = {
Expand Down Expand Up @@ -58,7 +58,7 @@ export default function groupInfo(
const response = camelizeKeys(JSON.parse(data)) as Response

if ('error' in response) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
response.error.errorCode,
request,
Expand Down
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import getUrl from '../tools/getUrl'
import defaultSettings from '../defaultSettings'
import { getUserAgent } from '../tools/getUserAgent'
import { camelizeKeys, CustomUserAgent } from '@uploadcare/api-client-utils'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import { retryIfFailed } from '../tools/retryIfFailed'

/* Types */
Expand Down Expand Up @@ -59,7 +59,7 @@ export default function info(
const response = camelizeKeys(JSON.parse(data)) as Response

if ('error' in response) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
response.error.errorCode,
request,
Expand Down
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/multipartComplete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import getUrl from '../tools/getUrl'
import defaultSettings from '../defaultSettings'
import { getUserAgent } from '../tools/getUserAgent'
import { retryIfFailed } from '../tools/retryIfFailed'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'

export type MultipartCompleteOptions = {
publicKey: string
Expand Down Expand Up @@ -55,7 +55,7 @@ export default function multipartComplete(
const response = camelizeKeys(JSON.parse(data)) as Response

if ('error' in response) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
response.error.errorCode,
request,
Expand Down
4 changes: 2 additions & 2 deletions packages/upload-client/src/api/multipartStart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import {
} from '../defaultSettings'
import { getUserAgent } from '../tools/getUserAgent'
import { retryIfFailed } from '../tools/retryIfFailed'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import { getStoreValue } from '../tools/getStoreValue'

export type MultipartStartOptions = {
Expand Down Expand Up @@ -94,7 +94,7 @@ export default function multipartStart(
const response = camelizeKeys(JSON.parse(data)) as Response

if ('error' in response) {
throw new UploadClientError(
throw new UploadError(
response.error.content,
response.error.errorCode,
request,
Expand Down
7 changes: 6 additions & 1 deletion packages/upload-client/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,12 @@ export const UploadcareNetworkError = NetworkError
export { Headers, ErrorRequestInfo } from './request/types'
export { UploadcareFile } from './tools/UploadcareFile'
export { UploadcareGroup } from './tools/UploadcareGroup'
export { UploadClientError, ErrorResponseInfo } from './tools/errors'
export { UploadError, ErrorResponseInfo } from './tools/UploadError'

import { UploadError } from './tools/UploadError'
/** @deprecated Please use UploadError instead. */
export const UploadClientError = UploadError

export { Settings, SupportedFileInput as SupportedFileInput } from './types'
export {
NodeFile as NodeFile,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,37 @@
import { UploadcareError } from '@uploadcare/api-client-utils'
import { Headers, ErrorRequestInfo } from '../request/types'
import type { ServerErrorCode } from './ServerErrorCode'

export type ErrorResponseInfo = {
error?: {
statusCode: number
content: string
errorCode: string
errorCode: ServerErrorCode
}
}

export class UploadClientError extends UploadcareError {
isCancel?: boolean

readonly code?: string
export class UploadError extends UploadcareError {
readonly code?: ServerErrorCode
readonly request?: ErrorRequestInfo
readonly response?: ErrorResponseInfo
readonly headers?: Headers

constructor(
message: string,
code?: string,
code?: ServerErrorCode,
request?: ErrorRequestInfo,
response?: ErrorResponseInfo,
headers?: Headers
) {
super()

this.name = 'UploadClientError'
this.name = 'UploadError'
this.message = message
this.code = code
this.request = request
this.response = response
this.headers = headers

Object.setPrototypeOf(this, UploadClientError.prototype)
Object.setPrototypeOf(this, UploadError.prototype)
}
}
6 changes: 3 additions & 3 deletions packages/upload-client/src/tools/retryIfFailed.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { UploadClientError } from './errors'
import { UploadError } from './UploadError'
import { retrier, NetworkError } from '@uploadcare/api-client-utils'

const REQUEST_WAS_THROTTLED_CODE = 'RequestThrottledError'
const DEFAULT_RETRY_AFTER_TIMEOUT = 15000
const DEFAULT_NETWORK_ERROR_TIMEOUT = 1000

function getTimeoutFromThrottledRequest(error: UploadClientError): number {
function getTimeoutFromThrottledRequest(error: UploadError): number {
const { headers } = error || {}
if (!headers || typeof headers['retry-after'] !== 'string') {
return DEFAULT_RETRY_AFTER_TIMEOUT
Expand All @@ -28,7 +28,7 @@ export function retryIfFailed<T>(
): Promise<T> {
const { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes } = options
return retrier(({ attempt, retry }) =>
fn().catch((error: Error | UploadClientError | NetworkError) => {
fn().catch((error: Error | UploadError | NetworkError) => {
if (
'response' in error &&
error?.code === REQUEST_WAS_THROTTLED_CODE &&
Expand Down
22 changes: 11 additions & 11 deletions packages/upload-client/src/uploadFile/uploadFromUrl.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import fromUrlStatus, { Status } from '../api/fromUrlStatus'
import fromUrl, { TypeEnum, FromUrlOptions } from '../api/fromUrl'
import { UploadClientError } from '../tools/errors'
import { UploadError } from '../tools/UploadError'
import { race } from '../tools/race'
import { isReadyPoll } from '../tools/isReadyPoll'
import defaultSettings from '../defaultSettings'
Expand Down Expand Up @@ -35,8 +35,8 @@ function pollStrategy({
retryNetworkErrorMaxTimes?: number
onProgress?: ProgressCallback
signal?: AbortSignal
}): Promise<FileInfo | UploadClientError> {
return poll<FileInfo | UploadClientError>({
}): Promise<FileInfo | UploadError> {
return poll<FileInfo | UploadError>({
check: (signal) =>
fromUrlStatus(token, {
publicKey,
Expand All @@ -49,13 +49,13 @@ function pollStrategy({
}).then((response) => {
switch (response.status) {
case Status.Error: {
return new UploadClientError(response.error, response.errorCode)
return new UploadError(response.error, response.errorCode)
}
case Status.Waiting: {
return false
}
case Status.Unknown: {
return new UploadClientError(`Token "${token}" was not found.`)
return new UploadError(`Token "${token}" was not found.`)
}
case Status.Progress: {
if (onProgress) {
Expand Down Expand Up @@ -103,7 +103,7 @@ const pushStrategy = ({
pusherKey: string
signal: AbortSignal
onProgress?: ProgressCallback
}): Promise<FileInfo | UploadClientError> =>
}): Promise<FileInfo | UploadError> =>
new Promise((resolve, reject) => {
const pusher = getPusher(pusherKey)
const unsubErrorHandler = pusher.onError(reject)
Expand Down Expand Up @@ -146,7 +146,7 @@ const pushStrategy = ({

case Status.Error: {
destroy()
reject(new UploadClientError(result.msg, result.error_code))
reject(new UploadError(result.msg, result.error_code))
}
}
})
Expand Down Expand Up @@ -202,9 +202,9 @@ export const uploadFromUrl = (
if (urlResponse.type === TypeEnum.FileInfo) {
return urlResponse
} else {
return race<FileInfo | UploadClientError>(
return race<FileInfo | UploadError>(
[
({ signal }): Promise<FileInfo | UploadClientError> =>
({ signal }): Promise<FileInfo | UploadError> =>
pollStrategy({
token: urlResponse.token,
publicKey,
Expand All @@ -215,7 +215,7 @@ export const uploadFromUrl = (
onProgress,
signal
}),
({ signal }): Promise<FileInfo | UploadClientError> =>
({ signal }): Promise<FileInfo | UploadError> =>
pushStrategy({
token: urlResponse.token,
pusherKey,
Expand All @@ -228,7 +228,7 @@ export const uploadFromUrl = (
}
})
.then((result) => {
if (result instanceof UploadClientError) throw result
if (result instanceof UploadError) throw result

return result
})
Expand Down
6 changes: 3 additions & 3 deletions packages/upload-client/test/api/base.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import base from '../../src/api/base'
import * as factory from '../_fixtureFactory'
import { UploadClientError } from '../../src/tools/errors'
import { UploadError } from '../../src/tools/UploadError'
import { assertComputableProgress } from '../_helpers'
import { jest, expect } from '@jest/globals'

Expand Down Expand Up @@ -48,10 +48,10 @@ describe('API - base', () => {
try {
await base(fileToUpload.data, { publicKey })
} catch (error) {
expect((error as UploadClientError).message).toEqual(
expect((error as UploadError).message).toEqual(
'UPLOADCARE_PUB_KEY is invalid.'
)
expect((error as UploadClientError).code).toEqual(
expect((error as UploadError).code).toEqual(
'ProjectPublicKeyInvalidError'
)
}
Expand Down
8 changes: 3 additions & 5 deletions packages/upload-client/test/api/fromUrl.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import fromUrl, { TypeEnum } from '../../src/api/fromUrl'
import * as factory from '../_fixtureFactory'
import { getSettingsForTesting } from '../_helpers'
import { UploadClientError } from '../../src/tools/errors'
import { UploadError } from '../../src/tools/UploadError'

describe('API - from url', () => {
const sourceUrl = factory.imageUrl('valid')
Expand Down Expand Up @@ -68,10 +68,8 @@ describe('API - from url', () => {
try {
await fromUrl(sourceUrl, { publicKey })
} catch (error) {
expect((error as UploadClientError).message).toEqual(
'pub_key is invalid.'
)
expect((error as UploadClientError).code).toEqual(
expect((error as UploadError).message).toEqual('pub_key is invalid.')
expect((error as UploadError).code).toEqual(
'ProjectPublicKeyInvalidError'
)
}
Expand Down
6 changes: 3 additions & 3 deletions packages/upload-client/test/api/fromUrlStatus.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import fromUrlStatus, { Status } from '../../src/api/fromUrlStatus'
import * as factory from '../_fixtureFactory'
import { getSettingsForTesting } from '../_helpers'
import { UploadClientError } from '../../src/tools/errors'
import { UploadError } from '../../src/tools/UploadError'

describe('API - from url status', () => {
const token = factory.token('valid')
Expand Down Expand Up @@ -50,10 +50,10 @@ describe('API - from url status', () => {
try {
await fromUrlStatus('token', { publicKey })
} catch (error) {
expect((error as UploadClientError).message).toEqual(
expect((error as UploadError).message).toEqual(
'UPLOADCARE_PUB_KEY is invalid.'
)
expect((error as UploadClientError).code).toEqual(
expect((error as UploadError).code).toEqual(
'ProjectPublicKeyInvalidError'
)
}
Expand Down
8 changes: 3 additions & 5 deletions packages/upload-client/test/api/group.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as factory from '../_fixtureFactory'
import { getSettingsForTesting } from '../_helpers'
import group from '../../src/api/group'
import { UploadClientError } from '../../src/tools/errors'
import { UploadError } from '../../src/tools/UploadError'
import { GroupFileInfo } from '../../src'

describe('API - group', () => {
Expand Down Expand Up @@ -69,10 +69,8 @@ describe('API - group', () => {
try {
await group([], { publicKey })
} catch (error) {
expect((error as UploadClientError).message).toEqual(
'pub_key is invalid.'
)
expect((error as UploadClientError).code).toEqual(
expect((error as UploadError).message).toEqual('pub_key is invalid.')
expect((error as UploadError).code).toEqual(
'ProjectPublicKeyInvalidError'
)
}
Expand Down

0 comments on commit 7c03c3d

Please sign in to comment.