diff --git a/CHANGELOG.md b/CHANGELOG.md index d4b07b1d..923a1025 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # CHANGELOG +## master + +Changes: + +- Ensure that `EXTENSION_PREFIX` is always set as part of `@polkadot/extension-base` + + ## 0.44.6 Aug 21, 2022 - **Important** Not published to the stores, aligns with latest released packages. diff --git a/package.json b/package.json index ce0a965f..5a86656f 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,8 @@ "lint": "polkadot-dev-run-lint", "postinstall": "polkadot-dev-yarn-only", "start": "yarn watch", - "test": "polkadot-dev-run-test --detectOpenHandles", - "test:one": "polkadot-dev-run-test --detectOpenHandles", + "test": "EXTENSION_PREFIX='test' polkadot-dev-run-test --detectOpenHandles", + "test:one": "EXTENSION_PREFIX='test' polkadot-dev-run-test --detectOpenHandles", "watch": "cd packages/extension && yarn polkadot-exec-webpack --config webpack.watch.cjs --mode development --watch" }, "devDependencies": { diff --git a/packages/extension-base/src/defaults.ts b/packages/extension-base/src/defaults.ts index 3da5c222..718a0b52 100644 --- a/packages/extension-base/src/defaults.ts +++ b/packages/extension-base/src/defaults.ts @@ -1,16 +1,26 @@ // Copyright 2019-2022 @polkadot/extension-base authors & contributors // SPDX-License-Identifier: Apache-2.0 +// this _must_ be changed for each extension +const EXTENSION_PREFIX = process.env.EXTENSION_PREFIX || ''; + +if (!EXTENSION_PREFIX && !process.env.PORT_PREFIX) { + throw new Error('CRITICAL: The extension does not define an own EXTENSION_PREFIX environment variable as part of the build, this is required to ensure that messages are not shared between extensions. Failure to do so will yield messages sent to multiple extensions.'); +} + +const PORT_PREFIX = `${EXTENSION_PREFIX || 'unknown'}-${process.env.PORT_PREFIX || 'unknown'}`; +const PORT_CONTENT = `${PORT_PREFIX}-content`; +const PORT_EXTENSION = `${PORT_PREFIX}-extension`; +const MESSAGE_ORIGIN_PAGE = `${PORT_PREFIX}-page`; +const MESSAGE_ORIGIN_CONTENT = `${PORT_PREFIX}-content`; + const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json'] as const; const PHISHING_PAGE_REDIRECT = '/phishing-page-detected'; -const EXTENSION_PREFIX = process.env.EXTENSION_PREFIX as string || ''; -const PORT_CONTENT = `${EXTENSION_PREFIX}content`; -const PORT_EXTENSION = `${EXTENSION_PREFIX}extension`; -const MESSAGE_ORIGIN_PAGE = `${EXTENSION_PREFIX}page`; -const MESSAGE_ORIGIN_CONTENT = `${EXTENSION_PREFIX}content`; const PASSWORD_EXPIRY_MIN = 15; const PASSWORD_EXPIRY_MS = PASSWORD_EXPIRY_MIN * 60 * 1000; +// console.log(`Extension is sending and receiving messages on ${PORT_PREFIX}-*`); + export { ALLOWED_PATH, PASSWORD_EXPIRY_MIN, diff --git a/packages/extension-base/src/stores/Accounts.ts b/packages/extension-base/src/stores/Accounts.ts index 4fd77428..16398fe5 100644 --- a/packages/extension-base/src/stores/Accounts.ts +++ b/packages/extension-base/src/stores/Accounts.ts @@ -8,7 +8,11 @@ import BaseStore from './Base'; export default class AccountsStore extends BaseStore implements KeyringStore { constructor () { - super(EXTENSION_PREFIX ? `${EXTENSION_PREFIX}accounts` : null); + super( + EXTENSION_PREFIX && EXTENSION_PREFIX !== 'polkadot{.js}' + ? `${EXTENSION_PREFIX}accounts` + : null + ); } public override set (key: string, value: KeyringJson, update?: () => void): void { diff --git a/packages/extension-base/src/stores/Metadata.ts b/packages/extension-base/src/stores/Metadata.ts index 6aef33b3..df59ab44 100644 --- a/packages/extension-base/src/stores/Metadata.ts +++ b/packages/extension-base/src/stores/Metadata.ts @@ -8,6 +8,10 @@ import BaseStore from './Base'; export default class MetadataStore extends BaseStore { constructor () { - super(`${EXTENSION_PREFIX}metadata`); + super( + EXTENSION_PREFIX && EXTENSION_PREFIX !== 'polkadot{.js}' + ? `${EXTENSION_PREFIX}metadata` + : 'metadata' + ); } } diff --git a/packages/extension/webpack.shared.cjs b/packages/extension/webpack.shared.cjs index dc323b47..8b8748ec 100644 --- a/packages/extension/webpack.shared.cjs +++ b/packages/extension/webpack.shared.cjs @@ -3,13 +3,16 @@ const path = require('path'); const webpack = require('webpack'); - const CopyPlugin = require('copy-webpack-plugin'); const ManifestPlugin = require('webpack-extension-manifest-plugin'); +const { blake2AsHex } = require('@polkadot/util-crypto'); + const pkgJson = require('./package.json'); const manifest = require('./manifest.json'); +const EXT_NAME = manifest.short_name; + const packages = [ 'extension', 'extension-base', @@ -70,7 +73,9 @@ module.exports = (entry, alias = {}) => ({ }), new webpack.DefinePlugin({ 'process.env': { - NODE_ENV: JSON.stringify('production') + EXTENSION_PREFIX: JSON.stringify(process.env.EXTENSION_PREFIX || EXT_NAME), + NODE_ENV: JSON.stringify('production'), + PORT_PREFIX: JSON.stringify(blake2AsHex(JSON.stringify(manifest), 64)) } }), new CopyPlugin({ patterns: [{ from: 'public' }] }),