UNPKG

@metamask/rpc-errors

Version:
1 lines 13.8 kB
{"version":3,"file":"errors.cjs","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonRpcError, EthereumProviderError } from './classes';\nimport { errorCodes } from './error-constants';\nimport type { OptionalDataWithOptionalCause } from './utils';\nimport { getMessageFromCode } from './utils';\n\ntype EthereumErrorOptions<Data extends OptionalDataWithOptionalCause> = {\n message?: string;\n data?: Data;\n};\n\ntype ServerErrorOptions<Data extends OptionalDataWithOptionalCause> = {\n code: number;\n} & EthereumErrorOptions<Data>;\n\ntype CustomErrorArg<Data extends OptionalDataWithOptionalCause> =\n ServerErrorOptions<Data>;\n\ntype JsonRpcErrorsArg<Data extends OptionalDataWithOptionalCause> =\n | EthereumErrorOptions<Data>\n | string;\n\nexport const rpcErrors = {\n /**\n * Get a JSON RPC 2.0 Parse (-32700) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n parse: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.parse, arg),\n\n /**\n * Get a JSON RPC 2.0 Invalid Request (-32600) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n invalidRequest: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.invalidRequest, arg),\n\n /**\n * Get a JSON RPC 2.0 Invalid Params (-32602) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n invalidParams: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.invalidParams, arg),\n\n /**\n * Get a JSON RPC 2.0 Method Not Found (-32601) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n methodNotFound: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.methodNotFound, arg),\n\n /**\n * Get a JSON RPC 2.0 Internal (-32603) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n internal: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.internal, arg),\n\n /**\n * Get a JSON RPC 2.0 Server error.\n * Permits integer error codes in the [ -32099 <= -32005 ] range.\n * Codes -32000 through -32004 are reserved by EIP-1474.\n *\n * @param opts - The error options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n server: <Data extends OptionalDataWithOptionalCause>(\n opts: ServerErrorOptions<Data>,\n ) => {\n if (!opts || typeof opts !== 'object' || Array.isArray(opts)) {\n throw new Error(\n 'Ethereum RPC Server errors must provide single object argument.',\n );\n }\n const { code } = opts;\n if (!Number.isInteger(code) || code > -32005 || code < -32099) {\n throw new Error(\n '\"code\" must be an integer such that: -32099 <= code <= -32005',\n );\n }\n return getJsonRpcError(code, opts);\n },\n\n /**\n * Get an Ethereum JSON RPC Invalid Input (-32000) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n invalidInput: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.invalidInput, arg),\n\n /**\n * Get an Ethereum JSON RPC Resource Not Found (-32001) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n resourceNotFound: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.resourceNotFound, arg),\n\n /**\n * Get an Ethereum JSON RPC Resource Unavailable (-32002) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n resourceUnavailable: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.resourceUnavailable, arg),\n\n /**\n * Get an Ethereum JSON RPC Transaction Rejected (-32003) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n transactionRejected: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.transactionRejected, arg),\n\n /**\n * Get an Ethereum JSON RPC Method Not Supported (-32004) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n methodNotSupported: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.methodNotSupported, arg),\n\n /**\n * Get an Ethereum JSON RPC Limit Exceeded (-32005) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\n limitExceeded: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => getJsonRpcError(errorCodes.rpc.limitExceeded, arg),\n};\n\nexport const providerErrors = {\n /**\n * Get an Ethereum Provider User Rejected Request (4001) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link EthereumProviderError} class.\n */\n userRejectedRequest: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => {\n return getEthProviderError(errorCodes.provider.userRejectedRequest, arg);\n },\n\n /**\n * Get an Ethereum Provider Unauthorized (4100) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link EthereumProviderError} class.\n */\n unauthorized: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => {\n return getEthProviderError(errorCodes.provider.unauthorized, arg);\n },\n\n /**\n * Get an Ethereum Provider Unsupported Method (4200) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link EthereumProviderError} class.\n */\n unsupportedMethod: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => {\n return getEthProviderError(errorCodes.provider.unsupportedMethod, arg);\n },\n\n /**\n * Get an Ethereum Provider Not Connected (4900) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link EthereumProviderError} class.\n */\n disconnected: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => {\n return getEthProviderError(errorCodes.provider.disconnected, arg);\n },\n\n /**\n * Get an Ethereum Provider Chain Not Connected (4901) error.\n *\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link EthereumProviderError} class.\n */\n chainDisconnected: <Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n ) => {\n return getEthProviderError(errorCodes.provider.chainDisconnected, arg);\n },\n\n /**\n * Get a custom Ethereum Provider error.\n *\n * @param opts - The error options bag.\n * @returns An instance of the {@link EthereumProviderError} class.\n */\n custom: <Data extends OptionalDataWithOptionalCause>(\n opts: CustomErrorArg<Data>,\n ) => {\n if (!opts || typeof opts !== 'object' || Array.isArray(opts)) {\n throw new Error(\n 'Ethereum Provider custom errors must provide single object argument.',\n );\n }\n\n const { code, message, data } = opts;\n\n if (!message || typeof message !== 'string') {\n throw new Error('\"message\" must be a nonempty string');\n }\n return new EthereumProviderError(code, message, data);\n },\n};\n\n/**\n * Get a generic JSON-RPC error class instance.\n *\n * @param code - The error code.\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link JsonRpcError} class.\n */\nfunction getJsonRpcError<Data extends OptionalDataWithOptionalCause>(\n code: number,\n arg?: JsonRpcErrorsArg<Data>,\n): JsonRpcError<Data> {\n const [message, data] = parseOpts(arg);\n return new JsonRpcError(code, message ?? getMessageFromCode(code), data);\n}\n\n/**\n * Get an Ethereum Provider error class instance.\n *\n * @param code - The error code.\n * @param arg - The error message or options bag.\n * @returns An instance of the {@link EthereumProviderError} class.\n */\nfunction getEthProviderError<Data extends OptionalDataWithOptionalCause>(\n code: number,\n arg?: JsonRpcErrorsArg<Data>,\n): EthereumProviderError<Data> {\n const [message, data] = parseOpts(arg);\n return new EthereumProviderError(\n code,\n message ?? getMessageFromCode(code),\n data,\n );\n}\n\n/**\n * Get an error message and optional data from an options bag.\n *\n * @param arg - The error message or options bag.\n * @returns A tuple containing the error message and optional data.\n */\nfunction parseOpts<Data extends OptionalDataWithOptionalCause>(\n arg?: JsonRpcErrorsArg<Data>,\n): [message?: string | undefined, data?: Data | undefined] {\n if (arg) {\n if (typeof arg === 'string') {\n return [arg];\n } else if (typeof arg === 'object' && !Array.isArray(arg)) {\n const { message, data } = arg;\n\n if (message && typeof message !== 'string') {\n throw new Error('Must specify string message.');\n }\n return [message ?? undefined, data];\n }\n }\n\n return [];\n}\n"]}