{"version":3,"file":"error.mjs","names":["#makeMessage","error"],"sources":["../../src/storage-node/error.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport class StorageNodeError extends Error {}\n\nexport class StorageNodeAPIError<\n\tTStatus extends number | undefined = number | undefined,\n\tTError extends object | undefined = object | undefined,\n> extends StorageNodeError {\n\t/** HTTP status for the response that caused the error. */\n\treadonly status: TStatus;\n\n\t/** JSON body of the response that caused the error. */\n\treadonly error: TError;\n\n\tconstructor(status: TStatus, error: TError, message: string | undefined) {\n\t\tsuper(StorageNodeAPIError.#makeMessage(status, error, message));\n\t\tthis.status = status;\n\t\tthis.error = error;\n\t}\n\n\tstatic #makeMessage(status: number | undefined, error: unknown, message: string | undefined) {\n\t\tfunction hasErrorMessage(error: any): error is { error: { message: string } } {\n\t\t\treturn typeof error?.error?.message === 'string';\n\t\t}\n\n\t\tconst inferredMessage = hasErrorMessage(error) ? error.error.message : message;\n\t\tconst finalMessage = inferredMessage ? inferredMessage : JSON.stringify(error);\n\n\t\tif (status && finalMessage) {\n\t\t\treturn `${status} ${finalMessage}`;\n\t\t} else if (finalMessage) {\n\t\t\treturn finalMessage;\n\t\t} else if (status) {\n\t\t\treturn `${status} status code (no body)`;\n\t\t}\n\t\treturn '(no status code or body)';\n\t}\n\n\tstatic generate(\n\t\tstatus: number | undefined,\n\t\terrorResponse: object | undefined,\n\t\tmessage: string | undefined,\n\t): StorageNodeAPIError {\n\t\tif (!status) {\n\t\t\treturn new ConnectionError({ message });\n\t\t}\n\n\t\tif (status === 400) {\n\t\t\treturn BadRequestError.generate(status, errorResponse, message);\n\t\t}\n\n\t\tif (status === 401) {\n\t\t\treturn new AuthenticationError(status, errorResponse, message);\n\t\t}\n\n\t\tif (status === 403) {\n\t\t\treturn new PermissionDeniedError(status, errorResponse, message);\n\t\t}\n\n\t\tif (status === 404) {\n\t\t\treturn new NotFoundError(status, errorResponse, message);\n\t\t}\n\n\t\tif (status === 409) {\n\t\t\treturn new ConflictError(status, errorResponse, message);\n\t\t}\n\n\t\tif (status === 422) {\n\t\t\treturn new UnprocessableEntityError(status, errorResponse, message);\n\t\t}\n\n\t\tif (status === 429) {\n\t\t\treturn new RateLimitError(status, errorResponse, message);\n\t\t}\n\n\t\tif (status === 451) {\n\t\t\treturn new LegallyUnavailableError(status, errorResponse, message);\n\t\t}\n\n\t\tif (status >= 500) {\n\t\t\treturn new InternalServerError(status, errorResponse, message);\n\t\t}\n\n\t\treturn new StorageNodeAPIError(status, errorResponse, message);\n\t}\n}\n\nexport class UserAbortError extends StorageNodeAPIError<undefined, undefined> {\n\tconstructor({ message }: { message?: string } = {}) {\n\t\tsuper(undefined, undefined, message || 'Request was aborted.');\n\t}\n}\n\nexport class ConnectionError extends StorageNodeAPIError<undefined, undefined> {\n\tconstructor({ message }: { message?: string | undefined }) {\n\t\tsuper(undefined, undefined, message || 'Connection error.');\n\t}\n}\n\nexport class ConnectionTimeoutError extends StorageNodeAPIError<undefined, undefined> {\n\tconstructor({ message }: { message?: string } = {}) {\n\t\tsuper(undefined, undefined, message ?? 'Request timed out.');\n\t}\n}\n\nexport class BadRequestError extends StorageNodeAPIError<400> {\n\tstatic generate(\n\t\tstatus: 400,\n\t\terrorResponse: object | undefined,\n\t\tmessage: string | undefined,\n\t): StorageNodeAPIError {\n\t\tif (errorResponse && typeof errorResponse === 'object' && 'error' in errorResponse) {\n\t\t\tconst error = errorResponse.error as {\n\t\t\t\tdetails?: [\n\t\t\t\t\t{\n\t\t\t\t\t\treason?: string;\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t};\n\t\t\tif (error.details?.[0]?.reason === 'NOT_REGISTERED') {\n\t\t\t\treturn new BlobNotRegisteredError(errorResponse, message);\n\t\t\t}\n\t\t}\n\n\t\treturn new BadRequestError(status, errorResponse, message);\n\t}\n}\n\nexport class BlobNotRegisteredError extends StorageNodeAPIError<400> {\n\tconstructor(error: object | undefined, message: string | undefined) {\n\t\tsuper(400, error, message);\n\t}\n}\n\nexport class AuthenticationError extends StorageNodeAPIError<401> {}\n\nexport class PermissionDeniedError extends StorageNodeAPIError<403> {}\n\nexport class NotFoundError extends StorageNodeAPIError<404> {}\n\nexport class ConflictError extends StorageNodeAPIError<409> {}\n\nexport class UnprocessableEntityError extends StorageNodeAPIError<422> {}\n\nexport class RateLimitError extends StorageNodeAPIError<429> {}\n\nexport class LegallyUnavailableError extends StorageNodeAPIError<451> {}\n\nexport class InternalServerError extends StorageNodeAPIError<number> {}\n"],"mappings":";AAGA,IAAa,mBAAb,cAAsC,MAAM;AAE5C,IAAa,sBAAb,MAAa,4BAGH,iBAAiB;CAO1B,YAAY,QAAiB,OAAe,SAA6B;AACxE,QAAM,qBAAoBA,YAAa,QAAQ,OAAO,QAAQ,CAAC;AAC/D,OAAK,SAAS;AACd,OAAK,QAAQ;;CAGd,QAAOA,YAAa,QAA4B,OAAgB,SAA6B;EAC5F,SAAS,gBAAgB,SAAqD;AAC7E,UAAO,OAAOC,SAAO,OAAO,YAAY;;EAGzC,MAAM,kBAAkB,gBAAgB,MAAM,GAAG,MAAM,MAAM,UAAU;EACvE,MAAM,eAAe,kBAAkB,kBAAkB,KAAK,UAAU,MAAM;AAE9E,MAAI,UAAU,aACb,QAAO,GAAG,OAAO,GAAG;WACV,aACV,QAAO;WACG,OACV,QAAO,GAAG,OAAO;AAElB,SAAO;;CAGR,OAAO,SACN,QACA,eACA,SACsB;AACtB,MAAI,CAAC,OACJ,QAAO,IAAI,gBAAgB,EAAE,SAAS,CAAC;AAGxC,MAAI,WAAW,IACd,QAAO,gBAAgB,SAAS,QAAQ,eAAe,QAAQ;AAGhE,MAAI,WAAW,IACd,QAAO,IAAI,oBAAoB,QAAQ,eAAe,QAAQ;AAG/D,MAAI,WAAW,IACd,QAAO,IAAI,sBAAsB,QAAQ,eAAe,QAAQ;AAGjE,MAAI,WAAW,IACd,QAAO,IAAI,cAAc,QAAQ,eAAe,QAAQ;AAGzD,MAAI,WAAW,IACd,QAAO,IAAI,cAAc,QAAQ,eAAe,QAAQ;AAGzD,MAAI,WAAW,IACd,QAAO,IAAI,yBAAyB,QAAQ,eAAe,QAAQ;AAGpE,MAAI,WAAW,IACd,QAAO,IAAI,eAAe,QAAQ,eAAe,QAAQ;AAG1D,MAAI,WAAW,IACd,QAAO,IAAI,wBAAwB,QAAQ,eAAe,QAAQ;AAGnE,MAAI,UAAU,IACb,QAAO,IAAI,oBAAoB,QAAQ,eAAe,QAAQ;AAG/D,SAAO,IAAI,oBAAoB,QAAQ,eAAe,QAAQ;;;AAIhE,IAAa,iBAAb,cAAoC,oBAA0C;CAC7E,YAAY,EAAE,YAAkC,EAAE,EAAE;AACnD,QAAM,QAAW,QAAW,WAAW,uBAAuB;;;AAIhE,IAAa,kBAAb,cAAqC,oBAA0C;CAC9E,YAAY,EAAE,WAA6C;AAC1D,QAAM,QAAW,QAAW,WAAW,oBAAoB;;;AAI7D,IAAa,yBAAb,cAA4C,oBAA0C;CACrF,YAAY,EAAE,YAAkC,EAAE,EAAE;AACnD,QAAM,QAAW,QAAW,WAAW,qBAAqB;;;AAI9D,IAAa,kBAAb,MAAa,wBAAwB,oBAAyB;CAC7D,OAAO,SACN,QACA,eACA,SACsB;AACtB,MAAI,iBAAiB,OAAO,kBAAkB,YAAY,WAAW,eAQpE;OAPc,cAAc,MAOlB,UAAU,IAAI,WAAW,iBAClC,QAAO,IAAI,uBAAuB,eAAe,QAAQ;;AAI3D,SAAO,IAAI,gBAAgB,QAAQ,eAAe,QAAQ;;;AAI5D,IAAa,yBAAb,cAA4C,oBAAyB;CACpE,YAAY,OAA2B,SAA6B;AACnE,QAAM,KAAK,OAAO,QAAQ;;;AAI5B,IAAa,sBAAb,cAAyC,oBAAyB;AAElE,IAAa,wBAAb,cAA2C,oBAAyB;AAEpE,IAAa,gBAAb,cAAmC,oBAAyB;AAE5D,IAAa,gBAAb,cAAmC,oBAAyB;AAE5D,IAAa,2BAAb,cAA8C,oBAAyB;AAEvE,IAAa,iBAAb,cAAoC,oBAAyB;AAE7D,IAAa,0BAAb,cAA6C,oBAAyB;AAEtE,IAAa,sBAAb,cAAyC,oBAA4B"}