@deeeed/metamask-harness 0.47.4 → 0.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +3 -2
- package/adapters/extension/lib/macos-focus.cjs +2 -2
- package/adapters/extension/live.sh +6 -8
- package/adapters/mobile/bridge-runtime/lib/bridge-errors.cjs +1 -0
- package/adapters/shared/ensure-runner-deps.sh +6 -0
- package/dist/adapters/extension/runtime-decision.js +18 -1
- package/dist/adapters/extension/runtime.js +5 -5
- package/dist/adapters/extension/surface.js +1 -0
- package/dist/app-lifecycle.js +3 -1
- package/dist/command-contract.js +2 -0
- package/dist/commands/call.js +1 -8
- package/dist/commands/device-target.js +12 -3
- package/dist/commands/doctor.js +7 -5
- package/dist/commands/fixtures.js +1 -1
- package/dist/commands/help.js +17 -5
- package/dist/commands/launch/index.js +10 -0
- package/dist/commands/manifest.js +3 -1
- package/dist/commands/mobile-device-view.js +13 -3
- package/dist/commands/parse-args.js +2 -0
- package/dist/commands/run-engine.js +29 -4
- package/dist/commands/run.js +1 -1
- package/dist/commands/runtime-launch.js +10 -1
- package/dist/commands/status.js +8 -4
- package/dist/devices.js +31 -9
- package/dist/execution-provenance.js +8 -7
- package/dist/funding-execution-context.js +62 -17
- package/dist/heal-bounds.js +3 -3
- package/dist/live-adapter-contract.js +4 -0
- package/dist/manifest.js +2 -13
- package/dist/metamask-action-validation.js +3 -2
- package/dist/mm-harness-cli.js +4 -2
- package/dist/runner.js +14 -3
- package/docs/RECIPES.md +135 -24
- package/docs/RELEASE-QA-CAPABILITY-MAP.md +3 -2
- package/library/actions/core/perps/_controller.mjs +24 -24
- package/library/actions/core/perps/assert_orders.mjs +3 -5
- package/library/actions/core/perps/assert_positions.mjs +3 -5
- package/library/actions/core/perps/close_orders.mjs +39 -19
- package/library/actions/core/perps/close_positions.mjs +53 -12
- package/library/actions/core/perps/edit_order.mjs +2 -0
- package/library/actions/core/perps/ensure_orders.mjs +3 -4
- package/library/actions/core/perps/ensure_positions.mjs +4 -5
- package/library/actions/core/perps/place_order.mjs +7 -14
- package/library/actions/core/perps/read_account.mjs +2 -0
- package/library/actions/core/perps/read_orders.mjs +2 -0
- package/library/actions/core/perps/read_positions.mjs +3 -1
- package/library/actions/core/perps/read_snapshot.mjs +3 -0
- package/library/actions/core/perps/start_state.mjs +3 -14
- package/library/actions/core/perps/teardown_state.mjs +3 -14
- package/library/actions/core/perps/update_position_tpsl.mjs +13 -19
- package/library/actions/core/wallet/list_accounts.mjs +3 -0
- package/library/actions/extension/analytics/consent.mjs +2 -0
- package/library/actions/extension/analytics/set_consent.mjs +2 -0
- package/library/actions/extension/assets/home-token-identity.mjs +31 -0
- package/library/actions/extension/assets/import_custom_token.mjs +63 -79
- package/library/actions/extension/assets/open_details.mjs +19 -7
- package/library/actions/extension/assets/prepare_send.mjs +1 -0
- package/library/actions/extension/assets/read_details.mjs +62 -29
- package/library/actions/extension/assets/read_visible_state.mjs +5 -1
- package/library/actions/extension/assets/review_send.mjs +1 -0
- package/library/actions/extension/assets/select_network_scope.mjs +17 -9
- package/library/actions/extension/assets/send.mjs +2 -0
- package/library/actions/extension/assets/set_custom_gas.mjs +1 -0
- package/library/actions/extension/assets/set_token_visibility.mjs +86 -17
- package/library/actions/extension/assets/verify_sorting.mjs +63 -14
- package/library/actions/extension/deeplink/open.mjs +1 -0
- package/library/actions/extension/networks/add_chainlist.mjs +2 -0
- package/library/actions/extension/networks/add_custom.mjs +21 -17
- package/library/actions/extension/networks/custom_network.mjs +10 -3
- package/library/actions/extension/networks/read_visible_state.mjs +2 -0
- package/library/actions/extension/networks/remove_custom.mjs +1 -0
- package/library/actions/extension/performance/_navigation-memory.mjs +37 -6
- package/library/actions/extension/performance/compare_idle_navigation_memory.mjs +5 -2
- package/library/actions/extension/performance/measure_detached_dom.mjs +5 -2
- package/library/actions/extension/performance/measure_navigation_memory.mjs +5 -2
- package/library/actions/extension/perps/assert_orders.mjs +1 -0
- package/library/actions/extension/perps/assert_positions.mjs +1 -0
- package/library/actions/extension/perps/assert_visible_consistency.mjs +11 -4
- package/library/actions/extension/perps/close_orders.mjs +4 -1
- package/library/actions/extension/perps/close_positions.mjs +1 -0
- package/library/actions/extension/perps/close_visible_position.mjs +160 -11
- package/library/actions/extension/perps/compare_provider_market.mjs +2 -0
- package/library/actions/extension/perps/edit_margin.mjs +3 -1
- package/library/actions/extension/perps/ensure_orders.mjs +1 -0
- package/library/actions/extension/perps/ensure_positions.mjs +1 -0
- package/library/actions/extension/perps/mutation-receipt.mjs +54 -3
- package/library/actions/extension/perps/open_balance_action.mjs +17 -7
- package/library/actions/extension/perps/open_position_action.mjs +1 -0
- package/library/actions/extension/perps/perps.mjs +550 -69
- package/library/actions/extension/perps/place_order.mjs +1 -0
- package/library/actions/extension/perps/read_eligibility.mjs +1 -0
- package/library/actions/extension/perps/read_funds_confirmation.mjs +10 -0
- package/library/actions/extension/perps/read_orders.mjs +1 -0
- package/library/actions/extension/perps/read_positions.mjs +1 -0
- package/library/actions/extension/perps/read_snapshot.mjs +4 -1
- package/library/actions/extension/perps/read_visible_state.mjs +12 -6
- package/library/actions/extension/perps/search_markets.mjs +8 -2
- package/library/actions/extension/perps/select_activity_filter.mjs +2 -1
- package/library/actions/extension/perps/select_market_filter.mjs +75 -45
- package/library/actions/extension/perps/set_market_favorite.mjs +7 -3
- package/library/actions/extension/perps/state.mjs +2 -0
- package/library/actions/extension/perps/update_position_tpsl.mjs +3 -1
- package/library/actions/extension/perps/visible-mutation-identity.mjs +6 -2
- package/library/actions/extension/platform/cdp.mjs +50 -142
- package/library/actions/extension/settings/set_basic_functionality.mjs +1 -0
- package/library/actions/extension/swap_bridge/quote-state.mjs +56 -0
- package/library/actions/extension/swap_bridge/read_visible_state.mjs +5 -1
- package/library/actions/extension/swap_bridge/select_assets.mjs +12 -1
- package/library/actions/extension/swap_bridge/set_amount.mjs +11 -8
- package/library/actions/extension/swap_bridge/set_max_amount.mjs +18 -18
- package/library/actions/extension/swap_bridge/set_slippage.mjs +1 -9
- package/library/actions/extension/ui/locators.mjs +1 -0
- package/library/actions/extension/ui/navigate.mjs +60 -14
- package/library/actions/extension/wallet/ensure_unlocked.mjs +2 -0
- package/library/actions/extension/wallet/import.mjs +2 -0
- package/library/actions/extension/wallet/list_accounts.mjs +1 -0
- package/library/actions/extension/wallet/lock.mjs +4 -1
- package/library/actions/extension/wallet/read_state.mjs +1 -0
- package/library/actions/extension/wallet/reset.mjs +2 -0
- package/library/actions/extension/wallet/secret-input.mjs +2 -0
- package/library/actions/extension/wallet/select_account.mjs +2 -0
- package/library/actions/extension/wallet/setup.mjs +1 -0
- package/library/actions/extension/wallet/state.mjs +2 -0
- package/library/actions/extension/wallet/visible-session.mjs +2 -0
- package/library/actions/mobile/analytics/consent-settings.mjs +1 -0
- package/library/actions/mobile/analytics/set_consent.mjs +1 -0
- package/library/actions/mobile/app/network-control.mjs +2 -0
- package/library/actions/mobile/app/network.mjs +1 -0
- package/library/actions/mobile/app/network_assert.mjs +1 -0
- package/library/actions/mobile/app/network_capture.mjs +1 -0
- package/library/actions/mobile/assets/import_custom_token.mjs +3 -0
- package/library/actions/mobile/assets/open_details.mjs +1 -0
- package/library/actions/mobile/assets/read_details.mjs +1 -0
- package/library/actions/mobile/assets/read_visible_state.mjs +4 -1
- package/library/actions/mobile/assets/set_token_visibility.mjs +15 -9
- package/library/actions/mobile/assets/verify_sorting.mjs +90 -7
- package/library/actions/mobile/deeplink/open.mjs +1 -0
- package/library/actions/mobile/networks/add_custom.mjs +1 -0
- package/library/actions/mobile/networks/network-management.mjs +23 -15
- package/library/actions/mobile/networks/read_visible_state.mjs +1 -0
- package/library/actions/mobile/networks/remove_custom.mjs +7 -2
- package/library/actions/mobile/perps/assert_orders.mjs +1 -0
- package/library/actions/mobile/perps/assert_positions.mjs +1 -0
- package/library/actions/mobile/perps/capture_performance.mjs +1 -0
- package/library/actions/mobile/perps/close_orders.mjs +1 -0
- package/library/actions/mobile/perps/close_positions.mjs +1 -0
- package/library/actions/mobile/perps/ensure_orders.mjs +1 -0
- package/library/actions/mobile/perps/ensure_positions.mjs +1 -0
- package/library/actions/mobile/perps/measure_homepage_visible.mjs +1 -0
- package/library/actions/mobile/perps/performance-capture.mjs +2 -0
- package/library/actions/mobile/perps/perps.mjs +8 -1
- package/library/actions/mobile/perps/place_order.mjs +1 -0
- package/library/actions/mobile/perps/prepare_local_snapshot_endpoint.mjs +2 -0
- package/library/actions/mobile/perps/read-visible-state-loop.mjs +3 -0
- package/library/actions/mobile/perps/read_orders.mjs +1 -0
- package/library/actions/mobile/perps/read_positions.mjs +1 -0
- package/library/actions/mobile/perps/read_visible_state.mjs +1 -0
- package/library/actions/mobile/perps/search_markets.mjs +1 -0
- package/library/actions/mobile/perps/set_market_favorite.mjs +17 -19
- package/library/actions/mobile/platform/bridge.mjs +16 -4
- package/library/actions/mobile/platform/native-session-name.mjs +1 -0
- package/library/actions/mobile/platform/native-session.mjs +28 -17
- package/library/actions/mobile/platform/observe-ui.mjs +4 -2
- package/library/actions/mobile/platform/tool-paths.mjs +1 -0
- package/library/actions/mobile/swap_bridge/native-session.mjs +1 -0
- package/library/actions/mobile/swap_bridge/read_visible_state.mjs +1 -0
- package/library/actions/mobile/swap_bridge/select_assets.mjs +2 -0
- package/library/actions/mobile/swap_bridge/set_amount.mjs +1 -0
- package/library/actions/mobile/swap_bridge/set_max_amount.mjs +1 -0
- package/library/actions/mobile/swap_bridge/set_slippage.mjs +1 -0
- package/library/actions/mobile/swap_bridge/submit_transaction.mjs +2 -0
- package/library/actions/mobile/ui/locators.mjs +1 -0
- package/library/actions/mobile/ui/native-navigation.mjs +2 -0
- package/library/actions/mobile/ui/navigate.mjs +3 -1
- package/library/actions/mobile/wallet/ensure_unlocked.mjs +2 -0
- package/library/actions/mobile/wallet/home.mjs +1 -0
- package/library/actions/mobile/wallet/import.mjs +2 -0
- package/library/actions/mobile/wallet/list_accounts.mjs +1 -0
- package/library/actions/mobile/wallet/lock.mjs +1 -0
- package/library/actions/mobile/wallet/native-ui.mjs +2 -0
- package/library/actions/mobile/wallet/read_state.mjs +2 -0
- package/library/actions/mobile/wallet/reset-helper.mjs +1 -0
- package/library/actions/mobile/wallet/reset.mjs +1 -0
- package/library/actions/mobile/wallet/select_account.mjs +2 -0
- package/library/actions/mobile/wallet/setup.mjs +2 -0
- package/library/actions/shared/analytics/assert_events.mjs +3 -0
- package/library/actions/shared/analytics/consent.mjs +3 -0
- package/library/actions/shared/analytics/read_events.mjs +2 -0
- package/library/actions/shared/analytics/start_capture.mjs +3 -0
- package/library/actions/shared/app/network-artifact.mjs +2 -0
- package/library/actions/shared/app/network-assert.mjs +2 -0
- package/library/actions/shared/assets/visible-state.mjs +2 -0
- package/library/actions/shared/deeplink/url.mjs +3 -0
- package/library/actions/shared/networks/visible-state.mjs +2 -0
- package/library/actions/shared/perps/visible-state.mjs +16 -3
- package/library/actions/shared/swap-bridge/transaction.mjs +3 -0
- package/library/actions/shared/swap-bridge/visible-state.mjs +2 -0
- package/library/actions/shared/ui/locators.mjs +2 -0
- package/library/actions/shared/wallet/import-source.mjs +3 -0
- package/library/manifests/core.action-manifest.json +34 -2
- package/library/manifests/extension.action-manifest.json +50 -17
- package/library/manifests/mobile.action-manifest.json +11 -10
- package/library/recipes/core/perps/smoke.recipe.json +23 -0
- package/library/recipes/core/perps/snapshot.recipe.json +26 -1
- package/library/recipes/extension/assets/release-custom-network-token-persistence.recipe.json +25 -8
- package/library/recipes/extension/performance/navigation-memory-suite.recipe.json +219 -0
- package/library/recipes/extension/performance/navigation-memory.recipe.json +61 -156
- package/library/recipes/extension/wallet/smoke.recipe.json +17 -8
- package/library/recipes/mobile/app/lifecycle-smoke.recipe.json +89 -0
- package/library/recipes/mobile/networks/release-custom-network-persistence.recipe.json +31 -6
- package/library/recipes/mobile/networks/release-multichain-visibility.recipe.json +5 -4
- package/library/recipes/mobile/wallet/smoke.recipe.json +17 -8
- package/library/recipes/{assets → shared/assets}/release-token-address-import.recipe.json +7 -0
- package/library/recipes/{assets → shared/assets}/release-token-details.recipe.json +2 -2
- package/library/recipes/shared/assets/release-token-hide-readd.recipe.json +91 -0
- package/library/recipes/{assets → shared/assets}/release-token-persistence.recipe.json +3 -0
- package/library/recipes/{assets → shared/assets}/release-token-search-import.recipe.json +4 -1
- package/library/recipes/{assets → shared/assets}/release-token-sorting.recipe.json +13 -2
- package/library/recipes/{swap-bridge → shared/swap-bridge}/release-quote.recipe.json +29 -3
- package/package.json +3 -3
- package/site/assets/help-recipes.json +220 -27
- package/library/recipes/assets/release-token-hide-readd.recipe.json +0 -57
- package/library/recipes/core/perps/clean-market-testnet.recipe.json +0 -44
- package/library/recipes/core/perps/order-lifecycle.recipe.json +0 -82
- package/library/recipes/core/perps/read-markets.recipe.json +0 -36
- package/library/recipes/core/perps/trading-lifecycle.recipe.json +0 -80
- package/library/recipes/extension/perps/release-activity-filters.recipe.json +0 -51
- package/library/recipes/extension/perps/release-funds-flows.recipe.json +0 -76
- package/library/recipes/extension/perps/release-live-limit-order.recipe.json +0 -109
- package/library/recipes/extension/perps/release-market-filters.recipe.json +0 -97
- package/library/recipes/extension/perps/release-order-entry.recipe.json +0 -158
- package/library/recipes/extension/perps/release-order-validation.recipe.json +0 -259
- package/library/recipes/extension/perps/release-visible-consistency.recipe.json +0 -47
- package/library/recipes/extension/perps/source-dev-snapshot-consistency.recipe.json +0 -76
- package/library/recipes/mobile/app/lifecycle.android-smoke.recipe.json +0 -69
- package/library/recipes/mobile/perps/chase-assert-running.recipe.json +0 -110
- package/library/recipes/mobile/perps/chase-place.recipe.json +0 -145
- package/library/recipes/mobile/perps/chase-terminate.recipe.json +0 -98
- package/library/recipes/mobile/perps/performance.recipe.json +0 -722
- package/library/recipes/mobile/perps/pro-order-setup.recipe.json +0 -111
- package/library/recipes/mobile/perps/pro-order-start-state.recipe.json +0 -53
- package/library/recipes/mobile/perps/scale-assert-orders.recipe.json +0 -126
- package/library/recipes/mobile/perps/scale-place.recipe.json +0 -186
- package/library/recipes/mobile/perps/twap-assert-active.recipe.json +0 -97
- package/library/recipes/mobile/perps/twap-place.recipe.json +0 -146
- package/library/recipes/mobile/runner/action-validation.recipe.json +0 -336
- package/library/recipes/perps/clean-market-testnet.recipe.json +0 -49
- package/library/recipes/perps/lifecycle.recipe.json +0 -144
- package/library/recipes/perps/release-live-market-order.recipe.json +0 -139
- package/library/recipes/perps/release-watchlist.recipe.json +0 -111
- package/library/recipes/swap-bridge/release-max-quote.recipe.json +0 -72
- /package/library/recipes/{assets → shared/assets}/release-token-list.recipe.json +0 -0
- /package/library/recipes/{perps → shared/perps}/release-market-details.recipe.json +0 -0
- /package/library/recipes/{perps → shared/perps}/release-market-search.recipe.json +0 -0
- /package/library/recipes/{swap-bridge → shared/swap-bridge}/release-custom-slippage.recipe.json +0 -0
- /package/library/recipes/{swap-bridge → shared/swap-bridge}/release-live-max-swap.recipe.json +0 -0
- /package/library/recipes/{swap-bridge → shared/swap-bridge}/release-live-swap.recipe.json +0 -0
- /package/library/recipes/{swap-bridge → shared/swap-bridge}/release-surface.recipe.json +0 -0
- /package/library/recipes/{wallet → shared/wallet}/import.recipe.json +0 -0
- /package/library/recipes/{wallet → shared/wallet}/reset-import.recipe.json +0 -0
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "Place a Mobile Pro TWAP",
|
|
4
|
-
"description": "Places one parameterized TWAP through visible Mobile Pro controls, cleaning only the testnet path.",
|
|
5
|
-
"paramsSchema": {
|
|
6
|
-
"type": "object",
|
|
7
|
-
"additionalProperties": false,
|
|
8
|
-
"properties": {
|
|
9
|
-
"account": {
|
|
10
|
-
"type": "string",
|
|
11
|
-
"default": "",
|
|
12
|
-
"description": "Optional exact fixture account name, such as Trading or dev1. Omit it to keep the currently selected account."
|
|
13
|
-
},
|
|
14
|
-
"provider": { "type": "string", "default": "hyperliquid" },
|
|
15
|
-
"network": {
|
|
16
|
-
"type": "string",
|
|
17
|
-
"enum": ["testnet", "mainnet"],
|
|
18
|
-
"default": "testnet",
|
|
19
|
-
"description": "Mainnet placement requires an explicit user request."
|
|
20
|
-
},
|
|
21
|
-
"market": {
|
|
22
|
-
"type": "string",
|
|
23
|
-
"default": "BTC"
|
|
24
|
-
},
|
|
25
|
-
"side": {
|
|
26
|
-
"type": "string",
|
|
27
|
-
"enum": [
|
|
28
|
-
"long",
|
|
29
|
-
"short"
|
|
30
|
-
],
|
|
31
|
-
"default": "long"
|
|
32
|
-
},
|
|
33
|
-
"notional": {
|
|
34
|
-
"type": "string",
|
|
35
|
-
"default": "110"
|
|
36
|
-
},
|
|
37
|
-
"randomize": {
|
|
38
|
-
"type": "string",
|
|
39
|
-
"enum": ["true", "false"],
|
|
40
|
-
"default": "false"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
"workflow": {
|
|
45
|
-
"entry": "prepare",
|
|
46
|
-
"nodes": {
|
|
47
|
-
"prepare": {
|
|
48
|
-
"action": "call",
|
|
49
|
-
"ref": "perps.pro-order-setup",
|
|
50
|
-
"params": {
|
|
51
|
-
"account": "{{params.account}}",
|
|
52
|
-
"provider": "{{params.provider}}",
|
|
53
|
-
"network": "{{params.network}}",
|
|
54
|
-
"market": "{{params.market}}",
|
|
55
|
-
"side": "{{params.side}}"
|
|
56
|
-
},
|
|
57
|
-
"intent": "Prepare the requested Pro order form and Advanced picker.",
|
|
58
|
-
"next": "position-twap"
|
|
59
|
-
},
|
|
60
|
-
"position-twap": {
|
|
61
|
-
"action": "ui.scroll",
|
|
62
|
-
"test_id": "perps-order-type-twap",
|
|
63
|
-
"scroll_into_view": true,
|
|
64
|
-
"intent": "Expose the TWAP option for visible selection.",
|
|
65
|
-
"next": "wait-twap"
|
|
66
|
-
},
|
|
67
|
-
"wait-twap": {
|
|
68
|
-
"action": "ui.wait_for",
|
|
69
|
-
"test_id": "perps-order-type-twap",
|
|
70
|
-
"expected": "visible",
|
|
71
|
-
"timeout_ms": 10000,
|
|
72
|
-
"intent": "Fail closed unless TWAP is visibly offered.",
|
|
73
|
-
"next": "select-twap"
|
|
74
|
-
},
|
|
75
|
-
"select-twap": {
|
|
76
|
-
"action": "ui.press",
|
|
77
|
-
"test_id": "perps-order-type-twap",
|
|
78
|
-
"intent": "Select TWAP.",
|
|
79
|
-
"next": "position-size"
|
|
80
|
-
},
|
|
81
|
-
"position-size": {
|
|
82
|
-
"action": "ui.scroll",
|
|
83
|
-
"test_id": "perps-pro-order-form-size-card",
|
|
84
|
-
"scroll_into_view": true,
|
|
85
|
-
"intent": "Expose the TWAP size input for visible entry.",
|
|
86
|
-
"next": "wait-size"
|
|
87
|
-
},
|
|
88
|
-
"wait-size": {
|
|
89
|
-
"action": "ui.wait_for",
|
|
90
|
-
"test_id": "perps-pro-order-form-size-card",
|
|
91
|
-
"expected": "visible",
|
|
92
|
-
"timeout_ms": 10000,
|
|
93
|
-
"intent": "Confirm the TWAP size card is visible.",
|
|
94
|
-
"next": "set-size"
|
|
95
|
-
},
|
|
96
|
-
"set-size": {
|
|
97
|
-
"action": "ui.set_input",
|
|
98
|
-
"test_id": "perps-pro-order-form-size-input",
|
|
99
|
-
"value": "{{params.notional}}",
|
|
100
|
-
"intent": "Enter the requested USD notional.",
|
|
101
|
-
"next": "choose-randomize"
|
|
102
|
-
},
|
|
103
|
-
"choose-randomize": {
|
|
104
|
-
"action": "switch",
|
|
105
|
-
"value": "{{params.randomize}}",
|
|
106
|
-
"equals": "true",
|
|
107
|
-
"cases": {
|
|
108
|
-
"match": "enable-randomize"
|
|
109
|
-
},
|
|
110
|
-
"default": "position-submit",
|
|
111
|
-
"intent": "Apply the requested randomization setting."
|
|
112
|
-
},
|
|
113
|
-
"enable-randomize": {
|
|
114
|
-
"action": "ui.press",
|
|
115
|
-
"test_id": "perps-pro-order-form-twap-randomize",
|
|
116
|
-
"intent": "Enable randomized slice timing.",
|
|
117
|
-
"next": "position-submit"
|
|
118
|
-
},
|
|
119
|
-
"position-submit": {
|
|
120
|
-
"action": "ui.scroll",
|
|
121
|
-
"test_id": "perps-pro-order-form-summary-fees",
|
|
122
|
-
"scroll_into_view": true,
|
|
123
|
-
"intent": "Expose the final TWAP fee row directly above submission.",
|
|
124
|
-
"next": "wait-submit"
|
|
125
|
-
},
|
|
126
|
-
"wait-submit": {
|
|
127
|
-
"action": "ui.wait_for",
|
|
128
|
-
"test_id": "perps-pro-order-form-place-order",
|
|
129
|
-
"expected": "visible",
|
|
130
|
-
"timeout_ms": 10000,
|
|
131
|
-
"intent": "Confirm the valid TWAP can be submitted.",
|
|
132
|
-
"next": "submit"
|
|
133
|
-
},
|
|
134
|
-
"submit": {
|
|
135
|
-
"action": "ui.press",
|
|
136
|
-
"test_id": "perps-pro-order-form-place-order",
|
|
137
|
-
"intent": "Submit the TWAP to the selected provider and network.",
|
|
138
|
-
"next": "done"
|
|
139
|
-
},
|
|
140
|
-
"done": {
|
|
141
|
-
"action": "end",
|
|
142
|
-
"status": "pass"
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "MetaMask Mobile action E2E validation",
|
|
4
|
-
"description": "Exercises every Mobile manifest-declared action against mm-4 and leaves trace output for false-positive checks.",
|
|
5
|
-
"workflow": {
|
|
6
|
-
"entry": "prepare-files",
|
|
7
|
-
"nodes": {
|
|
8
|
-
"prepare-files": {
|
|
9
|
-
"action": "command",
|
|
10
|
-
"cmd": "mkdir -p temp/recipe-runner.action-validation && printf 'E2E_ACTION_VALIDATION mobile\\n' > temp/recipe-runner.action-validation/probe.txt && printf '{\"platform\":\"mobile\",\"ok\":true}\n' > temp/recipe-runner.action-validation/probe.json && printf 'mobile log E2E_ACTION_VALIDATION\\n' >> temp/recipe-runner.action-validation/validation.log && echo E2E_ACTION_VALIDATION mobile",
|
|
11
|
-
"next": "assert-command-exit",
|
|
12
|
-
"intent": "Prepare runner.action-validation probe files"
|
|
13
|
-
},
|
|
14
|
-
"assert-command-exit": {
|
|
15
|
-
"action": "assert_exit_code",
|
|
16
|
-
"source": "prepare-files",
|
|
17
|
-
"expected": 0,
|
|
18
|
-
"next": "assert-command-output",
|
|
19
|
-
"intent": "Verify the probe command exited successfully"
|
|
20
|
-
},
|
|
21
|
-
"assert-command-output": {
|
|
22
|
-
"action": "assert_output",
|
|
23
|
-
"source": "prepare-files",
|
|
24
|
-
"stream": "stdout",
|
|
25
|
-
"contains": "E2E_ACTION_VALIDATION mobile",
|
|
26
|
-
"next": "assert-file",
|
|
27
|
-
"intent": "Verify the probe command produced expected output"
|
|
28
|
-
},
|
|
29
|
-
"assert-file": {
|
|
30
|
-
"action": "assert_file",
|
|
31
|
-
"path": "temp/recipe-runner.action-validation/probe.txt",
|
|
32
|
-
"contains": "E2E_ACTION_VALIDATION mobile",
|
|
33
|
-
"next": "assert-json",
|
|
34
|
-
"intent": "Verify file assertions work"
|
|
35
|
-
},
|
|
36
|
-
"assert-json": {
|
|
37
|
-
"action": "assert_json",
|
|
38
|
-
"path": "temp/recipe-runner.action-validation/probe.json",
|
|
39
|
-
"assert": {
|
|
40
|
-
"path": "$.platform",
|
|
41
|
-
"operator": "eq",
|
|
42
|
-
"value": "mobile"
|
|
43
|
-
},
|
|
44
|
-
"next": "watch-logs",
|
|
45
|
-
"intent": "Verify JSON assertions work"
|
|
46
|
-
},
|
|
47
|
-
"watch-logs": {
|
|
48
|
-
"action": "watch_logs",
|
|
49
|
-
"path": "temp/recipe-runner.action-validation/validation.log",
|
|
50
|
-
"contains": "E2E_ACTION_VALIDATION",
|
|
51
|
-
"next": "index-artifacts",
|
|
52
|
-
"intent": "Verify log watching works"
|
|
53
|
-
},
|
|
54
|
-
"index-artifacts": {
|
|
55
|
-
"action": "index_artifacts",
|
|
56
|
-
"artifacts": [
|
|
57
|
-
{
|
|
58
|
-
"path": "temp/recipe-runner.action-validation/probe.txt",
|
|
59
|
-
"type": "log",
|
|
60
|
-
"category": "debug",
|
|
61
|
-
"label": "Mobile action validation probe"
|
|
62
|
-
}
|
|
63
|
-
],
|
|
64
|
-
"next": "wait",
|
|
65
|
-
"intent": "Register the probe file as an artifact"
|
|
66
|
-
},
|
|
67
|
-
"wait": {
|
|
68
|
-
"action": "wait",
|
|
69
|
-
"duration_ms": 1,
|
|
70
|
-
"next": "status",
|
|
71
|
-
"intent": "Verify the base wait action works"
|
|
72
|
-
},
|
|
73
|
-
"status": {
|
|
74
|
-
"action": "app.status",
|
|
75
|
-
"next": "app-hud",
|
|
76
|
-
"intent": "Read project runner compatibility status"
|
|
77
|
-
},
|
|
78
|
-
"cdp-probe": {
|
|
79
|
-
"action": "cdp.target",
|
|
80
|
-
"next": "fixture",
|
|
81
|
-
"required": true,
|
|
82
|
-
"intent": "Verify the automation channel is reachable"
|
|
83
|
-
},
|
|
84
|
-
"fixture": {
|
|
85
|
-
"action": "metamask.wallet.fixture_status",
|
|
86
|
-
"next": "wallet-setup",
|
|
87
|
-
"intent": "Verify wallet fixture availability"
|
|
88
|
-
},
|
|
89
|
-
"wallet-setup": {
|
|
90
|
-
"action": "metamask.wallet.setup",
|
|
91
|
-
"next": "wallet-unlock",
|
|
92
|
-
"intent": "Verify wallet setup is ready"
|
|
93
|
-
},
|
|
94
|
-
"wallet-unlock": {
|
|
95
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
96
|
-
"next": "wallet-read-state",
|
|
97
|
-
"intent": "Ensure the wallet is unlocked"
|
|
98
|
-
},
|
|
99
|
-
"wallet-read-state": {
|
|
100
|
-
"action": "metamask.wallet.read_state",
|
|
101
|
-
"next": "wallet-list-accounts",
|
|
102
|
-
"intent": "Read wallet state for proof"
|
|
103
|
-
},
|
|
104
|
-
"wallet-list-accounts": {
|
|
105
|
-
"action": "metamask.wallet.list_accounts",
|
|
106
|
-
"next": "select-account",
|
|
107
|
-
"intent": "List wallet accounts for proof"
|
|
108
|
-
},
|
|
109
|
-
"select-account": {
|
|
110
|
-
"action": "metamask.wallet.select_account",
|
|
111
|
-
"address": "0x8dc623e964475d4d669da601fd15ea9125469003",
|
|
112
|
-
"next": "app-navigate-wallet",
|
|
113
|
-
"intent": "Select the validation account"
|
|
114
|
-
},
|
|
115
|
-
"app-navigate-wallet": {
|
|
116
|
-
"action": "ui.navigate",
|
|
117
|
-
"next": "ui-wait-wallet",
|
|
118
|
-
"intent": "Show the wallet home surface",
|
|
119
|
-
"route": "WalletView"
|
|
120
|
-
},
|
|
121
|
-
"ui-wait-wallet": {
|
|
122
|
-
"action": "ui.wait_for",
|
|
123
|
-
"test_id": "wallet-screen",
|
|
124
|
-
"expected": "present",
|
|
125
|
-
"next": "ui-press",
|
|
126
|
-
"intent": "Confirm the wallet surface is ready"
|
|
127
|
-
},
|
|
128
|
-
"ui-press": {
|
|
129
|
-
"action": "ui.press",
|
|
130
|
-
"test_id": "wallet-account-copy-button",
|
|
131
|
-
"next": "ui-scroll",
|
|
132
|
-
"intent": "Activate the visible control"
|
|
133
|
-
},
|
|
134
|
-
"ui-scroll": {
|
|
135
|
-
"action": "ui.scroll",
|
|
136
|
-
"test_id": "wallet-screen",
|
|
137
|
-
"offset": 1000,
|
|
138
|
-
"next": "ui-scroll-into-view",
|
|
139
|
-
"intent": "Expose the next visible content"
|
|
140
|
-
},
|
|
141
|
-
"ui-screenshot-wallet": {
|
|
142
|
-
"action": "ui.screenshot",
|
|
143
|
-
"path": "screenshots/mobile-wallet-runner.action-validation.png",
|
|
144
|
-
"next": "wallet-navigate-perps",
|
|
145
|
-
"intent": "Record the visible wallet state as evidence"
|
|
146
|
-
},
|
|
147
|
-
"wallet-navigate-perps": {
|
|
148
|
-
"action": "ui.navigate",
|
|
149
|
-
"next": "perps-navigate-home",
|
|
150
|
-
"intent": "Show the Perps home surface",
|
|
151
|
-
"route": "PerpsMarketListView"
|
|
152
|
-
},
|
|
153
|
-
"perps-navigate-home": {
|
|
154
|
-
"action": "ui.navigate",
|
|
155
|
-
"next": "perps-navigate-market",
|
|
156
|
-
"intent": "Show the Perps home surface",
|
|
157
|
-
"route": "PerpsMarketListView"
|
|
158
|
-
},
|
|
159
|
-
"perps-navigate-market": {
|
|
160
|
-
"action": "ui.navigate",
|
|
161
|
-
"next": "start-state",
|
|
162
|
-
"intent": "Show the ETH Perps market details",
|
|
163
|
-
"route": "PerpsMarketDetails",
|
|
164
|
-
"params": {
|
|
165
|
-
"market": {
|
|
166
|
-
"symbol": "ETH"
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
"ensure-clean": {
|
|
171
|
-
"action": "metamask.perps.ensure_positions",
|
|
172
|
-
"market": "ETH",
|
|
173
|
-
"next": "ensure-orders-clean",
|
|
174
|
-
"state": "none",
|
|
175
|
-
"intent": "Ensure no positions are open",
|
|
176
|
-
"mode": "matching"
|
|
177
|
-
},
|
|
178
|
-
"assert-no-position": {
|
|
179
|
-
"action": "metamask.perps.assert_positions",
|
|
180
|
-
"market": "ETH",
|
|
181
|
-
"next": "read-orders-empty",
|
|
182
|
-
"state": "none",
|
|
183
|
-
"intent": "Confirm selected ETH position state is clean",
|
|
184
|
-
"mode": "matching"
|
|
185
|
-
},
|
|
186
|
-
"read-orders-empty": {
|
|
187
|
-
"action": "metamask.perps.read_orders",
|
|
188
|
-
"market": "ETH",
|
|
189
|
-
"next": "assert-no-orders",
|
|
190
|
-
"intent": "Read order state after cleanup"
|
|
191
|
-
},
|
|
192
|
-
"place-order": {
|
|
193
|
-
"action": "metamask.perps.place_order",
|
|
194
|
-
"market": "ETH",
|
|
195
|
-
"side": "long",
|
|
196
|
-
"amount": "11",
|
|
197
|
-
"leverage": 3,
|
|
198
|
-
"next": "read-positions",
|
|
199
|
-
"intent": "Place a small ETH 3x long validation order"
|
|
200
|
-
},
|
|
201
|
-
"read-positions": {
|
|
202
|
-
"action": "metamask.perps.read_positions",
|
|
203
|
-
"market": "ETH",
|
|
204
|
-
"next": "assert-position",
|
|
205
|
-
"intent": "Read ETH position after order placement"
|
|
206
|
-
},
|
|
207
|
-
"assert-position": {
|
|
208
|
-
"action": "metamask.perps.assert_positions",
|
|
209
|
-
"market": "ETH",
|
|
210
|
-
"next": "read-orders-open",
|
|
211
|
-
"state": "open",
|
|
212
|
-
"intent": "Confirm the ETH validation position opened"
|
|
213
|
-
},
|
|
214
|
-
"read-orders-open": {
|
|
215
|
-
"action": "metamask.perps.read_orders",
|
|
216
|
-
"market": "ETH",
|
|
217
|
-
"next": "close-orders",
|
|
218
|
-
"intent": "Read ETH orders before cleanup"
|
|
219
|
-
},
|
|
220
|
-
"assert-closed": {
|
|
221
|
-
"action": "metamask.perps.assert_positions",
|
|
222
|
-
"market": "ETH",
|
|
223
|
-
"next": "teardown-state",
|
|
224
|
-
"state": "none",
|
|
225
|
-
"intent": "Confirm global position cleanup completed",
|
|
226
|
-
"mode": "matching"
|
|
227
|
-
},
|
|
228
|
-
"done": {
|
|
229
|
-
"action": "end",
|
|
230
|
-
"status": "pass"
|
|
231
|
-
},
|
|
232
|
-
"ensure-orders-clean": {
|
|
233
|
-
"action": "metamask.perps.ensure_orders",
|
|
234
|
-
"market": "ETH",
|
|
235
|
-
"state": "none",
|
|
236
|
-
"next": "assert-no-position",
|
|
237
|
-
"intent": "Ensure no orders are open",
|
|
238
|
-
"mode": "matching"
|
|
239
|
-
},
|
|
240
|
-
"assert-no-orders": {
|
|
241
|
-
"action": "metamask.perps.assert_orders",
|
|
242
|
-
"market": "ETH",
|
|
243
|
-
"state": "none",
|
|
244
|
-
"next": "place-order",
|
|
245
|
-
"intent": "Confirm selected ETH order state is clean",
|
|
246
|
-
"mode": "matching"
|
|
247
|
-
},
|
|
248
|
-
"close-orders": {
|
|
249
|
-
"action": "metamask.perps.close_orders",
|
|
250
|
-
"market": "ETH",
|
|
251
|
-
"next": "close-positions",
|
|
252
|
-
"intent": "Close ETH orders created by validation"
|
|
253
|
-
},
|
|
254
|
-
"close-positions": {
|
|
255
|
-
"action": "metamask.perps.close_positions",
|
|
256
|
-
"market": "ETH",
|
|
257
|
-
"next": "assert-closed",
|
|
258
|
-
"intent": "Close the ETH validation position"
|
|
259
|
-
},
|
|
260
|
-
"start-state": {
|
|
261
|
-
"action": "metamask.perps.start_state",
|
|
262
|
-
"profile": "clean_market_testnet",
|
|
263
|
-
"market": "ETH",
|
|
264
|
-
"positions": {
|
|
265
|
-
"state": "none",
|
|
266
|
-
"mode": "matching"
|
|
267
|
-
},
|
|
268
|
-
"orders": {
|
|
269
|
-
"state": "none",
|
|
270
|
-
"mode": "matching"
|
|
271
|
-
},
|
|
272
|
-
"page": "market",
|
|
273
|
-
"next": "ensure-clean",
|
|
274
|
-
"intent": "Prepare selected-market clean testnet Perps validation state",
|
|
275
|
-
"mode": "matching"
|
|
276
|
-
},
|
|
277
|
-
"teardown-state": {
|
|
278
|
-
"action": "metamask.perps.teardown_state",
|
|
279
|
-
"market": "ETH",
|
|
280
|
-
"positions": {
|
|
281
|
-
"state": "none",
|
|
282
|
-
"mode": "matching"
|
|
283
|
-
},
|
|
284
|
-
"orders": {
|
|
285
|
-
"state": "none",
|
|
286
|
-
"mode": "matching"
|
|
287
|
-
},
|
|
288
|
-
"page": "home",
|
|
289
|
-
"next": "done",
|
|
290
|
-
"intent": "Return Perps to a selected-market clean home state",
|
|
291
|
-
"mode": "matching"
|
|
292
|
-
},
|
|
293
|
-
"app-hud": {
|
|
294
|
-
"action": "app.hud",
|
|
295
|
-
"text": "mobile action parity validation",
|
|
296
|
-
"status": "running",
|
|
297
|
-
"next": "cdp-probe",
|
|
298
|
-
"intent": "Start visible recipe progress HUD"
|
|
299
|
-
},
|
|
300
|
-
"ui-scroll-into-view": {
|
|
301
|
-
"action": "ui.scroll",
|
|
302
|
-
"test_id": "wallet-screen",
|
|
303
|
-
"scroll_into_view": true,
|
|
304
|
-
"offset": 40,
|
|
305
|
-
"next": "app-navigate-network-selector",
|
|
306
|
-
"intent": "Expose the wallet content needed for proof"
|
|
307
|
-
},
|
|
308
|
-
"app-navigate-network-selector": {
|
|
309
|
-
"action": "ui.press",
|
|
310
|
-
"test_id": "import-token-button",
|
|
311
|
-
"next": "wait-token-search-input",
|
|
312
|
-
"intent": "Open token search input"
|
|
313
|
-
},
|
|
314
|
-
"ui-set-input-network": {
|
|
315
|
-
"action": "ui.set_input",
|
|
316
|
-
"test_id": "input-search-asset",
|
|
317
|
-
"value": "ETH",
|
|
318
|
-
"next": "return-wallet-after-input",
|
|
319
|
-
"intent": "Filter the visible token list"
|
|
320
|
-
},
|
|
321
|
-
"return-wallet-after-input": {
|
|
322
|
-
"action": "ui.navigate",
|
|
323
|
-
"next": "ui-screenshot-wallet",
|
|
324
|
-
"intent": "Return to wallet after input validation",
|
|
325
|
-
"route": "WalletView"
|
|
326
|
-
},
|
|
327
|
-
"wait-token-search-input": {
|
|
328
|
-
"action": "ui.wait_for",
|
|
329
|
-
"test_id": "input-search-asset",
|
|
330
|
-
"expected": "present",
|
|
331
|
-
"next": "ui-set-input-network",
|
|
332
|
-
"intent": "Confirm token search is ready"
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "Clean Perps testnet market",
|
|
4
|
-
"description": "Converge one Perps testnet market to an unlocked wallet with no matching open position or order.",
|
|
5
|
-
"paramsSchema": {
|
|
6
|
-
"type": "object",
|
|
7
|
-
"additionalProperties": false,
|
|
8
|
-
"required": [
|
|
9
|
-
"market"
|
|
10
|
-
],
|
|
11
|
-
"properties": {
|
|
12
|
-
"market": {
|
|
13
|
-
"type": "string",
|
|
14
|
-
"default": "ETH",
|
|
15
|
-
"description": "Perps market symbol to clean."
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
"workflow": {
|
|
20
|
-
"entry": "ensure-wallet",
|
|
21
|
-
"nodes": {
|
|
22
|
-
"ensure-wallet": {
|
|
23
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
24
|
-
"intent": "Ensure the wallet is unlocked before cleaning the Perps market",
|
|
25
|
-
"next": "clean-market"
|
|
26
|
-
},
|
|
27
|
-
"clean-market": {
|
|
28
|
-
"action": "metamask.perps.start_state",
|
|
29
|
-
"intent": "Converge Perps to a clean testnet market",
|
|
30
|
-
"profile": "clean_market_testnet",
|
|
31
|
-
"network": "testnet",
|
|
32
|
-
"market": "{{params.market}}",
|
|
33
|
-
"positions": {
|
|
34
|
-
"state": "none",
|
|
35
|
-
"mode": "matching"
|
|
36
|
-
},
|
|
37
|
-
"orders": {
|
|
38
|
-
"state": "none",
|
|
39
|
-
"mode": "matching"
|
|
40
|
-
},
|
|
41
|
-
"next": "done"
|
|
42
|
-
},
|
|
43
|
-
"done": {
|
|
44
|
-
"action": "end",
|
|
45
|
-
"status": "pass"
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
|
-
"title": "MetaMask Perps lifecycle smoke",
|
|
4
|
-
"description": "Reusable Recipe v1 smoke that proves a deterministic Perps prestate, opens a small ETH testnet position, verifies it, closes it, and tears down to a clean state.",
|
|
5
|
-
"workflow": {
|
|
6
|
-
"entry": "status",
|
|
7
|
-
"nodes": {
|
|
8
|
-
"status": {
|
|
9
|
-
"action": "app.status",
|
|
10
|
-
"intent": "Read runner compatibility status",
|
|
11
|
-
"next": "fixture"
|
|
12
|
-
},
|
|
13
|
-
"fixture": {
|
|
14
|
-
"action": "metamask.wallet.fixture_status",
|
|
15
|
-
"intent": "Verify wallet fixture availability",
|
|
16
|
-
"next": "wallet-setup"
|
|
17
|
-
},
|
|
18
|
-
"wallet-setup": {
|
|
19
|
-
"action": "metamask.wallet.setup",
|
|
20
|
-
"intent": "Ensure wallet fixture setup is ready",
|
|
21
|
-
"next": "wallet-unlock"
|
|
22
|
-
},
|
|
23
|
-
"wallet-unlock": {
|
|
24
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
25
|
-
"intent": "Ensure the wallet is unlocked",
|
|
26
|
-
"next": "select-account"
|
|
27
|
-
},
|
|
28
|
-
"select-account": {
|
|
29
|
-
"action": "metamask.wallet.select_account",
|
|
30
|
-
"address": "0x8dc623e964475d4d669da601fd15ea9125469003",
|
|
31
|
-
"intent": "Select the validation account",
|
|
32
|
-
"next": "wallet-read-state"
|
|
33
|
-
},
|
|
34
|
-
"wallet-read-state": {
|
|
35
|
-
"action": "metamask.wallet.read_state",
|
|
36
|
-
"intent": "Capture wallet state proof",
|
|
37
|
-
"next": "navigate-perps"
|
|
38
|
-
},
|
|
39
|
-
"navigate-perps": {
|
|
40
|
-
"action": "ui.navigate",
|
|
41
|
-
"intent": "Show the Perps home surface",
|
|
42
|
-
"next": "navigate-market",
|
|
43
|
-
"page": "perps"
|
|
44
|
-
},
|
|
45
|
-
"navigate-market": {
|
|
46
|
-
"action": "ui.navigate",
|
|
47
|
-
"intent": "Show the ETH Perps market details",
|
|
48
|
-
"next": "start-state",
|
|
49
|
-
"page": "perps-market",
|
|
50
|
-
"market": "ETH"
|
|
51
|
-
},
|
|
52
|
-
"start-state": {
|
|
53
|
-
"action": "metamask.perps.start_state",
|
|
54
|
-
"profile": "clean_market_testnet",
|
|
55
|
-
"market": "ETH",
|
|
56
|
-
"positions": {
|
|
57
|
-
"state": "none",
|
|
58
|
-
"mode": "matching"
|
|
59
|
-
},
|
|
60
|
-
"orders": {
|
|
61
|
-
"state": "none",
|
|
62
|
-
"mode": "matching"
|
|
63
|
-
},
|
|
64
|
-
"page": "market",
|
|
65
|
-
"intent": "Prepare clean ETH testnet Perps state",
|
|
66
|
-
"next": "assert-clean-position"
|
|
67
|
-
},
|
|
68
|
-
"assert-clean-position": {
|
|
69
|
-
"action": "metamask.perps.assert_positions",
|
|
70
|
-
"market": "ETH",
|
|
71
|
-
"state": "none",
|
|
72
|
-
"intent": "Confirm ETH position state is clean",
|
|
73
|
-
"next": "assert-clean-orders"
|
|
74
|
-
},
|
|
75
|
-
"assert-clean-orders": {
|
|
76
|
-
"action": "metamask.perps.assert_orders",
|
|
77
|
-
"market": "ETH",
|
|
78
|
-
"state": "none",
|
|
79
|
-
"intent": "Confirm ETH order state is clean",
|
|
80
|
-
"next": "place-order"
|
|
81
|
-
},
|
|
82
|
-
"place-order": {
|
|
83
|
-
"action": "metamask.perps.place_order",
|
|
84
|
-
"market": "ETH",
|
|
85
|
-
"side": "long",
|
|
86
|
-
"amount": "11",
|
|
87
|
-
"leverage": 3,
|
|
88
|
-
"intent": "Open a small ETH 3x long position",
|
|
89
|
-
"next": "assert-open"
|
|
90
|
-
},
|
|
91
|
-
"assert-open": {
|
|
92
|
-
"action": "metamask.perps.assert_positions",
|
|
93
|
-
"market": "ETH",
|
|
94
|
-
"state": "open",
|
|
95
|
-
"intent": "Confirm the ETH position opened",
|
|
96
|
-
"next": "read-orders"
|
|
97
|
-
},
|
|
98
|
-
"read-orders": {
|
|
99
|
-
"action": "metamask.perps.read_orders",
|
|
100
|
-
"market": "ETH",
|
|
101
|
-
"intent": "Read ETH orders before cleanup",
|
|
102
|
-
"next": "close-orders"
|
|
103
|
-
},
|
|
104
|
-
"close-orders": {
|
|
105
|
-
"action": "metamask.perps.close_orders",
|
|
106
|
-
"market": "ETH",
|
|
107
|
-
"intent": "Close ETH orders from the lifecycle",
|
|
108
|
-
"next": "close-position"
|
|
109
|
-
},
|
|
110
|
-
"close-position": {
|
|
111
|
-
"action": "metamask.perps.close_positions",
|
|
112
|
-
"market": "ETH",
|
|
113
|
-
"intent": "Close the ETH lifecycle position",
|
|
114
|
-
"next": "assert-closed"
|
|
115
|
-
},
|
|
116
|
-
"assert-closed": {
|
|
117
|
-
"action": "metamask.perps.assert_positions",
|
|
118
|
-
"market": "ETH",
|
|
119
|
-
"state": "none",
|
|
120
|
-
"intent": "Confirm ETH position cleanup completed",
|
|
121
|
-
"next": "teardown-state"
|
|
122
|
-
},
|
|
123
|
-
"teardown-state": {
|
|
124
|
-
"action": "metamask.perps.teardown_state",
|
|
125
|
-
"market": "ETH",
|
|
126
|
-
"positions": {
|
|
127
|
-
"state": "none",
|
|
128
|
-
"mode": "matching"
|
|
129
|
-
},
|
|
130
|
-
"orders": {
|
|
131
|
-
"state": "none",
|
|
132
|
-
"mode": "matching"
|
|
133
|
-
},
|
|
134
|
-
"page": "home",
|
|
135
|
-
"intent": "Return Perps to globally clean home state",
|
|
136
|
-
"next": "done"
|
|
137
|
-
},
|
|
138
|
-
"done": {
|
|
139
|
-
"action": "end",
|
|
140
|
-
"status": "pass"
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|