Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
adonesky1 committed Feb 8, 2024
1 parent 57d8a4a commit 99e2006
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 24 deletions.
1 change: 1 addition & 0 deletions packages/selected-network-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"@metamask/base-controller": "^4.1.1",
"@metamask/json-rpc-engine": "^7.3.2",
"@metamask/network-controller": "^17.2.0",
"@metamask/permission-controller": "^8.0.0",
"@metamask/swappable-obj-proxy": "^2.2.0",
"@metamask/utils": "^8.3.0"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import type { RestrictedControllerMessenger } from '@metamask/base-controller';
import type {
ActionHandler,
RestrictedControllerMessenger,
} from '@metamask/base-controller';
import { BaseController } from '@metamask/base-controller';
import type {
BlockTrackerProxy,
Expand All @@ -9,6 +12,7 @@ import type {
} from '@metamask/network-controller';
import { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';
import type { Patch } from 'immer';
import type { HasPermissions } from '@metamask/permissions-controller';

Check failure on line 15 in packages/selected-network-controller/src/SelectedNetworkController.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Lint (20.x)

`@metamask/permissions-controller` import should occur before import of `@metamask/swappable-obj-proxy`

Check failure on line 15 in packages/selected-network-controller/src/SelectedNetworkController.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Build (20.x)

Cannot find module '@metamask/permissions-controller' or its corresponding type declarations.

export const controllerName = 'SelectedNetworkController';

Expand Down Expand Up @@ -73,7 +77,11 @@ export type SelectedNetworkControllerActions =
| SelectedNetworkControllerGetNetworkClientIdForDomainAction
| SelectedNetworkControllerSetNetworkClientIdForDomainAction;

export type AllowedActions = NetworkControllerGetNetworkClientByIdAction;
export type AllowedActions =
| NetworkControllerGetNetworkClientByIdAction
| HasPermissions;

// export type AllowedActions = NetworkControllerGetNetworkClientByIdAction;

export type SelectedNetworkControllerEvents =
SelectedNetworkControllerStateChangeEvent;
Expand Down Expand Up @@ -131,12 +139,21 @@ export class SelectedNetworkController extends BaseController<
#registerMessageHandlers(): void {
this.messagingSystem.registerActionHandler(
SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,
this.getNetworkClientIdForDomain.bind(this),
this.getNetworkClientIdForDomain.bind(this) as ActionHandler<
{ type: string; handler: (domain: string) => NetworkClientId },
'SelectedNetworkController:getNetworkClientIdForDomain'
>,
);

this.messagingSystem.registerActionHandler(
SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,
this.setNetworkClientIdForDomain.bind(this),
this.setNetworkClientIdForDomain.bind(this) as ActionHandler<
{
type: string;
handler: (domain: string, networkClientId: NetworkClientId) => void;
},
'SelectedNetworkController:setNetworkClientIdForDomain'
>,
);
}

Expand All @@ -155,13 +172,23 @@ export class SelectedNetworkController extends BaseController<
const networkProxy = this.#proxies.get(domain);
if (networkProxy === undefined) {
this.#proxies.set(domain, {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-next-line
provider: createEventEmitterProxy(networkClient.provider),

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-next-line
blockTracker: createEventEmitterProxy(networkClient.blockTracker, {
eventFilter: 'skipInternal',
}),
});
} else {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-next-line
networkProxy.provider.setTarget(networkClient.provider);

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-next-line
networkProxy.blockTracker.setTarget(networkClient.blockTracker);
}

Expand All @@ -177,6 +204,17 @@ export class SelectedNetworkController extends BaseController<
domain: Domain,
networkClientId: NetworkClientId,
) {
// check if permissions exist for this domain if there are none, return early
const hasPermissions = this.messagingSystem.call(
'PermissionController:hasPermissions',
origin,
);
if (!hasPermissions) {
return;
}

// if perDomainNetwork is false, set the networkClientId for all domains to the same value
// this ensures the proxies are updated for all domains
if (!this.state.perDomainNetwork) {
Object.entries(this.state.domains).forEach(
([entryDomain, networkClientIdForDomain]) => {
Expand All @@ -189,6 +227,7 @@ export class SelectedNetworkController extends BaseController<
},
);
}

this.#setNetworkClientIdForDomain(domain, networkClientId);
}

Expand All @@ -213,7 +252,12 @@ export class SelectedNetworkController extends BaseController<
this.getNetworkClientIdForDomain(domain),
);
networkProxy = {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-next-line
provider: createEventEmitterProxy(networkClient.provider),

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-next-line
blockTracker: createEventEmitterProxy(networkClient.blockTracker, {
eventFilter: 'skipInternal',
}),
Expand Down
41 changes: 21 additions & 20 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2392,26 +2392,7 @@ __metadata:
languageName: node
linkType: hard

"@metamask/permission-controller@npm:^7.0.0, @metamask/permission-controller@npm:^7.1.0":
version: 7.1.0
resolution: "@metamask/permission-controller@npm:7.1.0"
dependencies:
"@metamask/base-controller": ^4.0.1
"@metamask/controller-utils": ^8.0.1
"@metamask/json-rpc-engine": ^7.3.1
"@metamask/rpc-errors": ^6.1.0
"@metamask/utils": ^8.2.0
"@types/deep-freeze-strict": ^1.1.0
deep-freeze-strict: ^1.1.1
immer: ^9.0.6
nanoid: ^3.1.31
peerDependencies:
"@metamask/approval-controller": ^5.1.1
checksum: 889213cca32cbf5b32b7e71c70ded0aeea32eae169ec67fb0d0bc8dcaa183b222f9d5417f657e331d7fb21ecb71f250cf1c932110d4b1e2167972b30bd012098
languageName: node
linkType: hard

"@metamask/permission-controller@workspace:packages/permission-controller":
"@metamask/permission-controller@^8.0.0, @metamask/permission-controller@workspace:packages/permission-controller":
version: 0.0.0-use.local
resolution: "@metamask/permission-controller@workspace:packages/permission-controller"
dependencies:
Expand All @@ -2438,6 +2419,25 @@ __metadata:
languageName: unknown
linkType: soft

"@metamask/permission-controller@npm:^7.0.0, @metamask/permission-controller@npm:^7.1.0":
version: 7.1.0
resolution: "@metamask/permission-controller@npm:7.1.0"
dependencies:
"@metamask/base-controller": ^4.0.1
"@metamask/controller-utils": ^8.0.1
"@metamask/json-rpc-engine": ^7.3.1
"@metamask/rpc-errors": ^6.1.0
"@metamask/utils": ^8.2.0
"@types/deep-freeze-strict": ^1.1.0
deep-freeze-strict: ^1.1.1
immer: ^9.0.6
nanoid: ^3.1.31
peerDependencies:
"@metamask/approval-controller": ^5.1.1
checksum: 889213cca32cbf5b32b7e71c70ded0aeea32eae169ec67fb0d0bc8dcaa183b222f9d5417f657e331d7fb21ecb71f250cf1c932110d4b1e2167972b30bd012098
languageName: node
linkType: hard

"@metamask/permission-log-controller@workspace:packages/permission-log-controller":
version: 0.0.0-use.local
resolution: "@metamask/permission-log-controller@workspace:packages/permission-log-controller"
Expand Down Expand Up @@ -2648,6 +2648,7 @@ __metadata:
"@metamask/base-controller": ^4.1.1
"@metamask/json-rpc-engine": ^7.3.2
"@metamask/network-controller": ^17.2.0
"@metamask/permission-controller": ^8.0.0
"@metamask/swappable-obj-proxy": ^2.2.0
"@metamask/utils": ^8.3.0
"@types/jest": ^27.4.1
Expand Down

0 comments on commit 99e2006

Please sign in to comment.