Skip to content

Commit

Permalink
Support Flask and Beta in the external extension provider (#252)
Browse files Browse the repository at this point in the history
* Support Flask and Beta in the external extension provider

* Add one more test case

* Fix lint

* Update src/extension-provider/createExternalExtensionProvider.ts

Co-authored-by: Maarten Zuidhoorn <[email protected]>

---------

Co-authored-by: Maarten Zuidhoorn <[email protected]>
  • Loading branch information
FrederikBolding and Mrtenz authored Apr 20, 2023
1 parent a6c77a4 commit 7ba2c64
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 19 deletions.
6 changes: 3 additions & 3 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ module.exports = {
coveragePathIgnorePatterns: ['/node_modules/', '/mocks/', '/test/'],
coverageThreshold: {
global: {
branches: 58.12,
branches: 59.24,
functions: 54.95,
lines: 60.61,
statements: 60.84,
lines: 60.91,
statements: 61.14,
},
},
projects: [
Expand Down
35 changes: 35 additions & 0 deletions src/extension-provider/createExternalExtensionProvider.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { StreamProvider } from '../StreamProvider';
import { MockPort } from '../../test/mocks/MockPort';
import messages from '../messages';
import { createExternalExtensionProvider } from './createExternalExtensionProvider';
import config from './external-extension-config.json';

/**
* A fully initialized extension provider, and additional mocks to help
Expand Down Expand Up @@ -126,6 +127,40 @@ describe('createExternalExtensionProvider', () => {
expect(results).toBeInstanceOf(StreamProvider);
});

it('supports Flask', () => {
// `global.chrome.runtime` mock setup by `jest-chrome` in `jest.setup.js`
(global.chrome.runtime.connect as any).mockImplementation(() => {
return new MockPort();
});
const results = createExternalExtensionProvider('flask');
expect(results).toBeInstanceOf(StreamProvider);
expect(global.chrome.runtime.connect).toHaveBeenCalledWith(
config.chromeIds.flask,
);
});

it('supports Beta', () => {
// `global.chrome.runtime` mock setup by `jest-chrome` in `jest.setup.js`
(global.chrome.runtime.connect as any).mockImplementation(() => {
return new MockPort();
});
const results = createExternalExtensionProvider('beta');
expect(results).toBeInstanceOf(StreamProvider);
expect(global.chrome.runtime.connect).toHaveBeenCalledWith(
config.chromeIds.beta,
);
});

it('supports custom extension ID', () => {
// `global.chrome.runtime` mock setup by `jest-chrome` in `jest.setup.js`
(global.chrome.runtime.connect as any).mockImplementation(() => {
return new MockPort();
});
const results = createExternalExtensionProvider('foobar');
expect(results).toBeInstanceOf(StreamProvider);
expect(global.chrome.runtime.connect).toHaveBeenCalledWith('foobar');
});

describe('RPC warnings', () => {
const warnings = [
{
Expand Down
25 changes: 11 additions & 14 deletions src/extension-provider/createExternalExtensionProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ import config from './external-extension-config.json';

const browser = detect();

export function createExternalExtensionProvider() {
export type ExtensionType = 'stable' | 'flask' | 'beta' | string;

export function createExternalExtensionProvider(
typeOrId: ExtensionType = 'stable',
) {
let provider;

try {
const currentMetaMaskId = getMetaMaskId();
const metamaskPort = chrome.runtime.connect(
currentMetaMaskId,
) as Runtime.Port;
const extensionId = getExtensionId(typeOrId);
const metamaskPort = chrome.runtime.connect(extensionId) as Runtime.Port;

const pluginStream = new PortStream(metamaskPort);
provider = new StreamProvider(pluginStream, {
Expand All @@ -35,13 +37,8 @@ export function createExternalExtensionProvider() {
return provider;
}

function getMetaMaskId() {
switch (browser?.name) {
case 'chrome':
return config.CHROME_ID;
case 'firefox':
return config.FIREFOX_ID;
default:
return config.CHROME_ID;
}
function getExtensionId(typeOrId: ExtensionType) {
const ids =
browser?.name === 'firefox' ? config.firefoxIds : config.chromeIds;
return ids[typeOrId as keyof typeof ids] ?? typeOrId;
}
12 changes: 10 additions & 2 deletions src/extension-provider/external-extension-config.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
{
"CHROME_ID": "nkbihfbeogaeaoehlefnkodbefgpgknn",
"FIREFOX_ID": "[email protected]"
"chromeIds": {
"stable": "nkbihfbeogaeaoehlefnkodbefgpgknn",
"beta": "pbbkamfgmaedccnfkmjcofcecjhfgldn",
"flask": "ljfoeinjpaedjfecbmggjgodbgkmjkjk"
},
"firefoxIds": {
"stable": "[email protected]",
"beta": "[email protected]",
"flask": "[email protected]"
}
}

0 comments on commit 7ba2c64

Please sign in to comment.