PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/@substrate/light-client-extension-helpers/dist
Просмотр файла: chunk-KOQEJYB7.mjs.map
{"version":3,"sources":["../src/utils/createRpc.ts"],"sourcesContent":["type RpcRequestMessage = { id?: string; method: string; params?: any[] }\ntype RpcResponseMessage =\n | { id: string; result: any }\n | {\n id: string\n error: { code: number; message: string; data?: any }\n }\n\nexport type RpcMessage = RpcRequestMessage | RpcResponseMessage\n\ntype RpcMethod = (...params: any[]) => any | Promise<any>\n\ntype RpcSpec = Record<string, RpcMethod>\n\nexport type RpcMethodHandlers<TRpcSpec extends RpcSpec, TContext = void> = {\n [method in keyof TRpcSpec]: (\n params: Parameters<TRpcSpec[method]>,\n context: TContext,\n ) => ReturnType<TRpcSpec[method]>\n}\n\nexport type RpcMethodMiddleware<Context = any> = (\n next: RpcMethodMiddlewareNext<Context>,\n request: RpcRequestMessage,\n context: Context,\n) => Promise<any>\n\ntype RpcMethodMiddlewareNext<Context> = (\n request: RpcRequestMessage,\n context: Context,\n) => Promise<any>\n\nexport const createRpc = <TContext>(\n sendMessage: (message: RpcMessage) => void,\n handlers?: RpcMethodHandlers<RpcSpec, TContext>,\n middlewares?: RpcMethodMiddleware<TContext>[],\n) => {\n let nextId = 0\n const pending = new Map<\n string,\n { resolve: (r: any) => void; reject: (e: any) => void }\n >()\n middlewares ??= []\n middlewares.unshift(\n createResponseMiddleware(sendMessage),\n createIsValidMethodMiddleware(Object.keys(handlers ?? {})),\n )\n const applyMiddleware = middlewares.reduce(\n (prevMiddleware, nextMiddleware) => (next, message, context) =>\n prevMiddleware(\n (request, context) => nextMiddleware(next, request, context),\n message,\n context,\n ),\n )\n const innerMethodHandler: RpcMethodMiddlewareNext<TContext> = (\n { method, params },\n context,\n ) => handlers?.[method](params ?? [], context)\n const methodHandler = (message: RpcRequestMessage, context: TContext) =>\n applyMiddleware(innerMethodHandler, message, context)\n const request = <T>(method: string, params: any[]) => {\n const id = `${nextId++}`\n sendMessage({ id, method, params })\n return new Promise<T>((resolve, reject) =>\n pending.set(id, { resolve, reject }),\n )\n }\n const notify = (method: string, params: any[]) => {\n sendMessage({ method, params })\n }\n const handle = async (message: RpcMessage, context: TContext) => {\n if (!isRpcMessage(message)) return\n if (\"method\" in message) {\n try {\n await methodHandler(message, context)\n } catch (error) {\n console.error(\"error hanlding message:\", message, error)\n }\n } else if (\"id\" in message) {\n const { id } = message\n if (!pending.has(id))\n return console.assert(false, \"Unknown message\", message)\n const { resolve, reject } = pending.get(id)!\n pending.delete(id)\n if (\"error\" in message) return reject(message.error)\n resolve(message.result)\n } else {\n console.assert(false, \"Unhandled message\", message)\n }\n }\n return {\n request,\n notify,\n handle,\n withClient<TRpcSpec extends RpcSpec>() {\n const cache = new Map<string, (...args: any[]) => any>()\n const client = new Proxy({} as TRpcSpec, {\n get(_, prop: string) {\n if (!cache.has(prop))\n cache.set(prop, (...args) => request(prop, args))\n return cache.get(prop)!\n },\n })\n return {\n request<\n TMethod extends string & keyof TRpcSpec,\n TParams extends Parameters<TRpcSpec[TMethod]>,\n TReturn extends Awaited<ReturnType<TRpcSpec[TMethod]>>,\n >(method: TMethod, params: TParams) {\n return request<TReturn>(method, params)\n },\n notify<\n TMethod extends string & keyof TRpcSpec,\n TParams extends Parameters<TRpcSpec[TMethod]>,\n >(method: TMethod, params: TParams) {\n notify(method, params)\n },\n handle,\n client,\n }\n },\n }\n}\n\nexport const isRpcMessage = (message: any): message is RpcMessage =>\n typeof message === \"object\" && (\"method\" in message || \"id\" in message)\n\nexport const isRpcRequestMessage = (\n message: any,\n): message is RpcRequestMessage => isRpcMessage(message) && \"method\" in message\n\n// export const logMiddleware: MethodMiddleware = (next, message, _context) => {\n// console.log(`> Received ${JSON.stringify(message)}`)\n// return next(message, _context).then((response) => {\n// console.log(`< Responding ${JSON.stringify(response)}`)\n// return response\n// })\n// }\n\nconst createIsValidMethodMiddleware =\n (methods: string[]): RpcMethodMiddleware =>\n (next, request, context) => {\n if (!methods.includes(request.method))\n throw new RpcError(\"Method not found\", -32601)\n return next(request, context)\n }\n\nconst createResponseMiddleware =\n (sendMessage: (message: RpcResponseMessage) => void): RpcMethodMiddleware =>\n async (next, request, context) => {\n const { id } = request\n try {\n const result = await next(request, context)\n if (!id) return\n sendMessage({ id, result })\n } catch (error) {\n if (!id) return\n if (error instanceof RpcError)\n sendMessage({\n id,\n error: {\n code: error.code,\n message: error.message,\n data: error.data,\n },\n })\n sendMessage({\n id,\n error: {\n code: -32603,\n message:\n error instanceof Error\n ? error.toString()\n : typeof error === \"string\"\n ? error\n : \"Unknown error\",\n },\n })\n }\n }\n\nexport class RpcError extends Error {\n constructor(\n readonly message: string,\n readonly code: number,\n readonly data?: any,\n ) {\n super()\n }\n}\n"],"mappings":"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","names":["request","context"]}Выполнить команду
Для локальной разработки. Не используйте в интернете!