From fe825d2271894b84faf8d2088769146495b61281 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 19 Aug 2020 11:43:47 +0800 Subject: [PATCH] Add types (#92) * Create index.d.ts Co-authored-by: Erik Marks <25517051+rekmarks@users.noreply.github.com> --- index.d.ts | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 ++- 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 00000000..102de97a --- /dev/null +++ b/index.d.ts @@ -0,0 +1,70 @@ +import { EventEmitter } from 'events' +import { Duplex } from 'stream' + +export interface MetamaskInpageProviderOptions { + /** + * The logging API to use. + * @default console + */ + logger?: Pick + /** + * The maximum number of event listeners. + * @default 100 + */ + maxEventListeners?: number + /** + * Whether the provider should send page metadata. + * @default true + */ + shouldSendMetadata?: boolean +} +export class MetamaskInpageProvider extends EventEmitter { + /** + * + * @param connectionStream A Node.js duplex stream + * @param options An options bag + */ + constructor(connectionStream: Duplex, options?: MetamaskInpageProviderOptions) + readonly isMetaMask: true + readonly selectedAddress: string | null + readonly networkVersion: string | null + readonly chainId: string | undefined + isConnected(): boolean + sendAsync(payload: JsonRpcPayload, callback: (error: Error | null, result?: JsonRpcResponse) => void): void + /** Submits an RPC request to MetaMask for the given method, with the given params. Resolves with the result of the method call, or rejects on error. */ + request(args: JsonRpcPayload): Promise +} +/** + * Initializes a MetamaskInpageProvider and (optionally) sets it on window.ethereum. + * @returns The initialized provider (whether set or not). + */ +export function initProvider( + opts?: Pick & { + /** A Node.js duplex stream */ + connectionStream?: Duplex + /** Whether the provider should be set as window.ethereum */ + shouldSetOnWindow?: boolean + } +): MetamaskInpageProvider +/** + * Sets the given provider instance as window.ethereum and dispatches the 'ethereum#initialized' event on window. + * + * @param providerInstance - The provider instance. + */ +export function setGlobalProvider(providerInstance: MetamaskInpageProvider): void +export interface JsonRpcPayload { + jsonrpc: string + method: string + params?: unknown[] + id?: string | number +} +export interface JsonRpcResponse { + jsonrpc: string + id: string | number + result?: unknown + error?: { + code: number + message: string + data?: unknown + } +} diff --git a/package.json b/package.json index 28023bdb..4284ef93 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "6.2.0", "description": "A JavaScript Ethereum provider that connects over a WebExtension port.", "main": "index.js", + "type": "index.d.ts", "scripts": { "test": "jest", "coverage": "jest --coverage", @@ -27,7 +28,8 @@ }, "homepage": "https://github.com/MetaMask/inpage-provider#readme", "files": [ - "src/" + "src/", + "index.d.ts" ], "dependencies": { "eth-rpc-errors": "^2.1.1",