Skip to content

Commit

Permalink
Revert "feat: rainbow provider pkg (#1348)"
Browse files Browse the repository at this point in the history
This reverts commit 9b0cd4b.
  • Loading branch information
DanielSinclair committed Mar 2, 2024
1 parent c2cf5fd commit 51dd238
Show file tree
Hide file tree
Showing 14 changed files with 844 additions and 419 deletions.
2 changes: 1 addition & 1 deletion e2e/serial/dappInteractions/2_dappInteractionFlow.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ describe.runIf(browser !== 'firefox')('App interactions flow', () => {

const chain = await findElementById({ id: 'chainId', driver });
const chainText = await chain.getText();
await expect(Number(chainText)).toBe(1337);
await expect(chainText).toBe('0x539');
});

it('should be able to create token', async () => {
Expand Down
7 changes: 2 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@
"@radix-ui/react-select": "1.2.1",
"@radix-ui/react-tabs": "1.0.4",
"@radix-ui/react-tooltip": "1.0.3",
"@rainbow-me/provider": "0.0.2",
"@rainbow-me/swaps": "0.9.1",
"@scure/bip39": "1.2.1",
"@segment/analytics-node": "1.0.0-beta.24",
Expand Down Expand Up @@ -152,7 +151,7 @@
"react-switch": "7.0.0",
"socket.io-client": "4.5.3",
"validator": "13.9.0",
"viem": "1.21.4",
"viem": "1.20.3",
"wagmi": "0.12.19",
"word-wrap": "1.2.4",
"zustand": "4.1.5"
Expand Down Expand Up @@ -263,9 +262,7 @@
"browserify-sign": "4.2.2",
"axios": "1.6.1",
"follow-redirects": "1.15.4",
"ip": "2.0.1",
"viem": "1.21.4",
"@solana/web3.js": "1.90.0"
"ip": "2.0.1"
},
"lavamoat": {
"allowScripts": {
Expand Down
4 changes: 1 addition & 3 deletions src/core/messengers/internal/createMessenger.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import { IMessageSender } from '@rainbow-me/provider';

export type CallbackOptions = {
/** The sender of the message. */
sender: IMessageSender;
sender: chrome.runtime.MessageSender;
/** The topic provided. */
topic: string;
/** An optional scoped identifier. */
Expand Down
4 changes: 1 addition & 3 deletions src/core/messengers/internal/window.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { IMessageSender } from '@rainbow-me/provider';

import {
CallbackFunction,
SendMessage,
Expand Down Expand Up @@ -58,7 +56,7 @@ export const windowMessenger = createMessenger({
try {
response = await callback(event.data.payload, {
topic: event.data.topic,
sender: event.source as IMessageSender,
sender,
id: event.data.id,
});
} catch (error_) {
Expand Down
172 changes: 172 additions & 0 deletions src/core/providers/RainbowInjectedProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
import { Ethereum } from '@wagmi/core';
import { EventEmitter } from 'eventemitter3';

import { Messenger } from '../messengers';
import { providerRequestTransport } from '../transports';
import { RPCMethod } from '../types/rpcMethods';
import { getDappHost, isValidUrl } from '../utils/connectedApps';
import { toHex } from '../utils/hex';

export type ChainIdHex = `0x${string}`;

export type RequestArguments = {
method: RPCMethod;
params?: Array<unknown>;
};
export type RequestResponse =
| {
id: number;
error: Error;
result?: never;
}
| {
id: number;
error?: never;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
result: any;
};

/**
* The provider injected into `window.ethereum`.
*
* Reference EIPs:
* @link https://eips.ethereum.org/EIPS/eip-1193
* @link https://eips.ethereum.org/EIPS/eip-1102
*/
export class RainbowInjectedProvider extends EventEmitter {
chainId: ChainIdHex = '0x1';
connected = false;
isRainbow = true;
isReady = true;
isMetaMask = true;
networkVersion = '1';
selectedAddress: string | undefined;
providers: (RainbowInjectedProvider | Ethereum)[] | undefined = undefined;

#isUnlocked = true;
requestId = 0;
rainbowIsDefaultProvider = false;

[key: string]: unknown;
backgroundMessenger: Messenger | undefined = undefined;

constructor({
messenger,
backgroundMessenger,
}: { messenger?: Messenger; backgroundMessenger?: Messenger } = {}) {
super();

// RainbowInjectedProvider is also used in popup via RainbowConnector
// here we don't need to listen to anything so we don't need these listeners
if (isValidUrl(window.location.href)) {
this.backgroundMessenger = backgroundMessenger;
const host = getDappHost(window.location.href);
messenger?.reply(`accountsChanged:${host}`, async (address) => {
this.emit('accountsChanged', [address]);
});
messenger?.reply(`chainChanged:${host}`, async (chainId: number) => {
this.emit('chainChanged', toHex(String(chainId)));
});
messenger?.reply(`disconnect:${host}`, async () => {
this.emit('disconnect', []);
});
messenger?.reply(`connect:${host}`, async (connectionInfo) => {
this.emit('connect', connectionInfo);
});
messenger?.reply(
'rainbow_setDefaultProvider',
async ({ rainbowAsDefault }: { rainbowAsDefault: boolean }) => {
this.rainbowIsDefaultProvider = rainbowAsDefault;
},
);
}

// EIP-6963 RainbowInjectedProvider in announceProvider was losing context
this.bindMethods();
}

bindMethods() {
for (const key of Object.getOwnPropertyNames(Object.getPrototypeOf(this))) {
const value = this[key];
if (typeof value === 'function' && key !== 'constructor') {
this[key] = value.bind(this);
}
}
}

/**
* @deprecated – This method is deprecated in favor of the RPC method `eth_requestAccounts`.
* @link https://eips.ethereum.org/EIPS/eip-1102#providerenable-deprecated
**/
async enable() {
return this.request({ method: 'eth_requestAccounts' });
}

isConnected() {
return this.connected;
}

async request({
method,
params,
}: RequestArguments): Promise<RequestResponse | undefined> {
this.backgroundMessenger?.send(
'rainbow_prefetchDappMetadata',
window.location.href,
);

// eslint-disable-next-line no-plusplus
const id = this.requestId++;
const response = await providerRequestTransport.send(
{
id,
method,
params,
},
{ id },
);

if (response.id !== id) return;
if (response.error) throw response.error;

switch (method) {
case 'eth_requestAccounts': {
this.selectedAddress = response.result[0];
this.connected = true;
break;
}
case 'eth_chainId': {
this.chainId = <ChainIdHex>response.result;
this.networkVersion = parseInt(this.chainId, 16).toString();
break;
}
}

return response.result;
}

/** @deprecated – This method is deprecated in favor of `request`. */
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async sendAsync(args: RequestArguments) {
return this.request(args);
}

/** @deprecated – This method is deprecated in favor of `request`. */
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async send(
methodOrPayload: string | RequestArguments,
paramsOrCallback: Array<unknown>,
) {
if (
typeof methodOrPayload === 'string' &&
Array.isArray(paramsOrCallback)
) {
return this.request({
method: methodOrPayload as RPCMethod,
params: paramsOrCallback,
});
} else {
return this.request(methodOrPayload as RequestArguments);
}
}
}
2 changes: 2 additions & 0 deletions src/core/providers/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
export { RainbowInjectedProvider } from './RainbowInjectedProvider';
export * from './proxy';
export type { ChainIdHex } from './RainbowInjectedProvider';
7 changes: 3 additions & 4 deletions src/core/transports/providerRequestTransport.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { bridgeMessenger } from '../messengers/internal/bridge';
import { CallbackOptions } from '../messengers/internal/createMessenger';
import {
RequestArguments,
RequestResponse,
} from '@rainbow-me/provider/dist/references';

import { bridgeMessenger } from '../messengers/internal/bridge';
import { CallbackOptions } from '../messengers/internal/createMessenger';
} from '../providers/RainbowInjectedProvider';

import { createTransport } from './internal/createTransport';

Expand Down
8 changes: 4 additions & 4 deletions src/design-system/docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"clsx": "1.2.1",
"framer-motion": "7.6.7",
"lz-string": "1.4.4",
"next": "12.3.4",
"next": "12.3.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-syntax-highlighter": "15.5.0",
Expand All @@ -31,7 +31,7 @@
"word-wrap": "1.2.4"
},
"devDependencies": {
"@lavamoat/preinstall-always-fail": "2.0.0",
"@lavamoat/preinstall-always-fail": "1.0.0",
"@types/babel-plugin-macros": "2.8.5",
"@types/node": "18.11.2",
"@types/react": "18.0.21",
Expand All @@ -46,7 +46,7 @@
"babel-plugin-module-resolver": "4.1.0",
"babel-plugin-preval": "5.1.0",
"eslint": "8.24.0",
"eslint-config-next": "12.3.4",
"eslint-config-next": "12.3.1",
"eslint-config-prettier": "8.5.0",
"eslint-config-rainbow": "4.2.0",
"eslint-plugin-import": "2.26.0",
Expand All @@ -60,4 +60,4 @@
"tsup": "6.3.0",
"typescript": "4.8.4"
}
}
}
Loading

0 comments on commit 51dd238

Please sign in to comment.