Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Feature/seedless onboarding #1

Draft
wants to merge 13 commits into
base: main
Choose a base branch
from
Draft
7 changes: 7 additions & 0 deletions .metamaskrc.dist
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@
; This variable is required
INFURA_PROJECT_ID=00000000000

; This variable is required for seedless onboarding
GOOGLE_CLIENT_ID=
GOOGLE_AUTH_URI=https://accounts.google.com/o/oauth2/v2/auth
APPLE_CLIENT_ID=
APPLE_AUTH_URI=https://appleid.apple.com/auth/authorize
BYOA_SERVER_URL=http://localhost:3060

; This variable is not required but it's necessary for the storybook
; to render stories that use onchain data.
INFURA_STORYBOOK_PROJECT_ID=
Expand Down
5 changes: 4 additions & 1 deletion app/manifest/v2/_base.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,10 @@
"webRequest",
"webRequestBlocking",
"*://*.eth/",
"notifications"
"notifications",
"identity",
"*://appleid.apple.com/*",
"*://*.chromiumapp.org/*"
],
"short_name": "__MSG_appName__"
}
7 changes: 5 additions & 2 deletions app/manifest/v3/_base.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@
"http://*/*",
"https://*/*",
"ws://*/*",
"wss://*/*"
"wss://*/*",
"*://appleid.apple.com/*",
"*://*.chromiumapp.org/*"
],
"icons": {
"16": "images/icon-16.png",
Expand All @@ -75,7 +77,8 @@
"storage",
"unlimitedStorage",
"webRequest",
"offscreen"
"offscreen",
"identity"
],
"sandbox": {
"pages": ["snaps/index.html"]
Expand Down
1 change: 1 addition & 0 deletions app/scripts/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -823,6 +823,7 @@ export function setupController(
//
// MetaMask Controller
//
console.log('[setupController] initState', initState);
controller = new MetamaskController({
infuraProjectId: process.env.INFURA_PROJECT_ID,
// User confirmation callbacks:
Expand Down
7 changes: 5 additions & 2 deletions app/scripts/controller-init/controller-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { Controller as UserStorageController } from '@metamask/profile-sync-cont
import OnboardingController from '../controllers/onboarding';
import { PreferencesController } from '../controllers/preferences-controller';
import SwapsController from '../controllers/swaps';
import { SeedlessOnboardingController } from '@metamask/seedless-onboarding-controller';

/**
* Union of all controllers supporting or required by modular initialization.
Expand Down Expand Up @@ -69,7 +70,8 @@ export type Controller =
name: 'TransactionUpdateController';
state: Record<string, unknown>;
})
| UserStorageController;
| UserStorageController
| SeedlessOnboardingController;

/**
* Flat state object for all controllers supporting or required by modular initialization.
Expand Down Expand Up @@ -100,4 +102,5 @@ export type ControllerFlatState = AccountsController['state'] &
SnapInterfaceController['state'] &
TransactionController['state'] &
SwapsController['state'] &
UserStorageController['state'];
UserStorageController['state'] &
SeedlessOnboardingController['state'];
5 changes: 5 additions & 0 deletions app/scripts/controller-init/messengers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
getAuthenticationControllerMessenger,
getUserStorageControllerMessenger,
} from './identity';
import { getSeedlessOnboardingControllerMessenger } from './onboarding/seedless-onboarding-controller-messenger';

export const CONTROLLER_MESSENGERS = {
AuthenticationController: {
Expand Down Expand Up @@ -94,4 +95,8 @@ export const CONTROLLER_MESSENGERS = {
getMessenger: getUserStorageControllerMessenger,
getInitMessenger: noop,
},
SeedlessOnboardingController: {
getMessenger: getSeedlessOnboardingControllerMessenger,
getInitMessenger: noop,
},
} as const;
2 changes: 2 additions & 0 deletions app/scripts/controller-init/messengers/onboarding/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { getSeedlessOnboardingControllerMessenger } from './seedless-onboarding-controller-messenger';
export type { SeedlessOnboardingControllerMessenger } from './seedless-onboarding-controller-messenger';
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Messenger } from '@metamask/base-controller';
import { KeyringControllerStateChangeEvent } from '@metamask/keyring-controller';
import { SeedlessOnboardingControllerGetStateActions } from '@metamask/seedless-onboarding-controller';

type MessengerActions = SeedlessOnboardingControllerGetStateActions;

type MessengerEvents = KeyringControllerStateChangeEvent;

export type SeedlessOnboardingControllerMessenger = ReturnType<
typeof getSeedlessOnboardingControllerMessenger
>;

/**
* Get a restricted messenger for the Seedless Onboarding controller. This is scoped to the
* actions and events that the Seedless Onboarding controller is allowed to handle.
*
* @param messenger - The messenger to restrict.
* @returns The restricted messenger.
*/
export function getSeedlessOnboardingControllerMessenger(
messenger: Messenger<MessengerActions, MessengerEvents>,
) {
return messenger.getRestricted({
name: 'SeedlessOnboardingController',
allowedActions: [],
allowedEvents: [
'KeyringController:stateChange',
],
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import {
SeedlessOnboardingController,
SeedlessOnboardingControllerMessenger
} from '@metamask/seedless-onboarding-controller';
import { ControllerInitFunction } from '../types';

export const SeedlessOnboardingControllerInit: ControllerInitFunction<
SeedlessOnboardingController,
SeedlessOnboardingControllerMessenger
> = (request) => {
const { controllerMessenger } = request;
const controller = new SeedlessOnboardingController({
messenger: controllerMessenger,
});

return {
controller,
}
};
Loading