Skip to content
4 changes: 4 additions & 0 deletions packages/seedless-onboarding-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- Add two new controller state metadata properties: `includeInStateLogs` and `usedInUi` ([#6504](https://github.com/MetaMask/core/pull/6504))

## [4.0.0]

### Added
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { keccak256AndHexify } from '@metamask/auth-network-utils';
import type { Messenger } from '@metamask/base-controller';
import {
deriveStateFromMetadata,
type Messenger,
} from '@metamask/base-controller';
import type { EncryptionKey } from '@metamask/browser-passworder';
import {
encrypt,
Expand Down Expand Up @@ -5432,4 +5435,240 @@ describe('SeedlessOnboardingController', () => {
);
});
});

describe('metadata', () => {
it('includes expected state in debug snapshots', async () => {
await withController(
{
state: {
accessToken: 'accessToken',
authPubKey: 'authPubKey',
authConnection: AuthConnection.Google,
authConnectionId: 'authConnectionId',
encryptedKeyringEncryptionKey: 'encryptedKeyringEncryptionKey',
encryptedSeedlessEncryptionKey: 'encryptedSeedlessEncryptionKey',
groupedAuthConnectionId: 'groupedAuthConnectionId',
isSeedlessOnboardingUserAuthenticated: true,
metadataAccessToken: 'metadataAccessToken',
nodeAuthTokens: [],
passwordOutdatedCache: {
isExpiredPwd: false,
timestamp: 1234567890,
},
pendingToBeRevokedTokens: [
{ refreshToken: 'refreshToken', revokeToken: 'revokeToken' },
],
refreshToken: 'refreshToken',
revokeToken: 'revokeToken',
socialBackupsMetadata: [],
socialLoginEmail: 'socialLoginEmail',
userId: 'userId',
vault: 'vault',
vaultEncryptionKey: 'vaultEncryptionKey',
vaultEncryptionSalt: 'vaultEncryptionSalt',
},
},
({ controller }) => {
expect(
deriveStateFromMetadata(
controller.state,
controller.metadata,
'anonymous',
),
).toMatchInlineSnapshot(`
Object {
"authConnection": "google",
"authConnectionId": "authConnectionId",
"groupedAuthConnectionId": "groupedAuthConnectionId",
"isSeedlessOnboardingUserAuthenticated": false,
"passwordOutdatedCache": Object {
"isExpiredPwd": false,
"timestamp": 1234567890,
},
}
`);
},
);
});

it('includes expected state in state logs', async () => {
await withController(
{
state: {
accessToken: 'accessToken',
authPubKey: 'authPubKey',
authConnection: AuthConnection.Google,
authConnectionId: 'authConnectionId',
encryptedKeyringEncryptionKey: 'encryptedKeyringEncryptionKey',
encryptedSeedlessEncryptionKey: 'encryptedSeedlessEncryptionKey',
groupedAuthConnectionId: 'groupedAuthConnectionId',
isSeedlessOnboardingUserAuthenticated: true,
metadataAccessToken: 'metadataAccessToken',
nodeAuthTokens: [],
passwordOutdatedCache: {
isExpiredPwd: false,
timestamp: 1234567890,
},
pendingToBeRevokedTokens: [
{ refreshToken: 'refreshToken', revokeToken: 'revokeToken' },
],
refreshToken: 'refreshToken',
revokeToken: 'revokeToken',
socialBackupsMetadata: [],
socialLoginEmail: 'socialLoginEmail',
userId: 'userId',
vault: 'vault',
vaultEncryptionKey: 'vaultEncryptionKey',
vaultEncryptionSalt: 'vaultEncryptionSalt',
},
},
({ controller }) => {
expect(
deriveStateFromMetadata(
controller.state,
controller.metadata,
'includeInStateLogs',
),
).toMatchInlineSnapshot(`
Object {
"accessToken": true,
"authConnection": "google",
"authConnectionId": "authConnectionId",
"authPubKey": "authPubKey",
"groupedAuthConnectionId": "groupedAuthConnectionId",
"isSeedlessOnboardingUserAuthenticated": false,
"metadataAccessToken": true,
"nodeAuthTokens": true,
"passwordOutdatedCache": Object {
"isExpiredPwd": false,
"timestamp": 1234567890,
},
"pendingToBeRevokedTokens": true,
"refreshToken": true,
"revokeToken": true,
"userId": "userId",
}
`);
},
);
});

it('persists expected state', async () => {
await withController(
{
state: {
accessToken: 'accessToken',
authPubKey: 'authPubKey',
authConnection: AuthConnection.Google,
authConnectionId: 'authConnectionId',
encryptedKeyringEncryptionKey: 'encryptedKeyringEncryptionKey',
encryptedSeedlessEncryptionKey: 'encryptedSeedlessEncryptionKey',
groupedAuthConnectionId: 'groupedAuthConnectionId',
isSeedlessOnboardingUserAuthenticated: true,
metadataAccessToken: 'metadataAccessToken',
nodeAuthTokens: [],
passwordOutdatedCache: {
isExpiredPwd: false,
timestamp: 1234567890,
},
pendingToBeRevokedTokens: [
{ refreshToken: 'refreshToken', revokeToken: 'revokeToken' },
],
refreshToken: 'refreshToken',
revokeToken: 'revokeToken',
socialBackupsMetadata: [],
socialLoginEmail: 'socialLoginEmail',
userId: 'userId',
vault: 'vault',
vaultEncryptionKey: 'vaultEncryptionKey',
vaultEncryptionSalt: 'vaultEncryptionSalt',
},
},
({ controller }) => {
expect(
deriveStateFromMetadata(
controller.state,
controller.metadata,
'persist',
),
).toMatchInlineSnapshot(`
Object {
"authConnection": "google",
"authConnectionId": "authConnectionId",
"authPubKey": "authPubKey",
"encryptedKeyringEncryptionKey": "encryptedKeyringEncryptionKey",
"encryptedSeedlessEncryptionKey": "encryptedSeedlessEncryptionKey",
"groupedAuthConnectionId": "groupedAuthConnectionId",
"isSeedlessOnboardingUserAuthenticated": false,
"metadataAccessToken": "metadataAccessToken",
"nodeAuthTokens": Array [],
"passwordOutdatedCache": Object {
"isExpiredPwd": false,
"timestamp": 1234567890,
},
"pendingToBeRevokedTokens": Array [
Object {
"refreshToken": "refreshToken",
"revokeToken": "revokeToken",
},
],
"refreshToken": "refreshToken",
"socialBackupsMetadata": Array [],
"socialLoginEmail": "socialLoginEmail",
"userId": "userId",
"vault": "vault",
}
`);
},
);
});

it('exposes expected state to UI', async () => {
await withController(
{
state: {
accessToken: 'accessToken',
authPubKey: 'authPubKey',
authConnection: AuthConnection.Google,
authConnectionId: 'authConnectionId',
encryptedKeyringEncryptionKey: 'encryptedKeyringEncryptionKey',
encryptedSeedlessEncryptionKey: 'encryptedSeedlessEncryptionKey',
groupedAuthConnectionId: 'groupedAuthConnectionId',
isSeedlessOnboardingUserAuthenticated: true,
metadataAccessToken: 'metadataAccessToken',
nodeAuthTokens: [],
passwordOutdatedCache: {
isExpiredPwd: false,
timestamp: 1234567890,
},
pendingToBeRevokedTokens: [
{ refreshToken: 'refreshToken', revokeToken: 'revokeToken' },
],
refreshToken: 'refreshToken',
revokeToken: 'revokeToken',
socialBackupsMetadata: [],
socialLoginEmail: 'socialLoginEmail',
userId: 'userId',
vault: 'vault',
vaultEncryptionKey: 'vaultEncryptionKey',
vaultEncryptionSalt: 'vaultEncryptionSalt',
},
},
({ controller }) => {
expect(
deriveStateFromMetadata(
controller.state,
controller.metadata,
'usedInUi',
),
).toMatchInlineSnapshot(`
Object {
"authConnection": "google",
"socialLoginEmail": "socialLoginEmail",
}
`);
},
);
});
});
});
Loading
Loading