Remove extensionizer indirection (#309)
* Remove extensionizer indirection * Slight duplication * Chrome mock * Update package.json * chrome types, chrome import
This commit is contained in:
parent
5c58be78db
commit
75f9109cf4
@ -29,4 +29,7 @@ const messagingFake = new MessagingFake();
|
||||
|
||||
chrome.runtime.connect.returns(messagingFake);
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
(window as any).chrome = chrome;
|
||||
|
||||
export default chrome;
|
||||
@ -12,9 +12,10 @@ module.exports = Object.assign({}, config, {
|
||||
},
|
||||
modulePathIgnorePatterns: [
|
||||
'<rootDir>/packages/extension/build',
|
||||
'<rootDir>/packages/extension-ui/build',
|
||||
'<rootDir>/packages/extension-base/build',
|
||||
'<rootDir>/packages/extension-chains/build',
|
||||
'<rootDir>/packages/extension-dapp/build',
|
||||
'<rootDir>/packages/extension-inject/build',
|
||||
'<rootDir>/packages/extension-dapp/build'
|
||||
'<rootDir>/packages/extension-ui/build'
|
||||
]
|
||||
});
|
||||
|
||||
@ -8,7 +8,6 @@
|
||||
"@babel/runtime": "^7.9.2",
|
||||
"@polkadot/api": "^1.9.1",
|
||||
"@polkadot/keyring": "^2.7.1",
|
||||
"@polkadot/ui-keyring": "^0.52.0-beta.22",
|
||||
"extensionizer": "^1.0.1"
|
||||
"@polkadot/ui-keyring": "^0.52.0-beta.22"
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../../../__mocks__/chrome';
|
||||
|
||||
import keyring from '@polkadot/ui-keyring';
|
||||
import ExtensionStore from '@polkadot/ui-keyring/stores/Extension';
|
||||
import { cryptoWaitReady } from '@polkadot/util-crypto';
|
||||
|
||||
@ -6,7 +6,6 @@ import { MetadataDef } from '@polkadot/extension-inject/types';
|
||||
import { SubjectInfo } from '@polkadot/ui-keyring/observable/types';
|
||||
import { AccountJson, AuthorizeRequest, MessageTypes, MetadataRequest, RequestAccountCreateExternal, RequestAccountCreateSuri, RequestAccountEdit, RequestAccountExport, RequestAccountValidate, RequestAuthorizeApprove, RequestAuthorizeReject, RequestDeriveCreate, ResponseDeriveValidate, RequestMetadataApprove, RequestMetadataReject, RequestSigningApprovePassword, RequestSigningApproveSignature, RequestSigningCancel, RequestSeedCreate, RequestTypes, ResponseAccountExport, RequestAccountForget, ResponseSeedCreate, RequestSeedValidate, RequestDeriveValidate, ResponseSeedValidate, ResponseType, SigningRequest } from '../types';
|
||||
|
||||
import extension from 'extensionizer';
|
||||
import keyring from '@polkadot/ui-keyring';
|
||||
import accountsObservable from '@polkadot/ui-keyring/observable/accounts';
|
||||
import { TypeRegistry } from '@polkadot/types';
|
||||
@ -14,6 +13,7 @@ import { KeyringPair, KeyringPair$Meta } from '@polkadot/keyring/types';
|
||||
import { assert, isHex } from '@polkadot/util';
|
||||
import { keyExtractSuri, mnemonicGenerate, mnemonicValidate } from '@polkadot/util-crypto';
|
||||
|
||||
import chrome from '../../chrome';
|
||||
import State from './State';
|
||||
import { createSubscription, unsubscribe } from './subscriptions';
|
||||
|
||||
@ -270,8 +270,8 @@ export default class Extension {
|
||||
}
|
||||
|
||||
private windowOpen (): boolean {
|
||||
extension.tabs.create({
|
||||
url: extension.extension.getURL('index.html')
|
||||
chrome.tabs.create({
|
||||
url: chrome.extension.getURL('index.html')
|
||||
});
|
||||
|
||||
return true;
|
||||
|
||||
@ -7,11 +7,11 @@ import { ProviderMeta, MetadataDef } from '@polkadot/extension-inject/types';
|
||||
import { JsonRpcResponse, ProviderInterface, ProviderInterfaceCallback } from '@polkadot/rpc-provider/types';
|
||||
import { AccountJson, AuthorizeRequest, MetadataRequest, RequestAuthorizeTab, RequestRpcSend, RequestRpcSubscribe, RequestSign, ResponseRpcListProviders, ResponseSigning, SigningRequest, RequestRpcUnsubscribe } from '../types';
|
||||
|
||||
import extension from 'extensionizer';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { assert } from '@polkadot/util';
|
||||
|
||||
import MetadataStore from './MetadataStore';
|
||||
import chrome from '../../chrome';
|
||||
import { MetadataStore } from '../stores';
|
||||
|
||||
interface AuthRequest {
|
||||
id: string;
|
||||
@ -65,7 +65,7 @@ const WINDOW_OPTS = {
|
||||
left: 150,
|
||||
top: 150,
|
||||
type: 'popup',
|
||||
url: extension.extension.getURL('index.html'),
|
||||
url: chrome.extension.getURL('index.html'),
|
||||
width: 480
|
||||
};
|
||||
|
||||
@ -144,13 +144,13 @@ export default class State {
|
||||
|
||||
private popupClose (): void {
|
||||
this.#windows.forEach((id: number): void =>
|
||||
extension.windows.remove(id)
|
||||
chrome.windows.remove(id)
|
||||
);
|
||||
this.#windows = [];
|
||||
}
|
||||
|
||||
private popupOpen (): void {
|
||||
extension.windows.create({ ...WINDOW_OPTS }, (window?: chrome.windows.Window): void => {
|
||||
chrome.windows.create({ ...WINDOW_OPTS }, (window?: chrome.windows.Window): void => {
|
||||
if (window) {
|
||||
this.#windows.push(window.id);
|
||||
}
|
||||
@ -215,7 +215,7 @@ export default class State {
|
||||
: (signCount ? `${signCount}` : '')
|
||||
);
|
||||
|
||||
extension.browserAction.setBadgeText({ text });
|
||||
chrome.browserAction.setBadgeText({ text });
|
||||
|
||||
if (shouldClose && text === '') {
|
||||
this.popupClose();
|
||||
|
||||
@ -4,23 +4,23 @@
|
||||
|
||||
import { MetadataDef } from '@polkadot/extension-inject/types';
|
||||
|
||||
import extension from 'extensionizer';
|
||||
import chrome from '@polkadot/extension-base/chrome';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
type StoreValue = Record<string, any>;
|
||||
|
||||
const lastError = (type: string): void => {
|
||||
const error = extension.runtime.lastError;
|
||||
const error = chrome.runtime.lastError;
|
||||
|
||||
if (error) {
|
||||
console.error(`ChainStore.${type}:: runtime.lastError:`, error);
|
||||
console.error(`MetadataStore.${type}:: runtime.lastError:`, error);
|
||||
}
|
||||
};
|
||||
|
||||
export default class Store {
|
||||
export default class MetadataStore {
|
||||
public all (cb: (key: string, value: MetadataDef) => void): void {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
extension.storage.local.get(null, (result: StoreValue): void => {
|
||||
chrome.storage.local.get(null, (result: StoreValue): void => {
|
||||
lastError('all');
|
||||
|
||||
Object.entries(result).forEach(([key, value]): void => {
|
||||
@ -30,7 +30,7 @@ export default class Store {
|
||||
}
|
||||
|
||||
public get (key: string, cb: (value: MetadataDef) => void): void {
|
||||
extension.storage.local.get([key], (result: StoreValue): void => {
|
||||
chrome.storage.local.get([key], (result: StoreValue): void => {
|
||||
lastError('get');
|
||||
|
||||
cb(result[key]);
|
||||
@ -38,7 +38,7 @@ export default class Store {
|
||||
}
|
||||
|
||||
public remove (key: string, cb?: () => void): void {
|
||||
extension.storage.local.remove(key, (): void => {
|
||||
chrome.storage.local.remove(key, (): void => {
|
||||
lastError('remove');
|
||||
|
||||
cb && cb();
|
||||
@ -46,7 +46,7 @@ export default class Store {
|
||||
}
|
||||
|
||||
public set (key: string, value: MetadataDef, cb?: () => void): void {
|
||||
extension.storage.local.set({ [key]: value }, (): void => {
|
||||
chrome.storage.local.set({ [key]: value }, (): void => {
|
||||
lastError('set');
|
||||
|
||||
cb && cb();
|
||||
5
packages/extension-base/src/background/stores/index.ts
Normal file
5
packages/extension-base/src/background/stores/index.ts
Normal file
@ -0,0 +1,5 @@
|
||||
// Copyright 2019 @polkadot/extension-chains authors & contributors
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
export { default as MetadataStore } from './Metadata';
|
||||
11
packages/extension-base/src/chrome.ts
Normal file
11
packages/extension-base/src/chrome.ts
Normal file
@ -0,0 +1,11 @@
|
||||
// Copyright 2019 @polkadot/extension-chains authors & contributors
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
const extension = typeof chrome !== 'undefined'
|
||||
? chrome
|
||||
: typeof browser !== 'undefined'
|
||||
? browser
|
||||
: null;
|
||||
|
||||
export default extension as typeof chrome;
|
||||
@ -2,6 +2,8 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../../../__mocks__/chrome';
|
||||
|
||||
import Adapter from 'enzyme-adapter-react-16';
|
||||
import { configure, mount, ReactWrapper } from 'enzyme';
|
||||
import { themes, Theme } from '@polkadot/extension-ui/components';
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../../../__mocks__/chrome';
|
||||
|
||||
import { AuthorizeRequest } from '@polkadot/extension-base/background/types';
|
||||
|
||||
import { configure, mount, ReactWrapper } from 'enzyme';
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../../../__mocks__/chrome';
|
||||
|
||||
import { configure, mount, ReactWrapper } from 'enzyme';
|
||||
import Adapter from 'enzyme-adapter-react-16';
|
||||
import React from 'react';
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../../__mocks__/chrome';
|
||||
|
||||
import { act } from 'react-dom/test-utils';
|
||||
import Adapter from 'enzyme-adapter-react-16';
|
||||
import { configure, mount, ReactWrapper } from 'enzyme';
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../../../__mocks__/chrome';
|
||||
|
||||
import React, { useState } from 'react';
|
||||
import Adapter from 'enzyme-adapter-react-16';
|
||||
|
||||
|
||||
@ -2,9 +2,11 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../__mocks__/chrome';
|
||||
|
||||
import Adapter from 'enzyme-adapter-react-16';
|
||||
import { configure } from 'enzyme';
|
||||
import extensionizer from 'extensionizer';
|
||||
import chrome from '@polkadot/extension-base/chrome';
|
||||
|
||||
import { exportAccount } from './messaging';
|
||||
|
||||
@ -14,7 +16,7 @@ describe('messaging sends message to background via extension port for', () => {
|
||||
test('exportAccount', () => {
|
||||
const callback = jest.fn();
|
||||
|
||||
extensionizer.runtime.connect().onMessage.addListener(callback);
|
||||
chrome.runtime.connect().onMessage.addListener(callback);
|
||||
exportAccount('HjoBp62cvsWDA3vtNMWxz6c9q13ReEHi9UGHK7JbZweH5g5', 'passw0rd');
|
||||
|
||||
expect(callback).toHaveBeenCalledWith(
|
||||
|
||||
@ -6,8 +6,8 @@ import { AccountJson, AuthorizeRequest, SigningRequest, RequestTypes, MessageTyp
|
||||
import { Chain } from '@polkadot/extension-chains/types';
|
||||
import { KeypairType } from '@polkadot/util-crypto/types';
|
||||
|
||||
import extension from 'extensionizer';
|
||||
import { PORT_EXTENSION } from '@polkadot/extension-base/defaults';
|
||||
import chrome from '@polkadot/extension-base/chrome';
|
||||
import { findChain } from '@polkadot/extension-chains';
|
||||
|
||||
interface Handler {
|
||||
@ -20,7 +20,7 @@ interface Handler {
|
||||
|
||||
type Handlers = Record<string, Handler>;
|
||||
|
||||
const port = extension.runtime.connect({ name: PORT_EXTENSION });
|
||||
const port = chrome.runtime.connect({ name: PORT_EXTENSION });
|
||||
const handlers: Handlers = {};
|
||||
let idCounter = 0;
|
||||
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import '../../../../__mocks__/chrome';
|
||||
|
||||
import Adapter from 'enzyme-adapter-react-16';
|
||||
import { configure, mount, ReactWrapper } from 'enzyme';
|
||||
import React from 'react';
|
||||
|
||||
@ -2,11 +2,10 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import extension from 'extensionizer';
|
||||
|
||||
// Runs in the extension background, handling all keyring access
|
||||
|
||||
import handlers from '@polkadot/extension-base/background/handlers';
|
||||
import chrome from '@polkadot/extension-base/chrome';
|
||||
import { PORT_CONTENT, PORT_EXTENSION } from '@polkadot/extension-base/defaults';
|
||||
import keyring from '@polkadot/ui-keyring';
|
||||
import ExtensionStore from '@polkadot/ui-keyring/stores/Extension';
|
||||
@ -14,10 +13,10 @@ import { assert } from '@polkadot/util';
|
||||
import { cryptoWaitReady } from '@polkadot/util-crypto';
|
||||
|
||||
// setup the notification (same a FF default background, white text)
|
||||
extension.browserAction.setBadgeBackgroundColor({ color: '#d90000' });
|
||||
chrome.browserAction.setBadgeBackgroundColor({ color: '#d90000' });
|
||||
|
||||
// listen to all messages and handle appropriately
|
||||
extension.runtime.onConnect.addListener((port): void => {
|
||||
chrome.runtime.onConnect.addListener((port): void => {
|
||||
// shouldn't happen, however... only listen to what we know about
|
||||
assert([PORT_CONTENT, PORT_EXTENSION].includes(port.name), `Unknown connection from ${port.name}`);
|
||||
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
import extension from 'extensionizer';
|
||||
import chrome from '@polkadot/extension-base/chrome';
|
||||
import { PORT_CONTENT } from '@polkadot/extension-base/defaults';
|
||||
|
||||
// connect to the extension
|
||||
const port = extension.runtime.connect({ name: PORT_CONTENT });
|
||||
const port = chrome.runtime.connect({ name: PORT_CONTENT });
|
||||
|
||||
// send any messages from the extension back to the page
|
||||
port.onMessage.addListener((data): void => {
|
||||
@ -26,7 +26,7 @@ window.addEventListener('message', ({ data, source }): void => {
|
||||
// inject our data injector
|
||||
const script = document.createElement('script');
|
||||
|
||||
script.src = extension.extension.getURL('page.js');
|
||||
script.src = chrome.extension.getURL('page.js');
|
||||
|
||||
script.onload = (): void => {
|
||||
// remove the injecting tag when loaded
|
||||
|
||||
11
packages/extension/src/extensionizer.d.ts
vendored
11
packages/extension/src/extensionizer.d.ts
vendored
@ -1,11 +0,0 @@
|
||||
// Copyright 2019-2020 @polkadot/extension authors & contributors
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the Apache-2.0 license. See the LICENSE file for details.
|
||||
|
||||
/// <reference types="chrome"/>
|
||||
|
||||
declare module 'extensionizer' {
|
||||
const extensionizer: typeof chrome;
|
||||
|
||||
export default extensionizer;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user