openclaw-arcade-plugin 0.2.40 → 0.2.42
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/dist/index.js +143 -148
- package/dist/index.js.map +2 -2
- package/openclaw.plugin.json +7 -7
- package/package.json +6 -2
package/dist/index.js
CHANGED
|
@@ -2,145 +2,149 @@
|
|
|
2
2
|
import debug from "debug";
|
|
3
3
|
var log = debug("openclaw:plugin:arcade");
|
|
4
4
|
var isInitialized = false;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
5
|
+
var index_default = {
|
|
6
|
+
id: "openclaw-arcade-plugin",
|
|
7
|
+
name: "BSV Arcade Broadcaster",
|
|
8
|
+
description: "Submit and track BSV transactions with full lifecycle visibility",
|
|
9
|
+
async register(api) {
|
|
10
|
+
const version = "0.2.42";
|
|
11
|
+
const config = api.pluginConfig || {};
|
|
12
|
+
const net = config.network || "mainnet";
|
|
13
|
+
const defaultUrl = net === "testnet" ? "https://testnet.arc.gorillapool.io" : "https://arc.gorillapool.io";
|
|
14
|
+
const url = (config.arcadeUrl || defaultUrl).replace(/\/$/, "");
|
|
15
|
+
if (isInitialized) return;
|
|
16
|
+
isInitialized = true;
|
|
17
|
+
api.logger.info(`[arcade] Initializing Arcade Plugin v${version}`);
|
|
18
|
+
api.registerOnboarding({
|
|
19
|
+
id: "arcade-setup",
|
|
20
|
+
title: "Arcade Setup",
|
|
21
|
+
description: "Configuring transaction broadcasting and lifecycle tracking",
|
|
22
|
+
handler: async () => {
|
|
23
|
+
return { success: true, message: "Arcade broadcaster ready." };
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
api.registerTool({
|
|
27
|
+
name: "arcade",
|
|
28
|
+
description: "Submit and track BSV transactions with full lifecycle visibility",
|
|
29
|
+
parameters: {
|
|
30
|
+
type: "object",
|
|
31
|
+
properties: {
|
|
32
|
+
action: {
|
|
33
|
+
type: "string",
|
|
34
|
+
enum: ["broadcast", "status", "proof", "config"],
|
|
35
|
+
description: "Action to perform"
|
|
36
|
+
},
|
|
37
|
+
txhex: {
|
|
38
|
+
type: "string",
|
|
39
|
+
description: "Hex-encoded raw transaction to broadcast"
|
|
40
|
+
},
|
|
41
|
+
txid: {
|
|
42
|
+
type: "string",
|
|
43
|
+
description: "Transaction ID to track or fetch proof for"
|
|
44
|
+
}
|
|
36
45
|
},
|
|
37
|
-
|
|
38
|
-
type: "string",
|
|
39
|
-
description: "Transaction ID to track or fetch proof for"
|
|
40
|
-
}
|
|
46
|
+
required: ["action"]
|
|
41
47
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
log("Broadcast successful, TXID: %s", bData.txid);
|
|
63
|
-
return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}
|
|
48
|
+
async execute(_id, params) {
|
|
49
|
+
log("Executing tool action: %s with params: %O", params.action, params);
|
|
50
|
+
try {
|
|
51
|
+
const { action, txhex, txid } = params;
|
|
52
|
+
switch (action) {
|
|
53
|
+
case "broadcast":
|
|
54
|
+
if (!txhex) throw new Error("txhex is required for broadcast");
|
|
55
|
+
log("Broadcasting transaction: %s...", txhex.slice(0, 64));
|
|
56
|
+
const bResp = await fetch(`${url}/v1/tx`, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers: { "Content-Type": "application/json" },
|
|
59
|
+
body: JSON.stringify({ rawTx: txhex })
|
|
60
|
+
});
|
|
61
|
+
const bData = await bResp.json();
|
|
62
|
+
if (!bResp.ok) {
|
|
63
|
+
log("Broadcast failed: %O", bData);
|
|
64
|
+
throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);
|
|
65
|
+
}
|
|
66
|
+
log("Broadcast successful, TXID: %s", bData.txid);
|
|
67
|
+
return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}
|
|
64
68
|
Status: ${bData.txStatus}` }] };
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
case "status":
|
|
70
|
+
if (!txid) throw new Error("txid is required for status check");
|
|
71
|
+
log("Checking status for TXID: %s", txid);
|
|
72
|
+
const sResp = await fetch(`${url}/v1/tx/${txid}`);
|
|
73
|
+
const sData = await sResp.json();
|
|
74
|
+
if (!sResp.ok) {
|
|
75
|
+
log("Status check failed: %O", sData);
|
|
76
|
+
throw new Error(`Status check failed: ${JSON.stringify(sData)}`);
|
|
77
|
+
}
|
|
78
|
+
log("Status: %s, Block: %s", sData.txStatus, sData.blockHeight);
|
|
79
|
+
return { content: [{ type: "text", text: `Transaction ${txid}:
|
|
76
80
|
Status: ${sData.txStatus}
|
|
77
81
|
Block: ${sData.blockHeight || "Pending"}` }] };
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
82
|
+
case "proof":
|
|
83
|
+
if (!txid) throw new Error("txid is required for proof retrieval");
|
|
84
|
+
log("Fetching proof for TXID: %s", txid);
|
|
85
|
+
const pResp = await fetch(`${url}/v1/tx/${txid}/proof`);
|
|
86
|
+
if (!pResp.ok) {
|
|
87
|
+
log("Proof retrieval failed: %d", pResp.status);
|
|
88
|
+
throw new Error(`Proof retrieval failed: ${pResp.status}`);
|
|
89
|
+
}
|
|
90
|
+
const pData = await pResp.arrayBuffer();
|
|
91
|
+
const base64Proof = Buffer.from(pData).toString("base64");
|
|
92
|
+
log("Proof retrieved, length: %d bytes", pData.byteLength);
|
|
93
|
+
return { content: [{ type: "text", text: `Merkle Proof (Base64): ${base64Proof}` }] };
|
|
94
|
+
case "config":
|
|
95
|
+
return { content: [{ type: "text", text: `Arcade Configuration:
|
|
92
96
|
URL: ${url}
|
|
93
97
|
Network: ${net}` }] };
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
default:
|
|
99
|
+
throw new Error(`Unknown action: ${action}`);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
return {
|
|
103
|
+
content: [{
|
|
104
|
+
type: "text",
|
|
105
|
+
text: `Error: ${error.message || String(error)}`
|
|
106
|
+
}]
|
|
107
|
+
};
|
|
96
108
|
}
|
|
97
|
-
} catch (error) {
|
|
98
|
-
return {
|
|
99
|
-
content: [{
|
|
100
|
-
type: "text",
|
|
101
|
-
text: `Error: ${error.message || String(error)}`
|
|
102
|
-
}]
|
|
103
|
-
};
|
|
104
109
|
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return { text: `\u{1F6E1}\uFE0F **Arcade Help**
|
|
110
|
+
});
|
|
111
|
+
api.registerCommand({
|
|
112
|
+
name: "arcade",
|
|
113
|
+
description: "BSV transaction tracking commands",
|
|
114
|
+
acceptsArgs: true,
|
|
115
|
+
handler: async (ctx) => {
|
|
116
|
+
try {
|
|
117
|
+
api.logger?.info?.(`[openclaw-arcade] Command received with args: ${JSON.stringify(ctx.args)} (type: ${typeof ctx.args})`);
|
|
118
|
+
const args = Array.isArray(ctx.args) ? ctx.args : typeof ctx.args === "string" ? ctx.args.split(" ").filter(Boolean) : [];
|
|
119
|
+
const action = args[0] || "config";
|
|
120
|
+
const params = { action };
|
|
121
|
+
if (action === "help") {
|
|
122
|
+
return { text: `\u{1F6E1}\uFE0F **Arcade Help**
|
|
119
123
|
|
|
120
124
|
**Subcommands**:
|
|
121
125
|
- \`status <txid>\`: Check broadcast status
|
|
122
126
|
- \`broadcast <hex>\`: Send raw transaction
|
|
123
127
|
- \`proof <txid>\`: Fetch Merkle Proof
|
|
124
128
|
- \`config\`: Show active URL` };
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
}
|
|
130
|
+
if (action === "status" && args[1]) params.txid = args[1];
|
|
131
|
+
if (action === "broadcast" && args[1]) params.txhex = args[1];
|
|
132
|
+
if (action === "status" && params.txid) {
|
|
133
|
+
const res = await fetch(`${url}/v1/tx/${params.txid}`);
|
|
134
|
+
const data = await res.json();
|
|
135
|
+
return { text: `\u{1F6E1}\uFE0F **Transaction Status**
|
|
132
136
|
**TXID**: ${params.txid}
|
|
133
137
|
**Status**: ${data.txStatus || "Unknown"}` };
|
|
138
|
+
}
|
|
139
|
+
return { text: `Command '${action}' executed.` };
|
|
140
|
+
} catch (error) {
|
|
141
|
+
return { text: `\u274C Arcade Error: ${error.message}` };
|
|
134
142
|
}
|
|
135
|
-
return { text: `Command '${action}' executed.` };
|
|
136
|
-
} catch (error) {
|
|
137
|
-
return { text: `\u274C Arcade Error: ${error.message}` };
|
|
138
143
|
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
arc.addHelpText("after", `
|
|
144
|
+
});
|
|
145
|
+
api.registerCli(({ program }) => {
|
|
146
|
+
const arc = program.command("arcade").description("BSV transaction tracking commands");
|
|
147
|
+
arc.addHelpText("after", `
|
|
144
148
|
\u{1F3AE} Arcade Examples:
|
|
145
149
|
$ openclaw arcade status <txid> # Check status of a broadcasted TX
|
|
146
150
|
$ openclaw arcade broadcast <hex> # Send raw transaction to the network
|
|
@@ -149,36 +153,27 @@ Network: ${net}` }] };
|
|
|
149
153
|
\u{1F4A1} Tip: Arcade provides real-time lifecycle tracking for your transactions,
|
|
150
154
|
from mempool acceptance to block confirmation.
|
|
151
155
|
`);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
});
|
|
157
|
-
arc.command("broadcast <hex>").description("Send raw transaction").action(async (txhex) => {
|
|
158
|
-
const res = await fetch(`${url}/v1/tx`, {
|
|
159
|
-
method: "POST",
|
|
160
|
-
headers: { "Content-Type": "application/json" },
|
|
161
|
-
body: JSON.stringify({ rawTx: txhex })
|
|
156
|
+
arc.command("status <txid>").description("Check broadcast status").action(async (txid) => {
|
|
157
|
+
const res = await fetch(`${url}/v1/tx/${txid}`);
|
|
158
|
+
const data = await res.json();
|
|
159
|
+
console.log(JSON.stringify(data, null, 2));
|
|
162
160
|
});
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
161
|
+
arc.command("broadcast <hex>").description("Send raw transaction").action(async (txhex) => {
|
|
162
|
+
const res = await fetch(`${url}/v1/tx`, {
|
|
163
|
+
method: "POST",
|
|
164
|
+
headers: { "Content-Type": "application/json" },
|
|
165
|
+
body: JSON.stringify({ rawTx: txhex })
|
|
166
|
+
});
|
|
167
|
+
const data = await res.json();
|
|
168
|
+
console.log(JSON.stringify(data, null, 2));
|
|
169
|
+
});
|
|
170
|
+
arc.command("config").description("Show current Arcade configuration").action(() => {
|
|
171
|
+
console.log(JSON.stringify({ arcadeUrl: url, network: net }, null, 2));
|
|
172
|
+
});
|
|
173
|
+
}, { commands: ["arcade"] });
|
|
174
|
+
}
|
|
177
175
|
};
|
|
178
|
-
var index_default = register;
|
|
179
176
|
export {
|
|
180
|
-
index_default as default
|
|
181
|
-
plugin,
|
|
182
|
-
register
|
|
177
|
+
index_default as default
|
|
183
178
|
};
|
|
184
179
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../index.ts"],
|
|
4
|
-
"sourcesContent": ["import path from \"node:path\";\nimport os from \"node:os\";\nimport debug from 'debug';\n\nconst log = debug('openclaw:plugin:arcade');\n\nlet isInitialized = false;\n\n
|
|
5
|
-
"mappings": ";AAEA,OAAO,WAAW;AAElB,IAAM,MAAM,MAAM,wBAAwB;AAE1C,IAAI,gBAAgB;
|
|
4
|
+
"sourcesContent": ["import path from \"node:path\";\nimport os from \"node:os\";\nimport debug from 'debug';\n\nconst log = debug('openclaw:plugin:arcade');\n\nlet isInitialized = false;\n\n/**\n * OpenClaw Arcade Plugin\n * Transaction broadcasting and lifecycle tracking via BSV Arcade.\n */\nexport default {\n id: \"openclaw-arcade-plugin\",\n name: \"BSV Arcade Broadcaster\",\n description: \"Submit and track BSV transactions with full lifecycle visibility\",\n async register(api: any) {\n const version = \"0.2.42\";\n \n // RESOLUTION LOGIC AT THE TOP\n const config = api.pluginConfig || {};\n const net = config.network || 'mainnet';\n const defaultUrl = net === 'testnet' \n ? 'https://testnet.arc.gorillapool.io' \n : 'https://arc.gorillapool.io';\n const url = (config.arcadeUrl || defaultUrl).replace(/\\/$/, '');\n\n if (isInitialized) return;\n isInitialized = true;\n\n api.logger.info(`[arcade] Initializing Arcade Plugin v${version}`);\n\n // Onboarding\n api.registerOnboarding({\n id: \"arcade-setup\",\n title: \"Arcade Setup\",\n description: \"Configuring transaction broadcasting and lifecycle tracking\",\n handler: async () => {\n // Arcade is a stateless broadcaster, no wallet check needed.\n return { success: true, message: \"Arcade broadcaster ready.\" };\n }\n });\n \n // Tool\n api.registerTool({\n name: \"arcade\",\n description: \"Submit and track BSV transactions with full lifecycle visibility\",\n parameters: {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n enum: [\"broadcast\", \"status\", \"proof\", \"config\"],\n description: \"Action to perform\"\n },\n txhex: {\n type: \"string\",\n description: \"Hex-encoded raw transaction to broadcast\"\n },\n txid: {\n type: \"string\",\n description: \"Transaction ID to track or fetch proof for\"\n }\n },\n required: [\"action\"]\n },\n async execute(_id: string, params: any) {\n log('Executing tool action: %s with params: %O', params.action, params);\n \n try {\n const { action, txhex, txid } = params;\n\n switch (action) {\n case \"broadcast\":\n if (!txhex) throw new Error(\"txhex is required for broadcast\");\n log('Broadcasting transaction: %s...', txhex.slice(0, 64));\n const bResp = await fetch(`${url}/v1/tx`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ rawTx: txhex })\n });\n const bData: any = await bResp.json();\n if (!bResp.ok) {\n log('Broadcast failed: %O', bData);\n throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);\n }\n log('Broadcast successful, TXID: %s', bData.txid);\n return { content: [{ type: \"text\", text: `Transaction broadcasted! TXID: ${bData.txid}\\nStatus: ${bData.txStatus}` }] };\n\n case \"status\":\n if (!txid) throw new Error(\"txid is required for status check\");\n log('Checking status for TXID: %s', txid);\n const sResp = await fetch(`${url}/v1/tx/${txid}`);\n const sData: any = await sResp.json();\n if (!sResp.ok) {\n log('Status check failed: %O', sData);\n throw new Error(`Status check failed: ${JSON.stringify(sData)}`);\n }\n log('Status: %s, Block: %s', sData.txStatus, sData.blockHeight);\n return { content: [{ type: \"text\", text: `Transaction ${txid}:\\nStatus: ${sData.txStatus}\\nBlock: ${sData.blockHeight || 'Pending'}` }] };\n\n case \"proof\":\n if (!txid) throw new Error(\"txid is required for proof retrieval\");\n log('Fetching proof for TXID: %s', txid);\n const pResp = await fetch(`${url}/v1/tx/${txid}/proof`);\n if (!pResp.ok) {\n log('Proof retrieval failed: %d', pResp.status);\n throw new Error(`Proof retrieval failed: ${pResp.status}`);\n }\n const pData = await pResp.arrayBuffer();\n const base64Proof = Buffer.from(pData).toString('base64');\n log('Proof retrieved, length: %d bytes', pData.byteLength);\n return { content: [{ type: \"text\", text: `Merkle Proof (Base64): ${base64Proof}` }] };\n case \"config\":\n return { content: [{ type: \"text\", text: `Arcade Configuration:\\nURL: ${url}\\nNetwork: ${net}` }] };\n\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n } catch (error: any) {\n return {\n content: [{\n type: \"text\",\n text: `Error: ${error.message || String(error)}`\n }]\n };\n }\n }\n });\n\n // Command\n api.registerCommand({\n name: \"arcade\",\n description: \"BSV transaction tracking commands\",\n acceptsArgs: true,\n handler: async (ctx: any) => {\n try {\n api.logger?.info?.(`[openclaw-arcade] Command received with args: ${JSON.stringify(ctx.args)} (type: ${typeof ctx.args})`);\n const args = Array.isArray(ctx.args) ? ctx.args : (typeof ctx.args === 'string' ? ctx.args.split(' ').filter(Boolean) : []);\n const action = args[0] || 'config';\n const params: any = { action };\n \n if (action === 'help') {\n return { text: `\uD83D\uDEE1\uFE0F **Arcade Help**\\n\\n**Subcommands**:\\n- \\`status <txid>\\`: Check broadcast status\\n- \\`broadcast <hex>\\`: Send raw transaction\\n- \\`proof <txid>\\`: Fetch Merkle Proof\\n- \\`config\\`: Show active URL` };\n }\n\n if (action === 'status' && args[1]) params.txid = args[1];\n if (action === 'broadcast' && args[1]) params.txhex = args[1];\n\n if (action === 'status' && params.txid) {\n const res = await fetch(`${url}/v1/tx/${params.txid}`);\n const data: any = await res.json();\n return { text: `\uD83D\uDEE1\uFE0F **Transaction Status**\\n**TXID**: ${params.txid}\\n**Status**: ${data.txStatus || 'Unknown'}` };\n }\n\n return { text: `Command '${action}' executed.` };\n } catch (error: any) {\n return { text: `\u274C Arcade Error: ${error.message}` };\n }\n }\n });\n\n // CLI\n api.registerCli(({ program }: any) => {\n const arc = program.command(\"arcade\").description(\"BSV transaction tracking commands\");\n\n arc.addHelpText('after', `\n\uD83C\uDFAE Arcade Examples:\n $ openclaw arcade status <txid> # Check status of a broadcasted TX\n $ openclaw arcade broadcast <hex> # Send raw transaction to the network\n $ openclaw arcade config # Show active Arcade URL and network\n\n\uD83D\uDCA1 Tip: Arcade provides real-time lifecycle tracking for your transactions, \n from mempool acceptance to block confirmation.\n`);\n\n arc.command(\"status <txid>\").description(\"Check broadcast status\").action(async (txid: string) => {\n const res = await fetch(`${url}/v1/tx/${txid}`);\n const data: any = await res.json();\n console.log(JSON.stringify(data, null, 2));\n });\n\n arc.command(\"broadcast <hex>\").description(\"Send raw transaction\").action(async (txhex: string) => {\n const res = await fetch(`${url}/v1/tx`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ rawTx: txhex })\n });\n const data: any = await res.json();\n console.log(JSON.stringify(data, null, 2));\n });\n\n arc.command(\"config\").description(\"Show current Arcade configuration\").action(() => {\n console.log(JSON.stringify({ arcadeUrl: url, network: net }, null, 2));\n });\n }, { commands: [\"arcade\"] });\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "openclaw-arcade-plugin",
|
|
3
3
|
"name": "BSV Arcade Broadcaster",
|
|
4
4
|
"description": "Submit and track BSV transactions with full lifecycle visibility",
|
|
5
|
-
"version": "0.2.
|
|
5
|
+
"version": "0.2.42",
|
|
6
6
|
"skills": [
|
|
7
7
|
"./SKILL.md"
|
|
8
8
|
],
|
|
@@ -17,18 +17,18 @@
|
|
|
17
17
|
"description": "Uses public infrastructure for broadcasting"
|
|
18
18
|
}
|
|
19
19
|
],
|
|
20
|
-
"commands": [
|
|
21
|
-
{
|
|
22
|
-
"name": "arcade",
|
|
23
|
-
"description": "BSV transaction tracking commands"
|
|
24
|
-
}
|
|
25
|
-
],
|
|
26
20
|
"contracts": {
|
|
27
21
|
"tools": [
|
|
28
22
|
{
|
|
29
23
|
"name": "arcade",
|
|
30
24
|
"description": "Submit and track BSV transactions with full lifecycle visibility"
|
|
31
25
|
}
|
|
26
|
+
],
|
|
27
|
+
"commands": [
|
|
28
|
+
{
|
|
29
|
+
"name": "arcade",
|
|
30
|
+
"description": "BSV transaction tracking commands"
|
|
31
|
+
}
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
"configSchema": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openclaw-arcade-plugin",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.42",
|
|
4
4
|
"description": "OpenClaw plugin for transaction broadcasting and lifecycle tracking via BSV Arcade",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -38,8 +38,12 @@
|
|
|
38
38
|
"extensions": [
|
|
39
39
|
"./dist/index.js"
|
|
40
40
|
],
|
|
41
|
+
"build": {
|
|
42
|
+
"openclawVersion": "2026.4.10",
|
|
43
|
+
"pluginSdkVersion": "2026.4.10"
|
|
44
|
+
},
|
|
41
45
|
"compat": {
|
|
42
|
-
"pluginApi": "
|
|
46
|
+
"pluginApi": ">=2026.4.10",
|
|
43
47
|
"minGatewayVersion": "2026.3.1"
|
|
44
48
|
}
|
|
45
49
|
},
|