Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 0 additions & 103 deletions eslint-suppressions.json
Original file line number Diff line number Diff line change
Expand Up @@ -1338,15 +1338,7 @@
"count": 20
}
},
"packages/tron-wallet-snap/src/caching/InMemoryCache.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/caching/StateCache.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
},
"no-restricted-syntax": {
"count": 1
}
Expand All @@ -1361,20 +1353,7 @@
"count": 2
}
},
"packages/tron-wallet-snap/src/clients/price-api/PriceApiClient.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/clients/price-api/types.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/clients/security-alerts-api/utils.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
},
"no-restricted-syntax": {
"count": 5
}
Expand All @@ -1387,11 +1366,6 @@
"count": 1
}
},
"packages/tron-wallet-snap/src/clients/token-api/TokenApiClient.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/clients/trongrid/TrongridApiClient.test.ts": {
"require-atomic-updates": {
"count": 1
Expand All @@ -1410,16 +1384,6 @@
"count": 42
}
},
"packages/tron-wallet-snap/src/handlers/clientRequest/clientRequest.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/handlers/clientRequest/validation.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/handlers/cronjob/cronjob.test.tsx": {
"@typescript-eslint/explicit-function-return-type": {
"count": 2
Expand All @@ -1438,34 +1402,16 @@
"count": 1
}
},
"packages/tron-wallet-snap/src/services/accounts/AccountsService.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/assets/AssetsRepository.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 2
}
},
"packages/tron-wallet-snap/src/services/assets/AssetsService.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 3
},
"@typescript-eslint/no-explicit-any": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/assets/adapters/SnapAssetsAdapter.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/config/ConfigProvider.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/send/FeeCalculatorService.ts": {
"no-restricted-syntax": {
"count": 1
Expand All @@ -1479,11 +1425,6 @@
"count": 15
}
},
"packages/tron-wallet-snap/src/services/send/SendService.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/send/TransactionExpirationRefresherService.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 5
Expand All @@ -1494,11 +1435,6 @@
"count": 7
}
},
"packages/tron-wallet-snap/src/services/staking/StakingService.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/state/State.test.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 1
Expand All @@ -1507,11 +1443,6 @@
"count": 1
}
},
"packages/tron-wallet-snap/src/services/transaction-expiration-refresher/TransactionExpirationRefresherService.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/transaction-scan/TransactionScanService.ts": {
"no-restricted-syntax": {
"count": 5
Expand All @@ -1528,14 +1459,6 @@
},
"@typescript-eslint/no-explicit-any": {
"count": 7
},
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/services/wallet/WalletService.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/ui/confirmation/components/TransactionAlert/TransactionAlert.test.tsx": {
Expand All @@ -1554,9 +1477,6 @@
"packages/tron-wallet-snap/src/ui/confirmation/views/ConfirmSignMessage/render.test.tsx": {
"@typescript-eslint/no-explicit-any": {
"count": 3
},
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/ui/confirmation/views/ConfirmSignTransaction/ConfirmSignTransaction.test.tsx": {
Expand All @@ -1567,14 +1487,6 @@
"packages/tron-wallet-snap/src/ui/confirmation/views/ConfirmSignTransaction/render.test.tsx": {
"@typescript-eslint/no-explicit-any": {
"count": 14
},
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/ui/confirmation/views/ConfirmSignTransaction/render.tsx": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/ui/confirmation/views/ConfirmTransactionRequest/ConfirmTransactionRequest.test.tsx": {
Expand All @@ -1590,26 +1502,11 @@
"count": 2
}
},
"packages/tron-wallet-snap/src/utils/deriveTronFromCoinTypeNode.test.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/utils/deriveTronFromCoinTypeNode.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/utils/getExplorerUrl.test.ts": {
"n/no-process-env": {
"count": 3
}
},
"packages/tron-wallet-snap/src/validation/keyring-structs.test.ts": {
"import-x/no-extraneous-dependencies": {
"count": 1
}
},
"packages/tron-wallet-snap/src/validation/transaction.test.ts": {
"@typescript-eslint/no-explicit-any": {
"count": 1
Expand Down
4 changes: 4 additions & 0 deletions packages/tron-wallet-snap/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 `CoreAssetsAdapter` and `mapControllerAsset` for AssetsController integration (wired unused until routing lands) ([#144](https://github.com/MetaMask/internal-snaps/pull/144))

### Changed

- Extract shared asset util functions and inject `SnapAssetsAdapter` from `context` into `AssetsService` ([#143](https://github.com/MetaMask/internal-snaps/pull/143))
Expand Down
1 change: 1 addition & 0 deletions packages/tron-wallet-snap/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"@metamask/snaps-jest": "^10.2.0",
"@metamask/snaps-sdk": "^11.2.0",
"@metamask/superstruct": "^3.4.1",
"@metamask/utils": "^11.9.0",
"@types/lodash": "^4.17.15",
"async-mutex": "^0.5.0",
"bignumber.js": "^9.3.1",
Expand Down
2 changes: 1 addition & 1 deletion packages/tron-wallet-snap/snap.manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/internal-snaps.git"
},
"source": {
"shasum": "NpxOo6DkB0sBh8xpisBu3o+7G6MJriDNsADcHVb/Qp8=",
"shasum": "3Mn3cc4eA7OmuOAA4zs+kMMQGCj1gs982z50E37I+pc=",
"location": {
"npm": {
"filePath": "dist/bundle.js",
Expand Down
8 changes: 8 additions & 0 deletions packages/tron-wallet-snap/src/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { RpcHandler } from './handlers/rpc/rpc';
import { UserInputHandler } from './handlers/user-input/userInput';
import { AccountsRepository } from './services/accounts/AccountsRepository';
import { AccountsService } from './services/accounts/AccountsService';
import { CoreAssetsAdapter } from './services/assets/adapters/CoreAssetsAdapter';
import { SnapAssetsAdapter } from './services/assets/adapters/SnapAssetsAdapter';
import { AssetsRepository } from './services/assets/AssetsRepository';
import { AssetsService } from './services/assets/AssetsService';
Expand Down Expand Up @@ -125,10 +126,17 @@ const snapAssetsAdapter = new SnapAssetsAdapter({
snapClient,
configProvider,
});
const coreAssetsAdapter = new CoreAssetsAdapter({
logger,
assetsProvider,
trongridApiClient,
tronHttpClient,
});

// Business Services
const assetsService = new AssetsService({
snapAdapter: snapAssetsAdapter,
coreAdapter: coreAssetsAdapter,
});

const transactionsService = new TransactionsService({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,16 @@ type MockState = {

jest.mock('../../context', () => ({
configProvider: {
get() {
get(): {
priceApi: {
cacheTtlsMilliseconds: {
fiatExchangeRates: number;
spotPrices: number;
historicalPrices: number;
};
};
activeNetworks: never[];
} {
return {
priceApi: {
cacheTtlsMilliseconds: {
Expand All @@ -54,6 +63,8 @@ const { configProvider } = require('../../context');
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { AssetsService } = require('./AssetsService');
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { CoreAssetsAdapter } = require('./adapters/CoreAssetsAdapter');
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { SnapAssetsAdapter } = require('./adapters/SnapAssetsAdapter');

const mockAccount: KeyringAccount = {
Expand Down Expand Up @@ -141,7 +152,9 @@ const minimalTronAccount = createMockTronAccount({
* @param overrides - Account-specific fields to set.
* @returns A mock AccountResources object.
*/
function getMockAccountResources(overrides: Record<string, number> = {}) {
function getMockAccountResources(
overrides: Record<string, number> = {},
): Record<string, number> {
return {
freeNetLimit: 600,
TotalNetLimit: 0,
Expand All @@ -159,7 +172,10 @@ function getMockAccountResources(overrides: Record<string, number> = {}) {
* @param assetType - The CAIP-19 asset type to match.
* @returns The matching asset, or undefined.
*/
function findAsset(assets: AssetEntity[], assetType: KnownCaip19Id) {
function findAsset(
assets: AssetEntity[],
assetType: KnownCaip19Id,
): AssetEntity | undefined {
return assets.find((a: AssetEntity) => a.assetType === assetType);
}

Expand Down Expand Up @@ -275,7 +291,17 @@ async function withAssetsService<ReturnValue>(
snapClient: mockSnapClient,
configProvider,
});
const assetsService = new AssetsService({ snapAdapter });
const coreAdapter = new CoreAssetsAdapter({
logger: mockLogger,
assetsProvider: {
getAccountAssetByID: jest.fn().mockResolvedValue(null),
getAccountAssetsByIDs: jest.fn().mockResolvedValue({}),
getAccountAssetsByScope: jest.fn().mockResolvedValue({}),
},
trongridApiClient: mockTrongridApiClient,
tronHttpClient: mockTronHttpClient,
});
const assetsService = new AssetsService({ snapAdapter, coreAdapter });

return await testFunction({
assetsService,
Expand Down
18 changes: 15 additions & 3 deletions packages/tron-wallet-snap/src/services/assets/AssetsService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,32 @@ import type { CaipAssetType } from '@metamask/utils';

import type { Network } from '../../constants';
import type { AssetEntity } from '../../entities/assets';
import type { CoreAssetsAdapter } from './adapters/CoreAssetsAdapter';
import { SnapAssetsAdapter } from './adapters/SnapAssetsAdapter';

/**
* Assets domain facade. Currently delegates all behavior to SnapAssetsAdapter
* (legacy snap-owned reads/writes). Core adapter routing can be introduced later
* without changing callers.
* (legacy snap-owned reads/writes). Core adapter is initialized for upcoming
* routing without changing callers.
*/
export class AssetsService {
readonly #snapAdapter: SnapAssetsAdapter;

// Initialized for upcoming Core routing; not read until the migration PR lands.
// eslint-disable-next-line no-unused-private-class-members -- reserved adapter slot
readonly #coreAdapter: CoreAssetsAdapter;

readonly cacheTtlsMilliseconds: SnapAssetsAdapter['cacheTtlsMilliseconds'];

constructor({ snapAdapter }: { snapAdapter: SnapAssetsAdapter }) {
constructor({
snapAdapter,
coreAdapter,
}: {
snapAdapter: SnapAssetsAdapter;
coreAdapter: CoreAssetsAdapter;
}) {
this.#snapAdapter = snapAdapter;
this.#coreAdapter = coreAdapter;
this.cacheTtlsMilliseconds = this.#snapAdapter.cacheTtlsMilliseconds;
}

Expand Down
Loading