@@ -2,13 +2,18 @@ import type { PermissionRequest } from '@metamask/7715-permissions-shared/types'
22import { extractPermissionName } from '@metamask/7715-permissions-shared/utils' ;
33
44import type { AccountController } from '../accountController' ;
5- import { createNativeTokenStreamHandler } from '../permissions/nativeTokenStream/createHandler ' ;
6- import type { NativeTokenStreamPermissionRequest } from '../permissions/nativeTokenStream/types ' ;
5+ import { nativeTokenPeriodicPermissionDefinition } from '../permissions/nativeTokenPeriodic ' ;
6+ import { nativeTokenStreamPermissionDefinition } from '../permissions/nativeTokenStream' ;
77import type { TokenPricesService } from '../services/tokenPricesService' ;
88import type { UserEventDispatcher } from '../userEventDispatcher' ;
9- import type { ConfirmationDialogFactory } from './confirmationFactory ' ;
9+ import { PermissionHandler } from './permissionHandler ' ;
1010import type { PermissionRequestLifecycleOrchestrator } from './permissionRequestLifecycleOrchestrator' ;
11- import type { PermissionHandlerType } from './types' ;
11+ import type {
12+ BaseContext ,
13+ DeepRequired ,
14+ PermissionDefinition ,
15+ PermissionHandlerType ,
16+ } from './types' ;
1217
1318/**
1419 * Factory for creating permission-specific orchestrators.
@@ -19,28 +24,23 @@ export class PermissionHandlerFactory {
1924
2025 readonly #tokenPricesService: TokenPricesService ;
2126
22- readonly #confirmationDialogFactory: ConfirmationDialogFactory ;
23-
2427 readonly #userEventDispatcher: UserEventDispatcher ;
2528
2629 readonly #orchestrator: PermissionRequestLifecycleOrchestrator ;
2730
2831 constructor ( {
2932 accountController,
3033 tokenPricesService,
31- confirmationDialogFactory,
3234 userEventDispatcher,
3335 orchestrator,
3436 } : {
3537 accountController : AccountController ;
3638 tokenPricesService : TokenPricesService ;
37- confirmationDialogFactory : ConfirmationDialogFactory ;
3839 userEventDispatcher : UserEventDispatcher ;
3940 orchestrator : PermissionRequestLifecycleOrchestrator ;
4041 } ) {
4142 this . #accountController = accountController ;
4243 this . #tokenPricesService = tokenPricesService ;
43- this . #confirmationDialogFactory = confirmationDialogFactory ;
4444 this . #userEventDispatcher = userEventDispatcher ;
4545 this . #orchestrator = orchestrator ;
4646 }
@@ -56,23 +56,47 @@ export class PermissionHandlerFactory {
5656 ) : PermissionHandlerType {
5757 const type = extractPermissionName ( permissionRequest . permission . type ) ;
5858
59- const baseDependencies = {
60- permissionRequest :
61- permissionRequest as NativeTokenStreamPermissionRequest ,
62- accountController : this . #accountController,
63- confirmationDialogFactory : this . #confirmationDialogFactory,
64- userEventDispatcher : this . #userEventDispatcher,
65- orchestrator : this . #orchestrator,
59+ const createPermissionHandler = <
60+ TRequest extends PermissionRequest ,
61+ TContext extends BaseContext ,
62+ TMetadata extends object ,
63+ TPermission extends TRequest [ 'permission' ] ,
64+ TPopulatedPermission extends DeepRequired < TPermission > ,
65+ > (
66+ permissionDefinition : PermissionDefinition <
67+ TRequest ,
68+ TContext ,
69+ TMetadata ,
70+ TPermission ,
71+ TPopulatedPermission
72+ > ,
73+ ) : PermissionHandlerType => {
74+ return new PermissionHandler ( {
75+ ...permissionDefinition ,
76+ accountController : this . #accountController,
77+ userEventDispatcher : this . #userEventDispatcher,
78+ orchestrator : this . #orchestrator,
79+ permissionRequest,
80+ tokenPricesService : this . #tokenPricesService,
81+ } ) ;
6682 } ;
83+ let handler : PermissionHandlerType ;
6784
6885 switch ( type ) {
6986 case 'native-token-stream' :
70- return createNativeTokenStreamHandler ( {
71- ...baseDependencies ,
72- tokenPricesService : this . #tokenPricesService,
73- } ) ;
87+ handler = createPermissionHandler (
88+ nativeTokenStreamPermissionDefinition ,
89+ ) ;
90+ break ;
91+ case 'native-token-periodic' :
92+ handler = createPermissionHandler (
93+ nativeTokenPeriodicPermissionDefinition ,
94+ ) ;
95+ break ;
7496 default :
7597 throw new Error ( `Unsupported permission type: ${ type } ` ) ;
7698 }
99+
100+ return handler ;
77101 }
78102}
0 commit comments