From 6f1ea6e8e7df14be27d3414e767c53cb4c72bd5f Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 11 Jan 2022 12:50:12 +0100 Subject: [PATCH] permission handler --- apps/remix-ide/src/app.js | 6 +- .../app/plugins/permission-handler-plugin.tsx | 126 +++++++++++ .../src/app/ui/persmission-handler.js | 202 ------------------ apps/remix-ide/src/remixAppManager.js | 4 +- .../app/src/lib/remix-app/remix-app.tsx | 2 - libs/remix-ui/permission-handler/src/index.ts | 3 +- .../permission-handler/src/interface/index.ts | 8 +- .../src/lib/permission-dialog.css | 4 + .../src/lib/permission-dialog.tsx | 34 +-- .../src/lib/permission-handler.tsx | 25 --- package-lock.json | 70 +++--- package.json | 14 +- 12 files changed, 204 insertions(+), 294 deletions(-) create mode 100644 apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx delete mode 100644 apps/remix-ide/src/app/ui/persmission-handler.js delete mode 100644 libs/remix-ui/permission-handler/src/lib/permission-handler.tsx diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index 7038c120cd..5a7c9b8dc0 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -10,6 +10,7 @@ import { HiddenPanel } from './app/components/hidden-panel' import { VerticalIcons } from './app/components/vertical-icons' import { LandingPage } from './app/ui/landing-page/landing-page' import { MainPanel } from './app/components/main-panel' +import { PermissionHandlerPlugin } from './app/plugins/permission-handler-plugin' import { WalkthroughService } from './walkthroughService' @@ -191,8 +192,11 @@ class AppComponent { const configPlugin = new ConfigPlugin() self.layout = new Layout() + + const permissionHandler = new PermissionHandlerPlugin() self.engine.register([ + permissionHandler, self.layout, self.modal, self.gistHandler, @@ -317,7 +321,7 @@ class AppComponent { await self.appManager.activatePlugin(['layout']) await self.appManager.activatePlugin(['modal']) await self.appManager.activatePlugin(['editor']) - await self.appManager.activatePlugin(['theme', 'fileManager', 'compilerMetadata', 'compilerArtefacts', 'network', 'web3Provider', 'offsetToLineColumnConverter']) + await self.appManager.activatePlugin(['permissionhandler', 'theme', 'fileManager', 'compilerMetadata', 'compilerArtefacts', 'network', 'web3Provider', 'offsetToLineColumnConverter']) await self.appManager.activatePlugin(['mainPanel', 'menuicons', 'tabs']) await self.appManager.activatePlugin(['sidePanel']) // activating host plugin separately await self.appManager.activatePlugin(['home']) diff --git a/apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx b/apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx new file mode 100644 index 0000000000..530a8dfba2 --- /dev/null +++ b/apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx @@ -0,0 +1,126 @@ +import React from 'react' // eslint-disable-line +import { Plugin } from '@remixproject/engine' +import { AppModal } from 'libs/remix-ui/app/src' +import { PermissionHandlerDialog, PermissionHandlerValue } from 'libs/remix-ui/permission-handler/src' +import { Profile } from '@remixproject/plugin-utils' + +const profile = { + name: 'permissionhandler', + displayName: 'permissionhandler', + description: 'permissionhandler', + methods: ['askPermission'] +} + +export class PermissionHandlerPlugin extends Plugin { + permissions: any + currentVersion: number + constructor() { + super(profile) + this.permissions = this._getFromLocal() + this.currentVersion = 1 + // here we remove the old permissions saved before adding 'permissionVersion' + // since with v1 the structure has been changed because of new engine ^0.2.0-alpha.6 changes + if (!localStorage.getItem('permissionVersion')) { + localStorage.setItem('plugins/permissions', '') + localStorage.setItem('permissionVersion', this.currentVersion.toString()) + } + } + + _getFromLocal() { + const permission = localStorage.getItem('plugins/permissions') + return permission ? JSON.parse(permission) : {} + } + + persistPermissions() { + const permissions = JSON.stringify(this.permissions) + localStorage.setItem('plugins/permissions', permissions) + } + + switchMode (from: Profile, to: Profile, method: string, set: boolean) { + set + ? this.permissions[to.name][method][from.name] = {} + : delete this.permissions[to.name][method][from.name] + } + + clear() { + localStorage.removeItem('plugins/permissions') + } + + notAllowWarning(from: Profile, to: Profile, method: string) { + return `${from.displayName || from.name} is not allowed to call ${method} method of ${to.displayName || to.name}.` + } + + async getTheme() { + return (await this.call('theme', 'currentTheme')).quality + } + + /** + * Check if a plugin has the permission to call another plugin and askPermission if needed + * @param {PluginProfile} from the profile of the plugin that make the call + * @param {ModuleProfile} to The profile of the module that receive the call + * @param {string} method The name of the function to be called + * @param {string} message from the caller plugin to add more details if needed + * @returns {Promise} + */ + async askPermission(from: Profile, to: Profile, method: string, message: string) { + try { + this.permissions = this._getFromLocal() + if (!this.permissions[to.name]) this.permissions[to.name] = {} + if (!this.permissions[to.name][method]) this.permissions[to.name][method] = {} + if (!this.permissions[to.name][method][from.name]) return this.openPermission(from, to, method, message) + + const { allow, hash } = this.permissions[to.name][method][from.name] + if (!allow) { + const warning = this.notAllowWarning(from, to, method) + this.call('modal', 'toast', warning) + return false + } + return hash === from.hash + ? true // Allow + : await this.openPermission(from, to, method, message) + } catch (err) { + throw new Error(err) + } + } + + async openPermission(from: Profile, to: Profile, method: string, message: string) { + const remember = this.permissions[to.name][method][from.name] + const value: PermissionHandlerValue = { + from, + to, + method, + message, + remember + } + const modal: AppModal = { + id: 'PermissionHandler', + title: `Permission needed for ${to.displayName || to.name}`, + message: , + okLabel: 'sure', + cancelLabel: 'no' + } + + const result = await this.call('modal', 'modal', modal) + return new Promise((resolve, reject) => { + if (result) { + if (this.permissions[to.name][method][from.name]) { + this.permissions[to.name][method][from.name] = { + allow: true, + hash: from.hash + } + this.persistPermissions() + } + resolve(true) + } else { + if (this.permissions[to.name][method][from.name]) { + this.permissions[to.name][method][from.name] = { + allow: false, + hash: from.hash + } + this.persistPermissions() + } + reject(this.notAllowWarning(from, to, method)) + } + }) + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/ui/persmission-handler.js b/apps/remix-ide/src/app/ui/persmission-handler.js deleted file mode 100644 index f3f10b5b63..0000000000 --- a/apps/remix-ide/src/app/ui/persmission-handler.js +++ /dev/null @@ -1,202 +0,0 @@ -import Registry from '../state/registry' - -/* global localStorage */ -const yo = require('yo-yo') -const csjs = require('csjs-inject') -const addTooltip = require('./tooltip') -const modalDialog = require('./modaldialog') - -const css = csjs` -.permission h4 { - text-transform: uppercase; - text-align: center; -} -.permission h6 { - text-transform: uppercase; -} -.remember { - display: flex; - justify-content: space-between; - align-items: center; -} -.images { - display: flex; - justify-content: center; - align-items: center; - padding: 10px; -} -.images img { - width: 40px; - height: 40px; -} -.images i { - margin: 0 20px; -} -` - -function notAllowWarning (from, to, method) { - return `${from.displayName || from.name} is not allowed to call ${method} method of ${to.displayName || to.name}.` -} - -export class PermissionHandler { - constructor () { - this.permissions = this._getFromLocal() - this.currentVersion = 1 - // here we remove the old permissions saved before adding 'permissionVersion' - // since with v1 the structure has been changed because of new engine ^0.2.0-alpha.6 changes - if (!localStorage.getItem('permissionVersion')) { - localStorage.setItem('plugins/permissions', '') - localStorage.setItem('permissionVersion', this.currentVersion) - } - } - - _getFromLocal () { - const permission = localStorage.getItem('plugins/permissions') - return permission ? JSON.parse(permission) : {} - } - - persistPermissions () { - const permissions = JSON.stringify(this.permissions) - localStorage.setItem('plugins/permissions', permissions) - } - - clear () { - localStorage.removeItem('plugins/permissions') - addTooltip('All Permissions have been reset') - } - - /** - * Show a message to ask the user for a permission - * @param {PluginProfile} from The name and hash of the plugin that make the call - * @param {ModuleProfile} to The name of the plugin that receive the call - * @param {string} method The name of the function to be called - * @param {string} message from the caller plugin to add more details if needed - * @returns {Promise<{ allow: boolean; remember: boolean }} Answer from the user to the permission - */ - async openPermission (from, to, method, message) { - return new Promise((resolve, reject) => { - modalDialog( - `Permission needed for ${to.displayName || to.name}`, - this.form(from, to, method, message), - { - label: 'Accept', - fn: () => { - if (this.permissions[to.name][method][from.name]) { - this.permissions[to.name][method][from.name] = { - allow: true, - hash: from.hash - } - this.persistPermissions() - } - resolve(true) - } - }, - { - label: 'Decline', - fn: () => { - if (this.permissions[to.name][method][from.name]) { - this.permissions[to.name][method][from.name] = { - allow: false, - hash: from.hash - } - this.persistPermissions() - } - reject(notAllowWarning(from, to, method)) - } - } - ) - }) - } - - /** - * Check if a plugin has the permission to call another plugin and askPermission if needed - * @param {PluginProfile} from the profile of the plugin that make the call - * @param {ModuleProfile} to The profile of the module that receive the call - * @param {string} method The name of the function to be called - * @param {string} message from the caller plugin to add more details if needed - * @returns {Promise} - */ - async askPermission (from, to, method, message) { - try { - this.permissions = this._getFromLocal() - if (!this.permissions[to.name]) this.permissions[to.name] = {} - if (!this.permissions[to.name][method]) this.permissions[to.name][method] = {} - if (!this.permissions[to.name][method][from.name]) return this.openPermission(from, to, method, message) - - const { allow, hash } = this.permissions[to.name][method][from.name] - if (!allow) { - const warning = notAllowWarning(from, to, method) - addTooltip(warning) - return false - } - return hash === from.hash - ? true // Allow - : this.openPermission(from, to, method, message) // New version of a plugin - } catch (err) { - throw new Error(err) - } - } - - /** - * The permission form - * @param {PluginProfile} from The name and hash of the plugin that make the call - * @param {ModuleProfile} to The name of the plugin that receive the call - * @param {string} method The name of te methode to be called - * @param {string} message from the caller plugin to add more details if needed - */ - form (from, to, method, message) { - const fromName = from.displayName || from.name - const toName = to.displayName || to.name - const remember = this.permissions[to.name][method][from.name] - - const switchMode = (e) => { - e.target.checked - ? this.permissions[to.name][method][from.name] = {} - : delete this.permissions[to.name][method][from.name] - } - const rememberSwitch = remember - ? yo`` - : yo`` - const text = `"${fromName}" ${(remember ? 'has changed and' : '')} would like to access to "${method}" of "${toName}"` - const imgFrom = yo`` - const imgTo = yo`` - const pluginsImages = yo` -
- ${imgFrom} - - ${imgTo} -
- ` - - Registry.getInstance().get('themeModule').api.fixInvert(imgFrom) - Registry.getInstance().get('themeModule').api.fixInvert(imgTo) - - const pluginMessage = message ? yo` -
-
Description
-

${message}

-
- ` : '' - return yo` -
- ${pluginsImages} -
-

${text} :

-
${fromName}
-

${from.description || yo`No description Provided`}

-
${toName} :

-

${to.description || yo`No description Provided`}

- ${pluginMessage} -
- -
-
- ${rememberSwitch} - -
- -
-
- ` - } -} diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index 5f5fa2f8eb..dcfd1fe385 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -2,7 +2,6 @@ import { PluginManager } from '@remixproject/engine' import { EventEmitter } from 'events' import QueryParams from './lib/query-params' -import { PermissionHandler } from './app/ui/persmission-handler' import { IframePlugin } from '@remixproject/engine-web' const _paq = window._paq = window._paq || [] @@ -40,7 +39,6 @@ export class RemixAppManager extends PluginManager { this.event = new EventEmitter() this.pluginsDirectory = 'https://raw.githubusercontent.com/ethereum/remix-plugins-directory/master/build/metadata.json' this.pluginLoader = new PluginLoader() - this.permissionHandler = new PermissionHandler() } async canActivatePlugin (from, to) { @@ -72,7 +70,7 @@ export class RemixAppManager extends PluginManager { return true } // ask the user for permission - return await this.permissionHandler.askPermission(this.profiles[from], this.profiles[to], method, message) + return await this.call('permissionhandler', 'askPermission', this.profiles[from], this.profiles[to], method, message) } onPluginActivated (plugin) { diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index 605dcae501..27d5a7b832 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -8,7 +8,6 @@ import DragBar from './components/dragbar/dragbar' import { AppProvider } from './context/provider' import AppDialogs from './components/modals/dialogs' import DialogViewPlugin from './components/modals/dialogViewPlugin' -import { Permissionhandler } from '@remix-ui/permission-handler' interface IRemixAppUi { app: any @@ -105,7 +104,6 @@ const RemixApp = (props: IRemixAppUi) => { {components.hiddenPanel} - ) } diff --git a/libs/remix-ui/permission-handler/src/index.ts b/libs/remix-ui/permission-handler/src/index.ts index 6e662ed485..dfa55cfc9d 100644 --- a/libs/remix-ui/permission-handler/src/index.ts +++ b/libs/remix-ui/permission-handler/src/index.ts @@ -1 +1,2 @@ -export { default as Permissionhandler } from './lib/permission-handler' +export { default as PermissionHandlerDialog } from './lib/permission-dialog' +export { PermissionHandlerValue, PermissionHandlerProps } from './interface/index' diff --git a/libs/remix-ui/permission-handler/src/interface/index.ts b/libs/remix-ui/permission-handler/src/interface/index.ts index 7fbbbaaa34..a24c8570c6 100644 --- a/libs/remix-ui/permission-handler/src/interface/index.ts +++ b/libs/remix-ui/permission-handler/src/interface/index.ts @@ -1,8 +1,8 @@ -import { IconProfile } from 'libs/remix-ui/vertical-icons-panel/src/lib/components/Icon' +import { Profile } from '@remixproject/plugin-utils' export interface PermissionHandlerValue { - from: IconProfile, - to: IconProfile, + from: Profile, + to: Profile, remember: boolean, method: string, message: string @@ -10,4 +10,6 @@ export interface PermissionHandlerValue { export interface PermissionHandlerProps { value: PermissionHandlerValue + theme: string + plugin: any } diff --git a/libs/remix-ui/permission-handler/src/lib/permission-dialog.css b/libs/remix-ui/permission-handler/src/lib/permission-dialog.css index b2584800b1..68e0d845b5 100644 --- a/libs/remix-ui/permission-handler/src/lib/permission-dialog.css +++ b/libs/remix-ui/permission-handler/src/lib/permission-dialog.css @@ -22,4 +22,8 @@ } .images i { margin: 0 20px; + } + + .invert { + filter: invert(1); } \ No newline at end of file diff --git a/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx b/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx index 4550064754..5d7928b2f4 100644 --- a/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx +++ b/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx @@ -1,35 +1,38 @@ -import React, { useContext, useEffect, useRef, useState } from 'react' // eslint-disable-line +import React, { ChangeEventHandler, useContext, useEffect, useRef, useState } from 'react' // eslint-disable-line import { PermissionHandlerProps } from '../interface' import './permission-dialog.css' const PermissionHandlerDialog = (props: PermissionHandlerProps) => { const { from, to, remember, method, message } = props.value + const [feedback, setFeedback] = useState('') + const theme = props.theme - const switchMode = () => { - + const switchMode = (e: any) => { + props.plugin.switchMode(from, to, method, e.target.checked) } const rememberSwitch = () => { return } const reset = () => { - + props.plugin.clear() + setFeedback('All permisssions have been reset.') } - const imgFrom = () => { return } - const imgTo = () => { return } + const imgFrom = () => { return } + const imgTo = () => { return } const pluginsImages = () => { return (
- {imgFrom} + {imgFrom()} - {imgTo} + {imgTo()}
) } const text = () => { - return `"${from.displayName}" ${(remember ? 'has changed and' : '')} would like to access to "${method}" of "${to.displayName}"` + return <>"{from.displayName}" {(remember ? 'has changed and' : '')} would like to access to "{method}" of "{to.displayName}"` } const pluginMessage = () => { @@ -41,22 +44,23 @@ const PermissionHandlerDialog = (props: PermissionHandlerProps) => { } return (
- {pluginsImages} + {pluginsImages()}
-

{text} :

+

{text()} :

{from.displayName}
-

{from.description} || No description Provided

+

{from.description || No description Provided}

{to.displayName} :
-

{to.description} || No description Provided

- {pluginMessage} +

{to.description || No description Provided}

+ {pluginMessage()}
- {rememberSwitch} + {rememberSwitch()}
+
{feedback}
) } diff --git a/libs/remix-ui/permission-handler/src/lib/permission-handler.tsx b/libs/remix-ui/permission-handler/src/lib/permission-handler.tsx deleted file mode 100644 index f6b06c23f4..0000000000 --- a/libs/remix-ui/permission-handler/src/lib/permission-handler.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { useDialogDispatchers } from 'libs/remix-ui/app/src/lib/remix-app/context/provider' -import React, { useContext, useEffect, useRef, useState } from 'react' // eslint-disable-line -import { PermissionHandlerValue } from '../interface' -import PermissionHandlerDialog from './permission-dialog' - -const PermissionHandler = () => { - const { alert, toast, modal } = useDialogDispatchers() - const [value, setValue] = useState() - useEffect(() => { - if (value) { - modal({ - id: 'PermissionHandler', - title: 'permissions', - message: , - okFn: () => {}, - cancelFn: () => {}, - okLabel: 'sure', - cancelLabel: 'no' - }) - } - }, [value]) - return (<>) -} - -export default PermissionHandler diff --git a/package-lock.json b/package-lock.json index bab7da51d1..e28009392f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9782,46 +9782,46 @@ "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==" }, "@remixproject/engine": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@remixproject/engine/-/engine-0.3.24.tgz", - "integrity": "sha512-XVPaRIAwxTxEmc+u+bq9nIqUcP1NDdQFTm/8xmw8HcZicgagUW/y0RuLEMBj5GTGXF+EsljY27t6bPy7fmVHWQ==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@remixproject/engine/-/engine-0.3.25.tgz", + "integrity": "sha512-6XaXZ6BHKEoYfnAQSN7Hy2UZt8M/rKA2Vfq6Wy2tYocfzHVRXb3PeZncdumeO4vdnTldbrrRhgn4i4/ORcYAnA==", "requires": { - "@remixproject/plugin-api": "0.3.24", - "@remixproject/plugin-utils": "0.3.24" + "@remixproject/plugin-api": "0.3.25", + "@remixproject/plugin-utils": "0.3.25" } }, "@remixproject/engine-web": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@remixproject/engine-web/-/engine-web-0.3.24.tgz", - "integrity": "sha512-6P2NLoL9KSa/84FumEM3QxvOW4g/hIEsq8NcbBA+/PHz9VnIRoxRg2K/jGJUHHqKw+dfoSdk5lQ+LkFQHcrp+w==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@remixproject/engine-web/-/engine-web-0.3.25.tgz", + "integrity": "sha512-RzmDDE7Eh+gW1A/pQkGovQA+A6dRPKGfFmkShXcCkKZghNKc+DSCCKkgVxfYu2ckgr5Q5N11tBiAA+5OFduLRg==", "requires": { - "@remixproject/engine": "0.3.24", - "@remixproject/plugin-api": "0.3.24", - "@remixproject/plugin-utils": "0.3.24" + "@remixproject/engine": "0.3.25", + "@remixproject/plugin-api": "0.3.25", + "@remixproject/plugin-utils": "0.3.25" } }, "@remixproject/plugin": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@remixproject/plugin/-/plugin-0.3.24.tgz", - "integrity": "sha512-nGtt3IZA5X2kcXauu5h5P8EEoMtHbVGm5wWnv0c7aYYWbffhQdK8dqtNNEAtQavWrsp5TL61zekqpkFzgxVv9w==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@remixproject/plugin/-/plugin-0.3.25.tgz", + "integrity": "sha512-EVFtZ42+BmfZ+6UWcTo7Ig+7RQ1LiaBe4hnM8lQVyVhKqsYnev7/NAQycDmrtTSZR7kaLhy/nH3vTfxryleqQw==", "requires": { - "@remixproject/plugin-api": "0.3.24", - "@remixproject/plugin-utils": "0.3.24", + "@remixproject/plugin-api": "0.3.25", + "@remixproject/plugin-utils": "0.3.25", "events": "3.2.0" } }, "@remixproject/plugin-api": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@remixproject/plugin-api/-/plugin-api-0.3.24.tgz", - "integrity": "sha512-mBxou9OSsQt7ggMmKTJR433jJaSAckBmVj82Ek7i/+EGxEAxSqKhPfRlh5sFiTgvUmzHQzuvqa8ndyw0Bbcq4w==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@remixproject/plugin-api/-/plugin-api-0.3.25.tgz", + "integrity": "sha512-GPjPfGRv955En5AILLYf62zqZdALuDCJiq3DKR1XdkVukbI9Soc2FcGs8O2phNhqieIjgXMoUcl1Or6brfuLAw==", "requires": { - "@remixproject/plugin-utils": "0.3.24" + "@remixproject/plugin-utils": "0.3.25" } }, "@remixproject/plugin-utils": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@remixproject/plugin-utils/-/plugin-utils-0.3.24.tgz", - "integrity": "sha512-nMXGCgs6filbgUc/Zvh1gReGG5HN2Bq+AI4Q7Ao08Thhg5ALj1UsbzQf86Ya/L7Q+EF6Em1CbgPT0VhcGlP66A==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@remixproject/plugin-utils/-/plugin-utils-0.3.25.tgz", + "integrity": "sha512-FzOKItdfwbQBYlFcK+erLu/ol1htxjAYeuvpxZ1CzbuMXtupA/GW58vCYzIbNZqd0LlYGqIUgEY+fsm3QuU41w==", "requires": { "tslib": "2.0.1" }, @@ -9834,13 +9834,13 @@ } }, "@remixproject/plugin-webview": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@remixproject/plugin-webview/-/plugin-webview-0.3.24.tgz", - "integrity": "sha512-Wcyi+gGq1AYprE58vhQS181swAKZpoLAfKlKuHJ+ezbysUDuX8jgsEiQ6u1c17nQfy8Hp9sntK6VcCcDddn8gg==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@remixproject/plugin-webview/-/plugin-webview-0.3.25.tgz", + "integrity": "sha512-pjF1qAjgCFHciIDRKTsu2+9rdopjw6+H0GH5moUCGs9WsxmQT1NyfTxvJB+Qkf9GaWdak+ECBlrcn7DAX29BPA==", "requires": { - "@remixproject/plugin": "0.3.24", - "@remixproject/plugin-api": "0.3.24", - "@remixproject/plugin-utils": "0.3.24", + "@remixproject/plugin": "0.3.25", + "@remixproject/plugin-api": "0.3.25", + "@remixproject/plugin-utils": "0.3.25", "axios": "^0.21.1" }, "dependencies": { @@ -9855,13 +9855,13 @@ } }, "@remixproject/plugin-ws": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@remixproject/plugin-ws/-/plugin-ws-0.3.24.tgz", - "integrity": "sha512-COIROJX61vS2TRH82MflIUlScxLauNtLkMRY7vzncVOIvufApvNc84Ua8Vr6vhSb2tZeWX+u4UTiFnpFDRL7xw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@remixproject/plugin-ws/-/plugin-ws-0.3.25.tgz", + "integrity": "sha512-ligtZmDUUpEhtMjt6sD33ibFQmcP6qdybLMA6DL94wW5x6d+aM0K8+dtWYFnK3HPfgbpvqHFf/7A7ulFJphcPg==", "requires": { - "@remixproject/plugin": "0.3.24", - "@remixproject/plugin-api": "0.3.24", - "@remixproject/plugin-utils": "0.3.24" + "@remixproject/plugin": "0.3.25", + "@remixproject/plugin-api": "0.3.25", + "@remixproject/plugin-utils": "0.3.25" } }, "@restart/context": { diff --git a/package.json b/package.json index 0e55dd276d..a7c37245dc 100644 --- a/package.json +++ b/package.json @@ -147,13 +147,13 @@ "@ethereumjs/tx": "^3.3.2", "@ethereumjs/vm": "^5.5.3", "@monaco-editor/react": "^4.3.1", - "@remixproject/engine": "^0.3.24", - "@remixproject/engine-web": "^0.3.24", - "@remixproject/plugin": "^0.3.24", - "@remixproject/plugin-api": "^0.3.24", - "@remixproject/plugin-utils": "^0.3.24", - "@remixproject/plugin-webview": "^0.3.24", - "@remixproject/plugin-ws": "^0.3.24", + "@remixproject/engine": "^0.3.25", + "@remixproject/engine-web": "^0.3.25", + "@remixproject/plugin": "^0.3.25", + "@remixproject/plugin-api": "^0.3.25", + "@remixproject/plugin-utils": "^0.3.25", + "@remixproject/plugin-webview": "^0.3.25", + "@remixproject/plugin-ws": "^0.3.25", "ansi-gray": "^0.1.1", "async": "^2.6.2", "axios": ">=0.21.1",