(engine: JRPCEngine)
| 466 | * @deprecated Use {@link providerFromEngineV2} instead. |
| 467 | */ |
| 468 | export function providerFromEngine(engine: JRPCEngine): SafeEventEmitterProvider { |
| 469 | const provider: SafeEventEmitterProvider = new SafeEventEmitter<ProviderEvents>() as SafeEventEmitterProvider; |
| 470 | // handle both rpc send methods |
| 471 | provider.sendAsync = async <T extends JRPCParams, U>(req: JRPCRequest<T>) => { |
| 472 | const res = await engine.handle(req); |
| 473 | if (res.error) { |
| 474 | if (typeof res.error === "object" && Object.keys(res.error).includes("stack") === false) res.error.stack = "Stack trace is not available."; |
| 475 | log.error(res.error); |
| 476 | const err = serializeJrpcError(res.error, { |
| 477 | fallbackError: constructFallbackError(res.error), |
| 478 | shouldIncludeStack: true, |
| 479 | }); |
| 480 | |
| 481 | const errorCode = err?.code ?? errorCodes.rpc.internal; |
| 482 | const error = new JsonRpcError(errorCode, err?.message ?? getMessageFromCode(errorCode), err?.data); |
| 483 | throw error; |
| 484 | } |
| 485 | return res.result as U; |
| 486 | }; |
| 487 | |
| 488 | provider.send = <T extends JRPCParams, U>(req: JRPCRequest<T>, callback: (error: unknown, providerRes: JRPCResponse<U>) => void) => { |
| 489 | if (typeof callback !== "function") { |
| 490 | throw new Error('Must provide callback to "send" method.'); |
| 491 | } |
| 492 | engine.handle(req as JRPCRequest<JRPCParams>, callback); |
| 493 | }; |
| 494 | // forward notifications |
| 495 | if (engine.on) { |
| 496 | engine.on("notification", (message) => { |
| 497 | provider.emit("data", null, message); |
| 498 | }); |
| 499 | } |
| 500 | |
| 501 | provider.request = async <T extends JRPCParams, U>(args: RequestArguments<T>) => { |
| 502 | const req: JRPCRequest<JRPCParams> = { |
| 503 | ...args, |
| 504 | id: Math.random().toString(36).slice(2), |
| 505 | jsonrpc: "2.0", |
| 506 | }; |
| 507 | const res = await provider.sendAsync(req); |
| 508 | return res as U; |
| 509 | }; |
| 510 | return provider; |
| 511 | } |
| 512 | |
| 513 | /** |
| 514 | * @deprecated Use {@link providerFromMiddlewareV2} instead. |
no test coverage detected