Skip to content

Commit 328d722

Browse files
Add parameter validation
1 parent f7f3c00 commit 328d722

File tree

3 files changed

+88
-4
lines changed

3 files changed

+88
-4
lines changed

packages/snaps-execution-environments/src/common/BaseSnapExecutor.test.browser.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1496,7 +1496,13 @@ describe('BaseSnapExecutor', () => {
14961496
MOCK_SNAP_ID,
14971497
HandlerType.OnAssetsLookup,
14981498
MOCK_ORIGIN,
1499-
{ jsonrpc: '2.0', method: '', params: { assets: [] } },
1499+
{
1500+
jsonrpc: '2.0',
1501+
method: '',
1502+
params: {
1503+
assets: ['bip122:000000000019d6689c085ae165831e93/slip44:0'],
1504+
},
1505+
},
15001506
],
15011507
});
15021508

@@ -1529,7 +1535,18 @@ describe('BaseSnapExecutor', () => {
15291535
MOCK_SNAP_ID,
15301536
HandlerType.OnAssetsConversion,
15311537
MOCK_ORIGIN,
1532-
{ jsonrpc: '2.0', method: '', params: { conversions: [] } },
1538+
{
1539+
jsonrpc: '2.0',
1540+
method: '',
1541+
params: {
1542+
conversions: [
1543+
{
1544+
from: 'bip122:000000000019d6689c085ae165831e93/slip44:0',
1545+
to: 'eip155:1/slip44:60',
1546+
},
1547+
],
1548+
},
1549+
},
15331550
],
15341551
});
15351552

packages/snaps-execution-environments/src/common/commands.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import {
1515
assertIsOnSignatureRequestArguments,
1616
assertIsOnNameLookupRequestArguments,
1717
assertIsOnUserInputRequestArguments,
18+
assertIsOnAssetsLookupRequestArguments,
19+
assertIsOnAssetsConversionRequestArguments,
1820
} from './validation';
1921

2022
export type CommandMethodsMapping = {
@@ -57,12 +59,12 @@ export function getHandlerArguments(
5759
return { signature, signatureOrigin };
5860
}
5961
case HandlerType.OnAssetsLookup: {
60-
// TODO: Assert once we have structs
62+
assertIsOnAssetsLookupRequestArguments(request.params);
6163
const { assets } = request.params;
6264
return { assets };
6365
}
6466
case HandlerType.OnAssetsConversion: {
65-
// TODO: Assert once we have structs
67+
assertIsOnAssetsConversionRequestArguments(request.params);
6668
const { conversions } = request.params;
6769
return { conversions };
6870
}

packages/snaps-execution-environments/src/common/validation.ts

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ import {
1616
object,
1717
optional,
1818
record,
19+
size,
1920
string,
2021
tuple,
2122
union,
2223
} from '@metamask/superstruct';
2324
import type { Json, JsonRpcSuccess } from '@metamask/utils';
2425
import {
2526
assertStruct,
27+
CaipAssetTypeStruct,
2628
JsonRpcIdStruct,
2729
JsonRpcParamsStruct,
2830
JsonRpcSuccessStruct,
@@ -216,6 +218,69 @@ export function assertIsOnNameLookupRequestArguments(
216218
);
217219
}
218220

221+
export const OnAssetsLookupRequestArgumentsStruct = object({
222+
assets: size(array(CaipAssetTypeStruct), 1, Infinity),
223+
});
224+
225+
export type OnAssetsLookupRequestArguments = Infer<
226+
typeof OnAssetsLookupRequestArgumentsStruct
227+
>;
228+
229+
/**
230+
* Asserts that the given value is a valid {@link OnAssetsLookupRequestArguments}
231+
* object.
232+
*
233+
* @param value - The value to validate.
234+
* @throws If the value is not a valid {@link OnAssetsLookupRequestArguments}
235+
* object.
236+
*/
237+
export function assertIsOnAssetsLookupRequestArguments(
238+
value: unknown,
239+
): asserts value is OnAssetsLookupRequestArguments {
240+
assertStruct(
241+
value,
242+
OnAssetsLookupRequestArgumentsStruct,
243+
'Invalid request params',
244+
rpcErrors.invalidParams,
245+
);
246+
}
247+
248+
export const OnAssetsConversionRequestArgumentsStruct = object({
249+
conversions: size(
250+
array(
251+
object({
252+
from: CaipAssetTypeStruct,
253+
to: CaipAssetTypeStruct,
254+
}),
255+
),
256+
1,
257+
Infinity,
258+
),
259+
});
260+
261+
export type OnAssetsConversionRequestArguments = Infer<
262+
typeof OnAssetsConversionRequestArgumentsStruct
263+
>;
264+
265+
/**
266+
* Asserts that the given value is a valid {@link OnAssetsConversionRequestArguments}
267+
* object.
268+
*
269+
* @param value - The value to validate.
270+
* @throws If the value is not a valid {@link OnNameLookupRequestArguments}
271+
* object.
272+
*/
273+
export function assertIsOnAssetsConversionRequestArguments(
274+
value: unknown,
275+
): asserts value is OnAssetsConversionRequestArguments {
276+
assertStruct(
277+
value,
278+
OnAssetsConversionRequestArgumentsStruct,
279+
'Invalid request params',
280+
rpcErrors.invalidParams,
281+
);
282+
}
283+
219284
export const OnUserInputArgumentsStruct = object({
220285
id: string(),
221286
event: UserInputEventStruct,

0 commit comments

Comments
 (0)