@deeeed/metamask-harness 0.91.4 → 0.91.5
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 +10 -0
- package/dist/adapters/extension/actions.js +2 -1
- package/dist/adapters/mobile/surface.js +3 -4
- package/library/actions/core/perps/start_state.mjs +3 -1
- package/library/actions/extension/perps/start_state.mjs +9 -0
- package/library/manifests/extension.action-manifest.json +56 -0
- package/library/recipes/core/health/check.recipe.json +19 -4
- package/library/recipes/core/perps/smoke.recipe.json +9 -2
- package/library/recipes/core/perps/snapshot.recipe.json +9 -2
- package/library/recipes/extension/performance/navigation-memory-suite.recipe.json +26 -2
- package/library/recipes/extension/perps/smoke.recipe.json +26 -2
- package/library/recipes/mobile/perps/smoke.recipe.json +26 -2
- package/library/recipes/shared/perps/release-market-details.recipe.json +20 -2
- package/library/recipes/shared/perps/release-market-search.recipe.json +20 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.91.5 - 2026-10-13
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Bundled Perps journeys establish and verify their configurable network before proof, defaulting to testnet. Mainnet requires an explicit recipe parameter and retains its policy guards. Read-only observation subrecipes preserve their caller's state.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Restore Mobile `stop` success after owned Metro/helper cleanup. Simulator power and resource retention follow the slot lifecycle; a running simulator does not make dev-server cleanup fail.
|
|
14
|
+
|
|
5
15
|
## 0.91.4 - 2026-10-13
|
|
6
16
|
|
|
7
17
|
### Fixed
|
|
@@ -21,7 +21,8 @@ const extensionActions = {
|
|
|
21
21
|
"metamask.perps.assert_visible_consistency",
|
|
22
22
|
"metamask.settings.set_basic_functionality",
|
|
23
23
|
"metamask.perps.read_snapshot",
|
|
24
|
-
"metamask.perps.set_network"
|
|
24
|
+
"metamask.perps.set_network",
|
|
25
|
+
"metamask.perps.start_state"
|
|
25
26
|
],
|
|
26
27
|
liveNeedsCdpPort: true,
|
|
27
28
|
cdpTarget: { transport: "chrome-extension-cdp", probePath: "json/version" },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { recipeRuntimePath, shellQuote, writeInteractiveProgress } from "@farmslot/recipe-cli/harness";
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { defineAdapter } from "@farmslot/adapter-sdk";
|
|
@@ -60,10 +60,9 @@ const mobileSurface = defineAdapter({
|
|
|
60
60
|
const args = ["--target", target];
|
|
61
61
|
if (process.env.WATCHER_PORT) args.push("--port", process.env.WATCHER_PORT);
|
|
62
62
|
const result = spawnSync("bash", [leaf, ...args], { encoding: "utf8" });
|
|
63
|
-
const
|
|
64
|
-
const status = metroStatus === 0 ? EXIT.runtime : metroStatus;
|
|
63
|
+
const status = result.status ?? 1;
|
|
65
64
|
const output = `${result.stdout ?? ""}${result.stderr ?? ""}`.trim();
|
|
66
|
-
const summary =
|
|
65
|
+
const summary = status === 0 ? `stopped Metro dev server for ${target}` : `failed to stop Metro for ${target}`;
|
|
67
66
|
return { kind: "stopped", status, summary, output };
|
|
68
67
|
}
|
|
69
68
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Prepare selected testnet baselines before proof, handling positions before orders.
|
|
2
2
|
// Omitted domains are skipped; this headless action performs no UI navigation.
|
|
3
3
|
|
|
4
|
-
import { isDirectRun, resolveNetwork, runAdapter } from './_controller.mjs';
|
|
4
|
+
import { getCoreController, isDirectRun, resolveNetwork, runAdapter } from './_controller.mjs';
|
|
5
5
|
import { ensureOrders } from './ensure_orders.mjs';
|
|
6
6
|
import { ensurePositions } from './ensure_positions.mjs';
|
|
7
7
|
|
|
@@ -54,11 +54,13 @@ export async function startState(input) {
|
|
|
54
54
|
const network = resolveNetwork(input);
|
|
55
55
|
const positionsBaseline = normalizeBaseline(input.node?.positions, 'positions');
|
|
56
56
|
const ordersBaseline = normalizeBaseline(input.node?.orders, 'orders');
|
|
57
|
+
const { controller } = await getCoreController(input);
|
|
57
58
|
|
|
58
59
|
const result = {
|
|
59
60
|
action: input.action,
|
|
60
61
|
source: 'perps-controller-composite',
|
|
61
62
|
network,
|
|
63
|
+
isTestnet: controller.state.isTestnet,
|
|
62
64
|
profile: input.node?.profile ?? null,
|
|
63
65
|
converged: { positions: null, orders: null },
|
|
64
66
|
proofPath: 'perps-controller-start_state',
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Establish the requested Perps network before proof through the existing guarded toggle.
|
|
2
|
+
import { runAdapter } from '../platform/cdp.mjs';
|
|
3
|
+
import { setNetwork } from './perps.mjs';
|
|
4
|
+
|
|
5
|
+
runAdapter(async (input) => ({
|
|
6
|
+
action: input.action,
|
|
7
|
+
phase: 'start_state',
|
|
8
|
+
network: await setNetwork(input),
|
|
9
|
+
}));
|
|
@@ -5167,6 +5167,62 @@
|
|
|
5167
5167
|
"app-mutation"
|
|
5168
5168
|
]
|
|
5169
5169
|
},
|
|
5170
|
+
"metamask.perps.start_state": {
|
|
5171
|
+
"description": "Apply the requested Perps network through the supported product toggle and verify readback before proof. Explicit false positions/orders preserve trading state. Mainnet keeps the existing opt-in, order guard and run cleanup policy.",
|
|
5172
|
+
"schema": {
|
|
5173
|
+
"type": "object",
|
|
5174
|
+
"properties": {
|
|
5175
|
+
"network": {
|
|
5176
|
+
"type": "string",
|
|
5177
|
+
"enum": [
|
|
5178
|
+
"testnet",
|
|
5179
|
+
"mainnet"
|
|
5180
|
+
]
|
|
5181
|
+
},
|
|
5182
|
+
"page": {
|
|
5183
|
+
"type": "boolean",
|
|
5184
|
+
"enum": [
|
|
5185
|
+
false
|
|
5186
|
+
],
|
|
5187
|
+
"description": "No additional route setup; network selection uses the Perps home surface."
|
|
5188
|
+
},
|
|
5189
|
+
"positions": {
|
|
5190
|
+
"type": "boolean",
|
|
5191
|
+
"enum": [
|
|
5192
|
+
false
|
|
5193
|
+
]
|
|
5194
|
+
},
|
|
5195
|
+
"orders": {
|
|
5196
|
+
"type": "boolean",
|
|
5197
|
+
"enum": [
|
|
5198
|
+
false
|
|
5199
|
+
]
|
|
5200
|
+
},
|
|
5201
|
+
"timeout_ms": {
|
|
5202
|
+
"type": "number",
|
|
5203
|
+
"minimum": 1
|
|
5204
|
+
}
|
|
5205
|
+
},
|
|
5206
|
+
"additionalProperties": false,
|
|
5207
|
+
"required": [
|
|
5208
|
+
"network"
|
|
5209
|
+
]
|
|
5210
|
+
},
|
|
5211
|
+
"examples": [
|
|
5212
|
+
{
|
|
5213
|
+
"action": "metamask.perps.start_state",
|
|
5214
|
+
"network": "testnet",
|
|
5215
|
+
"page": false,
|
|
5216
|
+
"positions": false,
|
|
5217
|
+
"orders": false,
|
|
5218
|
+
"intent": "Establish and verify testnet before Perps proof without clearing trading state",
|
|
5219
|
+
"next": "done"
|
|
5220
|
+
}
|
|
5221
|
+
],
|
|
5222
|
+
"execution_capabilities": [
|
|
5223
|
+
"app-mutation"
|
|
5224
|
+
]
|
|
5225
|
+
},
|
|
5170
5226
|
"metamask.perps.set_network": {
|
|
5171
5227
|
"description": "Switch the Extension's Perps network through the background perpsToggleTestnet request and wait until the app reports it. The fixture loads testnet; network=mainnet is the explicit opt-in and lasts one run: the run's teardown switches back to testnet (success, failure or abort).",
|
|
5172
5228
|
"schema": {
|
|
@@ -1,28 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "MetaMask Core health check",
|
|
4
|
-
"description": "Read-only check to run before ticket work: the headless Perps controller imports and answers one bounded HyperLiquid
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Read-only check to run before ticket work: the headless Perps controller imports and answers one bounded HyperLiquid account read on the requested network. A failed precondition stops at the node named after its error; that node's intent gives the recovery. Places no orders.",
|
|
5
5
|
"paramsSchema": {
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"properties": {
|
|
9
|
+
"network": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": [
|
|
12
|
+
"testnet",
|
|
13
|
+
"mainnet"
|
|
14
|
+
],
|
|
15
|
+
"default": "testnet",
|
|
16
|
+
"description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
|
|
17
|
+
},
|
|
9
18
|
"timeout_ms": { "type": "integer", "minimum": 1000, "default": 60000 }
|
|
10
19
|
}
|
|
11
20
|
},
|
|
12
21
|
"workflow": {
|
|
13
22
|
"entry": "status",
|
|
14
23
|
"nodes": {
|
|
24
|
+
"NETWORK_SETUP_FAILED": {
|
|
25
|
+
"action": "metamask.perps.start_state",
|
|
26
|
+
"network": "{{params.network}}",
|
|
27
|
+
"next": "CONTROLLER_UNAVAILABLE",
|
|
28
|
+
"intent": "NETWORK_SETUP_FAILED unless the controller initializes in the requested network before proof. Recovery: mm-harness doctor --fix"
|
|
29
|
+
},
|
|
15
30
|
"status": {
|
|
16
31
|
"action": "app.status",
|
|
17
|
-
"next": "
|
|
32
|
+
"next": "NETWORK_SETUP_FAILED",
|
|
18
33
|
"intent": "Record the resolved Core checkout"
|
|
19
34
|
},
|
|
20
35
|
"CONTROLLER_UNAVAILABLE": {
|
|
21
36
|
"action": "metamask.perps.read_account",
|
|
22
|
-
"network": "
|
|
37
|
+
"network": "{{params.network}}",
|
|
23
38
|
"timeout_ms": "{{params.timeout_ms}}",
|
|
24
39
|
"next": "ACCOUNT_READ_FAILED",
|
|
25
|
-
"intent": "CONTROLLER_UNAVAILABLE unless the Perps controller imports and reads the
|
|
40
|
+
"intent": "CONTROLLER_UNAVAILABLE unless the Perps controller imports and reads the requested-network account in time. Recovery: mm-harness doctor --fix"
|
|
26
41
|
},
|
|
27
42
|
"ACCOUNT_READ_FAILED": {
|
|
28
43
|
"action": "assert_output",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "MetaMask core Perps smoke",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Perps domain smoke for the headless core adapter: instantiates the Perps controller and reads live positions, orders, and account state.",
|
|
5
5
|
"paramsSchema": {
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
@@ -22,9 +22,16 @@
|
|
|
22
22
|
"workflow": {
|
|
23
23
|
"entry": "status",
|
|
24
24
|
"nodes": {
|
|
25
|
+
"start-state": {
|
|
26
|
+
"action": "metamask.perps.start_state",
|
|
27
|
+
"network": "{{params.network}}",
|
|
28
|
+
"account": "{{params.account}}",
|
|
29
|
+
"next": "read-positions",
|
|
30
|
+
"intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
|
|
31
|
+
},
|
|
25
32
|
"status": {
|
|
26
33
|
"action": "app.status",
|
|
27
|
-
"next": "
|
|
34
|
+
"next": "start-state",
|
|
28
35
|
"intent": "Resolve the core checkout and report headless compatibility mode"
|
|
29
36
|
},
|
|
30
37
|
"read-positions": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "MetaMask core Perps snapshots",
|
|
4
|
-
"description": "Reads global market and account snapshots through the public PerpsController API used by wallet clients. Configure CORE_PERPS_TERMINAL_GLOBAL_SNAPSHOT_URL to exercise a Terminal schema-v2 endpoint.",
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Reads global market and account snapshots through the public PerpsController API used by wallet clients. Configure CORE_PERPS_TERMINAL_GLOBAL_SNAPSHOT_URL to exercise a Terminal schema-v2 endpoint.",
|
|
5
5
|
"paramsSchema": {
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
@@ -28,9 +28,16 @@
|
|
|
28
28
|
"workflow": {
|
|
29
29
|
"entry": "status",
|
|
30
30
|
"nodes": {
|
|
31
|
+
"start-state": {
|
|
32
|
+
"action": "metamask.perps.start_state",
|
|
33
|
+
"network": "{{params.network}}",
|
|
34
|
+
"account": "{{params.account}}",
|
|
35
|
+
"next": "read_snapshot",
|
|
36
|
+
"intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
|
|
37
|
+
},
|
|
31
38
|
"status": {
|
|
32
39
|
"action": "app.status",
|
|
33
|
-
"next": "
|
|
40
|
+
"next": "start-state",
|
|
34
41
|
"intent": "Resolve the Core checkout and report headless compatibility"
|
|
35
42
|
},
|
|
36
43
|
"read_snapshot": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "Extension multi-screen retained-memory suite",
|
|
4
|
-
"description": "Broad maintainer suite: retain all eight screen slopes, detached-DOM checks, and equal-duration idle attribution. Use performance.navigation-memory for one screen. Verify these reference screen markers against the tested build.",
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Broad maintainer suite: retain all eight screen slopes, detached-DOM checks, and equal-duration idle attribution. Use performance.navigation-memory for one screen. Verify these reference screen markers against the tested build.",
|
|
5
5
|
"proofTargets": [
|
|
6
6
|
{
|
|
7
7
|
"id": "screen-slopes",
|
|
@@ -16,9 +16,33 @@
|
|
|
16
16
|
"claim": "Navigation-attributable listener growth remains within its declared bound after subtracting an equal-duration idle control."
|
|
17
17
|
}
|
|
18
18
|
],
|
|
19
|
+
"paramsSchema": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"properties": {
|
|
23
|
+
"network": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"enum": [
|
|
26
|
+
"testnet",
|
|
27
|
+
"mainnet"
|
|
28
|
+
],
|
|
29
|
+
"default": "testnet",
|
|
30
|
+
"description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
19
34
|
"workflow": {
|
|
20
35
|
"entry": "require-cdp",
|
|
21
36
|
"nodes": {
|
|
37
|
+
"start-state": {
|
|
38
|
+
"action": "metamask.perps.start_state",
|
|
39
|
+
"network": "{{params.network}}",
|
|
40
|
+
"page": false,
|
|
41
|
+
"positions": false,
|
|
42
|
+
"orders": false,
|
|
43
|
+
"next": "market-detail",
|
|
44
|
+
"intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
|
|
45
|
+
},
|
|
22
46
|
"require-cdp": {
|
|
23
47
|
"action": "cdp.target",
|
|
24
48
|
"required": true,
|
|
@@ -29,7 +53,7 @@
|
|
|
29
53
|
"ensure-unlocked": {
|
|
30
54
|
"action": "metamask.wallet.ensure_unlocked",
|
|
31
55
|
"intent": "Ensure the representative screens are reachable from an unlocked wallet.",
|
|
32
|
-
"next": "
|
|
56
|
+
"next": "start-state"
|
|
33
57
|
},
|
|
34
58
|
"market-detail": {
|
|
35
59
|
"action": "call",
|
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "MetaMask Extension Perps smoke",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Extension Perps smoke: verifies CDP, unlocks if needed, opens Perps, proves visible home with market data, and reads positions/orders. Requires approved wallet setup and completed onboarding gates; a visible tutorial is setup, not passing smoke.",
|
|
5
|
+
"paramsSchema": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"network": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": [
|
|
12
|
+
"testnet",
|
|
13
|
+
"mainnet"
|
|
14
|
+
],
|
|
15
|
+
"default": "testnet",
|
|
16
|
+
"description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
5
20
|
"workflow": {
|
|
6
21
|
"entry": "status",
|
|
7
22
|
"nodes": {
|
|
23
|
+
"start-state": {
|
|
24
|
+
"action": "metamask.perps.start_state",
|
|
25
|
+
"network": "{{params.network}}",
|
|
26
|
+
"page": false,
|
|
27
|
+
"positions": false,
|
|
28
|
+
"orders": false,
|
|
29
|
+
"next": "read-home",
|
|
30
|
+
"intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
|
|
31
|
+
},
|
|
8
32
|
"status": {
|
|
9
33
|
"action": "app.status",
|
|
10
34
|
"next": "cdp",
|
|
@@ -26,7 +50,7 @@
|
|
|
26
50
|
"open-perps": {
|
|
27
51
|
"action": "ui.navigate",
|
|
28
52
|
"page": "perps",
|
|
29
|
-
"next": "
|
|
53
|
+
"next": "start-state",
|
|
30
54
|
"intent": "Show the Perps home surface"
|
|
31
55
|
},
|
|
32
56
|
"read-positions": {
|
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "MetaMask Mobile Perps smoke",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Perps domain smoke for debug-enabled MetaMask Mobile: unlock if needed, open Perps, assert live positions and orders, and retain a HUD screenshot. Teardown observes wallet home. Does not close positions or stop the app.",
|
|
5
|
+
"paramsSchema": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"network": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": [
|
|
12
|
+
"testnet",
|
|
13
|
+
"mainnet"
|
|
14
|
+
],
|
|
15
|
+
"default": "testnet",
|
|
16
|
+
"description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
5
20
|
"workflow": {
|
|
6
21
|
"entry": "status",
|
|
7
22
|
"nodes": {
|
|
23
|
+
"start-state": {
|
|
24
|
+
"action": "metamask.perps.start_state",
|
|
25
|
+
"network": "{{params.network}}",
|
|
26
|
+
"page": false,
|
|
27
|
+
"positions": false,
|
|
28
|
+
"orders": false,
|
|
29
|
+
"next": "observe-perps",
|
|
30
|
+
"intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
|
|
31
|
+
},
|
|
8
32
|
"status": {
|
|
9
33
|
"action": "app.status",
|
|
10
34
|
"next": "cdp",
|
|
@@ -27,7 +51,7 @@
|
|
|
27
51
|
"open-perps": {
|
|
28
52
|
"action": "ui.navigate",
|
|
29
53
|
"page": "perps",
|
|
30
|
-
"next": "
|
|
54
|
+
"next": "start-state",
|
|
31
55
|
"intent": "Show the Perps market list"
|
|
32
56
|
},
|
|
33
57
|
"observe-perps": {
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "Perps release market details",
|
|
4
|
-
"description": "Opens one live Perps market through visible UI and proves its header price, change, statistics, and Long/Short controls; it does not assert chart data. Requires no existing position in the chosen market: held markets show Modify/Close instead. Verify the fixture with a supported read before selecting market; never close a position to satisfy this recipe.",
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Opens one live Perps market through visible UI and proves its header price, change, statistics, and Long/Short controls; it does not assert chart data. Requires no existing position in the chosen market: held markets show Modify/Close instead. Verify the fixture with a supported read before selecting market; never close a position to satisfy this recipe.",
|
|
5
5
|
"paramsSchema": {
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": ["market"],
|
|
9
9
|
"properties": {
|
|
10
|
+
"network": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"enum": [
|
|
13
|
+
"testnet",
|
|
14
|
+
"mainnet"
|
|
15
|
+
],
|
|
16
|
+
"default": "testnet",
|
|
17
|
+
"description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
|
|
18
|
+
},
|
|
10
19
|
"market": {
|
|
11
20
|
"type": "string",
|
|
12
21
|
"description": "Perps market symbol with no existing position, so Long/Short controls are expected."
|
|
@@ -21,12 +30,21 @@
|
|
|
21
30
|
"workflow": {
|
|
22
31
|
"entry": "open-perps",
|
|
23
32
|
"nodes": {
|
|
33
|
+
"start-state": {
|
|
34
|
+
"action": "metamask.perps.start_state",
|
|
35
|
+
"network": "{{params.network}}",
|
|
36
|
+
"page": false,
|
|
37
|
+
"positions": false,
|
|
38
|
+
"orders": false,
|
|
39
|
+
"next": "open-market-list",
|
|
40
|
+
"intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
|
|
41
|
+
},
|
|
24
42
|
"open-perps": {
|
|
25
43
|
"action": "ui.navigate",
|
|
26
44
|
"page": "perps",
|
|
27
45
|
"timeout_ms": "{{params.timeout_ms}}",
|
|
28
46
|
"intent": "Reset transient market-list state on the Perps home surface",
|
|
29
|
-
"next": "
|
|
47
|
+
"next": "start-state"
|
|
30
48
|
},
|
|
31
49
|
"open-market-list": {
|
|
32
50
|
"action": "ui.navigate",
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
|
|
3
3
|
"title": "Perps release market search",
|
|
4
|
-
"description": "Searches the live Perps market list by product name through trusted keyboard input and proves the filtered result set without development-only bridges.",
|
|
4
|
+
"description": "Sets and verifies the configured Perps network, default testnet, before proof. Searches the live Perps market list by product name through trusted keyboard input and proves the filtered result set without development-only bridges.",
|
|
5
5
|
"paramsSchema": {
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"properties": {
|
|
9
|
+
"network": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": [
|
|
12
|
+
"testnet",
|
|
13
|
+
"mainnet"
|
|
14
|
+
],
|
|
15
|
+
"default": "testnet",
|
|
16
|
+
"description": "Perps setup network before proof. Mainnet requires this explicit parameter and the existing funding/cleanup policy."
|
|
17
|
+
},
|
|
9
18
|
"query": {
|
|
10
19
|
"type": "string",
|
|
11
20
|
"default": "Bitcoin"
|
|
@@ -29,11 +38,20 @@
|
|
|
29
38
|
"workflow": {
|
|
30
39
|
"entry": "open-perps",
|
|
31
40
|
"nodes": {
|
|
41
|
+
"start-state": {
|
|
42
|
+
"action": "metamask.perps.start_state",
|
|
43
|
+
"network": "{{params.network}}",
|
|
44
|
+
"page": false,
|
|
45
|
+
"positions": false,
|
|
46
|
+
"orders": false,
|
|
47
|
+
"next": "open-market-list",
|
|
48
|
+
"intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
|
|
49
|
+
},
|
|
32
50
|
"open-perps": {
|
|
33
51
|
"action": "ui.navigate",
|
|
34
52
|
"page": "perps",
|
|
35
53
|
"intent": "Reset transient market-list state on the Perps home surface",
|
|
36
|
-
"next": "
|
|
54
|
+
"next": "start-state"
|
|
37
55
|
},
|
|
38
56
|
"open-market-list": {
|
|
39
57
|
"action": "ui.navigate",
|