openclaw-arcade-plugin 0.1.13 → 0.1.15

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.d.ts CHANGED
@@ -2,6 +2,12 @@
2
2
  * OpenClaw Arcade Plugin
3
3
  * Transaction broadcasting and lifecycle tracking via BSV Arcade.
4
4
  */
5
- export declare function activate(api: any): Promise<void>;
6
- export default function register(api: any): void;
5
+ export declare const plugin: {
6
+ id: string;
7
+ name: string;
8
+ description: string;
9
+ activate(api: any): Promise<void>;
10
+ register(api: any): void;
11
+ };
12
+ export default plugin;
7
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,GAAG,iBAEtC;AAID,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,QA+HxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;kBAKG,GAAG;kBAIT,GAAG;CAoIlB,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,134 +1,143 @@
1
+ let isInitialized = false;
1
2
  /**
2
3
  * OpenClaw Arcade Plugin
3
4
  * Transaction broadcasting and lifecycle tracking via BSV Arcade.
4
5
  */
5
- export async function activate(api) {
6
- return register(api);
7
- }
8
- let isInitialized = false;
9
- export default function register(api) {
10
- if (isInitialized)
11
- return;
12
- isInitialized = true;
13
- const entries = api.getConfig?.()?.plugins?.entries || {};
14
- const entry = entries['openclaw-arcade']
15
- || entries['openclaw-arcade-plugin']
16
- || entries['bsv-arcade']
17
- || {};
18
- const pluginConfig = { ...entry, ...(entry.config || {}), ...(api.config || {}) };
19
- const network = pluginConfig.network || 'mainnet';
20
- const defaultArcadeUrl = network === 'testnet'
21
- ? 'https://testnet.arc.gorillapool.io'
22
- : 'https://arc.gorillapool.io';
23
- const arcadeUrl = (pluginConfig.arcadeUrl || defaultArcadeUrl).replace(/\/$/, '');
24
- api.logger.info(`[arcade] Initializing Arcade Plugin (network: ${network}, host: ${arcadeUrl})`);
25
- // Register the arcade tool
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"
6
+ export const plugin = {
7
+ id: "openclaw-arcade-plugin",
8
+ name: "BSV Arcade Broadcaster",
9
+ description: "Submit and track BSV transactions with full lifecycle visibility",
10
+ async activate(api) {
11
+ return this.register(api);
12
+ },
13
+ register(api) {
14
+ if (isInitialized)
15
+ return;
16
+ isInitialized = true;
17
+ const entries = api.getConfig?.()?.plugins?.entries || {};
18
+ const entry = entries['openclaw-arcade-plugin']
19
+ || entries['openclaw-arcade']
20
+ || entries['bsv-arcade']
21
+ || {};
22
+ const pluginConfig = { ...entry, ...(entry.config || {}), ...(api.config || {}) };
23
+ const network = pluginConfig.network || 'mainnet';
24
+ const defaultArcadeUrl = network === 'testnet'
25
+ ? 'https://testnet.arc.gorillapool.io'
26
+ : 'https://arc.gorillapool.io';
27
+ const arcadeUrl = (pluginConfig.arcadeUrl || defaultArcadeUrl).replace(/\/$/, '');
28
+ api.logger.info(`[arcade] Initializing Arcade Plugin (network: ${network}, host: ${arcadeUrl})`);
29
+ // 1. Tool
30
+ api.registerTool({
31
+ name: "arcade",
32
+ description: "Submit and track BSV transactions with full lifecycle visibility",
33
+ parameters: {
34
+ type: "object",
35
+ properties: {
36
+ action: {
37
+ type: "string",
38
+ enum: ["broadcast", "status", "proof", "config"],
39
+ description: "Action to perform"
40
+ },
41
+ txhex: {
42
+ type: "string",
43
+ description: "Hex-encoded raw transaction to broadcast"
44
+ },
45
+ txid: {
46
+ type: "string",
47
+ description: "Transaction ID to track or fetch proof for"
48
+ }
40
49
  },
41
- txid: {
42
- type: "string",
43
- description: "Transaction ID to track or fetch proof for"
44
- }
50
+ required: ["action"]
45
51
  },
46
- required: ["action"]
47
- },
48
- async execute(_id, params) {
49
- try {
50
- const { action, txhex, txid } = params;
51
- switch (action) {
52
- case "broadcast":
53
- if (!txhex)
54
- throw new Error("txhex is required for broadcast");
55
- const bResp = await fetch(`${arcadeUrl}/v1/tx`, {
56
- method: 'POST',
57
- headers: { 'Content-Type': 'application/json' },
58
- body: JSON.stringify({ rawTx: txhex })
59
- });
60
- const bData = await bResp.json();
61
- if (!bResp.ok)
62
- throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);
63
- return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}\nStatus: ${bData.txStatus}` }] };
64
- case "status":
65
- if (!txid)
66
- throw new Error("txid is required for status check");
67
- const sResp = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
68
- const sData = await sResp.json();
69
- if (!sResp.ok)
70
- throw new Error(`Status check failed: ${JSON.stringify(sData)}`);
71
- return { content: [{ type: "text", text: `Transaction ${txid}:\nStatus: ${sData.txStatus}\nBlock: ${sData.blockHeight || 'Pending'}` }] };
72
- case "proof":
73
- if (!txid)
74
- throw new Error("txid is required for proof retrieval");
75
- const pResp = await fetch(`${arcadeUrl}/v1/tx/${txid}/proof`);
76
- if (!pResp.ok)
77
- throw new Error(`Proof retrieval failed: ${pResp.status}`);
78
- const pData = await pResp.arrayBuffer();
79
- const base64Proof = Buffer.from(pData).toString('base64');
80
- return { content: [{ type: "text", text: `Merkle Proof (Base64): ${base64Proof}` }] };
81
- case "config":
82
- return { content: [{ type: "text", text: `Arcade Configuration:\nURL: ${arcadeUrl}\nNetwork: ${network}` }] };
83
- default:
84
- throw new Error(`Unknown action: ${action}`);
52
+ async execute(_id, params) {
53
+ try {
54
+ const { action, txhex, txid } = params;
55
+ switch (action) {
56
+ case "broadcast":
57
+ if (!txhex)
58
+ throw new Error("txhex is required for broadcast");
59
+ const bResp = await fetch(`${arcadeUrl}/v1/tx`, {
60
+ method: 'POST',
61
+ headers: { 'Content-Type': 'application/json' },
62
+ body: JSON.stringify({ rawTx: txhex })
63
+ });
64
+ const bData = await bResp.json();
65
+ if (!bResp.ok)
66
+ throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);
67
+ return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}\nStatus: ${bData.txStatus}` }] };
68
+ case "status":
69
+ if (!txid)
70
+ throw new Error("txid is required for status check");
71
+ const sResp = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
72
+ const sData = await sResp.json();
73
+ if (!sResp.ok)
74
+ throw new Error(`Status check failed: ${JSON.stringify(sData)}`);
75
+ return { content: [{ type: "text", text: `Transaction ${txid}:\nStatus: ${sData.txStatus}\nBlock: ${sData.blockHeight || 'Pending'}` }] };
76
+ case "proof":
77
+ if (!txid)
78
+ throw new Error("txid is required for proof retrieval");
79
+ const pResp = await fetch(`${arcadeUrl}/v1/tx/${txid}/proof`);
80
+ if (!pResp.ok)
81
+ throw new Error(`Proof retrieval failed: ${pResp.status}`);
82
+ const pData = await pResp.arrayBuffer();
83
+ const base64Proof = Buffer.from(pData).toString('base64');
84
+ return { content: [{ type: "text", text: `Merkle Proof (Base64): ${base64Proof}` }] };
85
+ case "config":
86
+ return { content: [{ type: "text", text: `Arcade Configuration:\nURL: ${arcadeUrl}\nNetwork: ${network}` }] };
87
+ default:
88
+ throw new Error(`Unknown action: ${action}`);
89
+ }
85
90
  }
86
- }
87
- catch (error) {
88
- return {
89
- content: [{
90
- type: "text",
91
- text: `Error: ${error.message || String(error)}`
92
- }]
93
- };
94
- }
95
- }
96
- });
97
- // Register the /arcade slash command for direct chat interaction (Autoreply)
98
- api.registerCommand({
99
- name: "arcade",
100
- description: "BSV transaction tracking commands",
101
- acceptsArgs: true,
102
- requireAuth: true,
103
- handler: async (ctx) => {
104
- try {
105
- const args = ctx.args || [];
106
- const action = args[0] || 'config';
107
- const params = { action };
108
- if (action === 'status' && args[1])
109
- params.txid = args[1];
110
- if (action === 'broadcast' && args[1])
111
- params.txhex = args[1];
112
- // Custom logic for simplified chat output
113
- if (action === 'status' && params.txid) {
114
- const res = await fetch(`${arcadeUrl}/v1/tx/${params.txid}`);
115
- const data = await res.json();
116
- return { text: `🛡️ **Transaction Status**\n**TXID**: ${params.txid}\n**Status**: ${data.txStatus || 'Unknown'}` };
91
+ catch (error) {
92
+ return {
93
+ content: [{
94
+ type: "text",
95
+ text: `Error: ${error.message || String(error)}`
96
+ }]
97
+ };
117
98
  }
118
- return { text: `Command '${action}' executed.` };
119
99
  }
120
- catch (error) {
121
- return { text: `❌ Arcade Error: ${error.message}` };
100
+ });
101
+ // 2. Command
102
+ api.registerCommand({
103
+ name: "arcade",
104
+ description: "BSV transaction tracking commands",
105
+ acceptsArgs: true,
106
+ requireAuth: true,
107
+ handler: async (ctx) => {
108
+ try {
109
+ const args = ctx.args || [];
110
+ const action = args[0] || 'config';
111
+ const params = { action };
112
+ if (action === 'help') {
113
+ return { text: `🛡️ **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` };
114
+ }
115
+ if (action === 'status' && args[1])
116
+ params.txid = args[1];
117
+ if (action === 'broadcast' && args[1])
118
+ params.txhex = args[1];
119
+ // Custom logic for simplified chat output
120
+ if (action === 'status' && params.txid) {
121
+ const res = await fetch(`${arcadeUrl}/v1/tx/${params.txid}`);
122
+ const data = await res.json();
123
+ return { text: `🛡️ **Transaction Status**\n**TXID**: ${params.txid}\n**Status**: ${data.txStatus || 'Unknown'}` };
124
+ }
125
+ return { text: `Command '${action}' executed.` };
126
+ }
127
+ catch (error) {
128
+ return { text: `❌ Arcade Error: ${error.message}` };
129
+ }
122
130
  }
123
- }
124
- });
125
- // Register CLI extensions
126
- api.registerCli(({ program }) => {
127
- program.command("arcade")
128
- .description("BSV transaction tracking commands")
129
- .action(() => {
130
- console.log("Usage: arcade <action> [args]");
131
131
  });
132
- }, { commands: ["arcade"] });
133
- }
132
+ // 3. CLI
133
+ api.registerCli(({ program }) => {
134
+ program.command("arcade")
135
+ .description("BSV transaction tracking commands")
136
+ .action(() => {
137
+ console.log("Usage: arcade <action> [args]");
138
+ });
139
+ }, { descriptors: [{ name: "arcade", description: "BSV transaction tracking commands" }] });
140
+ }
141
+ };
142
+ export default plugin;
134
143
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Verifies that the arcade tool is registered correctly and handles
5
5
  * actions as expected.
6
6
  */
7
- import register from '../index.js';
7
+ import { plugin } from '../index.js';
8
8
  // Simple test runner
9
9
  let passed = 0;
10
10
  let failed = 0;
@@ -36,10 +36,12 @@ async function run() {
36
36
  registerTool: (tool) => {
37
37
  registeredTool = tool;
38
38
  },
39
+ registerCommand: () => { },
40
+ registerCli: () => { },
39
41
  getConfig: () => ({
40
42
  plugins: {
41
43
  entries: {
42
- 'openclaw-arcade': {
44
+ 'openclaw-arcade-plugin': {
43
45
  config: {
44
46
  arcadeUrl: 'https://arc.gorillapool.io',
45
47
  network: 'mainnet'
@@ -50,7 +52,7 @@ async function run() {
50
52
  })
51
53
  };
52
54
  await test('Plugin registers arcade tool', async () => {
53
- register(mockApi);
55
+ plugin.register(mockApi);
54
56
  assert(registeredTool !== null, 'tool should be registered');
55
57
  assert(registeredTool.name === 'arcade', 'tool name should be arcade');
56
58
  });
@@ -1 +1 @@
1
- {"version":3,"file":"arcade.test.js","sourceRoot":"","sources":["../../src/arcade.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arcade.test.js","sourceRoot":"","sources":["../../src/arcade.test.ts"],"names":[],"mappings":"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"}
package/index.ts CHANGED
@@ -1,141 +1,153 @@
1
1
  import path from "node:path";
2
2
  import os from "node:os";
3
3
 
4
+ let isInitialized = false;
5
+
4
6
  /**
5
7
  * OpenClaw Arcade Plugin
6
8
  * Transaction broadcasting and lifecycle tracking via BSV Arcade.
7
9
  */
8
- export async function activate(api: any) {
9
- return register(api);
10
- }
10
+ export const plugin = {
11
+ id: "openclaw-arcade-plugin",
12
+ name: "BSV Arcade Broadcaster",
13
+ description: "Submit and track BSV transactions with full lifecycle visibility",
14
+
15
+ async activate(api: any) {
16
+ return this.register(api);
17
+ },
11
18
 
12
- let isInitialized = false;
19
+ register(api: any) {
20
+ if (isInitialized) return;
21
+ isInitialized = true;
13
22
 
14
- export default function register(api: any) {
15
- if (isInitialized) return;
16
- isInitialized = true;
17
-
18
- const entries = api.getConfig?.()?.plugins?.entries || {};
19
- const entry = entries['openclaw-arcade']
20
- || entries['openclaw-arcade-plugin']
21
- || entries['bsv-arcade']
22
- || {};
23
-
24
- const pluginConfig = { ...entry, ...(entry.config || {}), ...(api.config || {}) };
25
- const network = pluginConfig.network || 'mainnet';
26
- const defaultArcadeUrl = network === 'testnet'
27
- ? 'https://testnet.arc.gorillapool.io'
28
- : 'https://arc.gorillapool.io';
29
- const arcadeUrl = (pluginConfig.arcadeUrl || defaultArcadeUrl).replace(/\/$/, '');
30
-
31
- api.logger.info(`[arcade] Initializing Arcade Plugin (network: ${network}, host: ${arcadeUrl})`);
32
-
33
- // Register the arcade tool
34
- api.registerTool({
35
- name: "arcade",
36
- description: "Submit and track BSV transactions with full lifecycle visibility",
37
- parameters: {
38
- type: "object",
39
- properties: {
40
- action: {
41
- type: "string",
42
- enum: ["broadcast", "status", "proof", "config"],
43
- description: "Action to perform"
44
- },
45
- txhex: {
46
- type: "string",
47
- description: "Hex-encoded raw transaction to broadcast"
23
+ const entries = api.getConfig?.()?.plugins?.entries || {};
24
+ const entry = entries['openclaw-arcade-plugin']
25
+ || entries['openclaw-arcade']
26
+ || entries['bsv-arcade']
27
+ || {};
28
+
29
+ const pluginConfig = { ...entry, ...(entry.config || {}), ...(api.config || {}) };
30
+ const network = pluginConfig.network || 'mainnet';
31
+ const defaultArcadeUrl = network === 'testnet'
32
+ ? 'https://testnet.arc.gorillapool.io'
33
+ : 'https://arc.gorillapool.io';
34
+ const arcadeUrl = (pluginConfig.arcadeUrl || defaultArcadeUrl).replace(/\/$/, '');
35
+
36
+ api.logger.info(`[arcade] Initializing Arcade Plugin (network: ${network}, host: ${arcadeUrl})`);
37
+
38
+ // 1. Tool
39
+ api.registerTool({
40
+ name: "arcade",
41
+ description: "Submit and track BSV transactions with full lifecycle visibility",
42
+ parameters: {
43
+ type: "object",
44
+ properties: {
45
+ action: {
46
+ type: "string",
47
+ enum: ["broadcast", "status", "proof", "config"],
48
+ description: "Action to perform"
49
+ },
50
+ txhex: {
51
+ type: "string",
52
+ description: "Hex-encoded raw transaction to broadcast"
53
+ },
54
+ txid: {
55
+ type: "string",
56
+ description: "Transaction ID to track or fetch proof for"
57
+ }
48
58
  },
49
- txid: {
50
- type: "string",
51
- description: "Transaction ID to track or fetch proof for"
52
- }
59
+ required: ["action"]
53
60
  },
54
- required: ["action"]
55
- },
56
- async execute(_id: string, params: any) {
57
- try {
58
- const { action, txhex, txid } = params;
59
-
60
- switch (action) {
61
- case "broadcast":
62
- if (!txhex) throw new Error("txhex is required for broadcast");
63
- const bResp = await fetch(`${arcadeUrl}/v1/tx`, {
64
- method: 'POST',
65
- headers: { 'Content-Type': 'application/json' },
66
- body: JSON.stringify({ rawTx: txhex })
67
- });
68
- const bData: any = await bResp.json();
69
- if (!bResp.ok) throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);
70
- return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}\nStatus: ${bData.txStatus}` }] };
71
-
72
- case "status":
73
- if (!txid) throw new Error("txid is required for status check");
74
- const sResp = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
75
- const sData: any = await sResp.json();
76
- if (!sResp.ok) throw new Error(`Status check failed: ${JSON.stringify(sData)}`);
77
- return { content: [{ type: "text", text: `Transaction ${txid}:\nStatus: ${sData.txStatus}\nBlock: ${sData.blockHeight || 'Pending'}` }] };
78
-
79
- case "proof":
80
- if (!txid) throw new Error("txid is required for proof retrieval");
81
- const pResp = await fetch(`${arcadeUrl}/v1/tx/${txid}/proof`);
82
- if (!pResp.ok) throw new Error(`Proof retrieval failed: ${pResp.status}`);
83
- const pData = await pResp.arrayBuffer();
84
- const base64Proof = Buffer.from(pData).toString('base64');
85
- return { content: [{ type: "text", text: `Merkle Proof (Base64): ${base64Proof}` }] };
86
-
87
- case "config":
88
- return { content: [{ type: "text", text: `Arcade Configuration:\nURL: ${arcadeUrl}\nNetwork: ${network}` }] };
89
-
90
- default:
91
- throw new Error(`Unknown action: ${action}`);
61
+ async execute(_id: string, params: any) {
62
+ try {
63
+ const { action, txhex, txid } = params;
64
+
65
+ switch (action) {
66
+ case "broadcast":
67
+ if (!txhex) throw new Error("txhex is required for broadcast");
68
+ const bResp = await fetch(`${arcadeUrl}/v1/tx`, {
69
+ method: 'POST',
70
+ headers: { 'Content-Type': 'application/json' },
71
+ body: JSON.stringify({ rawTx: txhex })
72
+ });
73
+ const bData: any = await bResp.json();
74
+ if (!bResp.ok) throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);
75
+ return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}\nStatus: ${bData.txStatus}` }] };
76
+
77
+ case "status":
78
+ if (!txid) throw new Error("txid is required for status check");
79
+ const sResp = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
80
+ const sData: any = await sResp.json();
81
+ if (!sResp.ok) throw new Error(`Status check failed: ${JSON.stringify(sData)}`);
82
+ return { content: [{ type: "text", text: `Transaction ${txid}:\nStatus: ${sData.txStatus}\nBlock: ${sData.blockHeight || 'Pending'}` }] };
83
+
84
+ case "proof":
85
+ if (!txid) throw new Error("txid is required for proof retrieval");
86
+ const pResp = await fetch(`${arcadeUrl}/v1/tx/${txid}/proof`);
87
+ if (!pResp.ok) throw new Error(`Proof retrieval failed: ${pResp.status}`);
88
+ const pData = await pResp.arrayBuffer();
89
+ const base64Proof = Buffer.from(pData).toString('base64');
90
+ return { content: [{ type: "text", text: `Merkle Proof (Base64): ${base64Proof}` }] };
91
+
92
+ case "config":
93
+ return { content: [{ type: "text", text: `Arcade Configuration:\nURL: ${arcadeUrl}\nNetwork: ${network}` }] };
94
+
95
+ default:
96
+ throw new Error(`Unknown action: ${action}`);
97
+ }
98
+ } catch (error: any) {
99
+ return {
100
+ content: [{
101
+ type: "text",
102
+ text: `Error: ${error.message || String(error)}`
103
+ }]
104
+ };
92
105
  }
93
- } catch (error: any) {
94
- return {
95
- content: [{
96
- type: "text",
97
- text: `Error: ${error.message || String(error)}`
98
- }]
99
- };
100
106
  }
101
- }
102
- });
103
-
104
- // Register the /arcade slash command for direct chat interaction (Autoreply)
105
- api.registerCommand({
106
- name: "arcade",
107
- description: "BSV transaction tracking commands",
108
- acceptsArgs: true,
109
- requireAuth: true,
110
- handler: async (ctx: any) => {
111
- try {
112
- const args = ctx.args || [];
113
- const action = args[0] || 'config';
114
- const params: any = { action };
115
-
116
- if (action === 'status' && args[1]) params.txid = args[1];
117
- if (action === 'broadcast' && args[1]) params.txhex = args[1];
118
-
119
- // Custom logic for simplified chat output
120
- if (action === 'status' && params.txid) {
121
- const res = await fetch(`${arcadeUrl}/v1/tx/${params.txid}`);
122
- const data: any = await res.json();
123
- return { text: `🛡️ **Transaction Status**\n**TXID**: ${params.txid}\n**Status**: ${data.txStatus || 'Unknown'}` };
124
- }
107
+ });
108
+
109
+ // 2. Command
110
+ api.registerCommand({
111
+ name: "arcade",
112
+ description: "BSV transaction tracking commands",
113
+ acceptsArgs: true,
114
+ requireAuth: true,
115
+ handler: async (ctx: any) => {
116
+ try {
117
+ const args = ctx.args || [];
118
+ const action = args[0] || 'config';
119
+ const params: any = { action };
120
+
121
+ if (action === 'help') {
122
+ return { text: `🛡️ **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` };
123
+ }
124
+
125
+ if (action === 'status' && args[1]) params.txid = args[1];
126
+ if (action === 'broadcast' && args[1]) params.txhex = args[1];
125
127
 
126
- return { text: `Command '${action}' executed.` };
127
- } catch (error: any) {
128
- return { text: `❌ Arcade Error: ${error.message}` };
128
+ // Custom logic for simplified chat output
129
+ if (action === 'status' && params.txid) {
130
+ const res = await fetch(`${arcadeUrl}/v1/tx/${params.txid}`);
131
+ const data: any = await res.json();
132
+ return { text: `🛡️ **Transaction Status**\n**TXID**: ${params.txid}\n**Status**: ${data.txStatus || 'Unknown'}` };
133
+ }
134
+
135
+ return { text: `Command '${action}' executed.` };
136
+ } catch (error: any) {
137
+ return { text: `❌ Arcade Error: ${error.message}` };
138
+ }
129
139
  }
130
- }
131
- });
132
-
133
- // Register CLI extensions
134
- api.registerCli(({ program }: any) => {
135
- program.command("arcade")
136
- .description("BSV transaction tracking commands")
137
- .action(() => {
138
- console.log("Usage: arcade <action> [args]");
139
- });
140
- }, { commands: ["arcade"] });
141
- }
140
+ });
141
+
142
+ // 3. CLI
143
+ api.registerCli(({ program }: any) => {
144
+ program.command("arcade")
145
+ .description("BSV transaction tracking commands")
146
+ .action(() => {
147
+ console.log("Usage: arcade <action> [args]");
148
+ });
149
+ }, { descriptors: [{ name: "arcade", description: "BSV transaction tracking commands" }] });
150
+ }
151
+ };
152
+
153
+ export default plugin;
@@ -2,10 +2,21 @@
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.1.13",
5
+ "version": "0.1.15",
6
6
  "skills": [
7
7
  "./SKILL.md"
8
8
  ],
9
+ "providerAuthEnvVars": {
10
+ "ARCADE_URL": "Arcade server URL for transaction broadcasting",
11
+ "BSV_NETWORK": "BSV network to use (mainnet/testnet)"
12
+ },
13
+ "providerAuthChoices": [
14
+ {
15
+ "id": "public-arcade",
16
+ "label": "Public Arcade (GorillaPool)",
17
+ "description": "Uses public infrastructure for broadcasting"
18
+ }
19
+ ],
9
20
  "commands": [
10
21
  {
11
22
  "name": "arcade",
@@ -23,23 +34,8 @@
23
34
  },
24
35
  "configSchema": {
25
36
  "type": "object",
26
- "additionalProperties": true,
37
+ "additionalProperties": false,
27
38
  "properties": {
28
- "enabled": {
29
- "type": "boolean"
30
- },
31
- "config": {
32
- "type": "object",
33
- "additionalProperties": true,
34
- "properties": {
35
- "arcadeUrl": {
36
- "type": "string"
37
- },
38
- "network": {
39
- "type": "string"
40
- }
41
- }
42
- },
43
39
  "arcadeUrl": {
44
40
  "type": "string",
45
41
  "default": "https://arc.gorillapool.io",
@@ -51,7 +47,8 @@
51
47
  "mainnet",
52
48
  "testnet"
53
49
  ],
54
- "default": "mainnet"
50
+ "default": "mainnet",
51
+ "description": "BSV network to use"
55
52
  }
56
53
  }
57
54
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclaw-arcade-plugin",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "OpenClaw plugin for transaction broadcasting and lifecycle tracking via BSV Arcade",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -5,7 +5,7 @@
5
5
  * actions as expected.
6
6
  */
7
7
 
8
- import register from '../index.js';
8
+ import { plugin } from '../index.js';
9
9
 
10
10
  // Simple test runner
11
11
  let passed = 0;
@@ -41,10 +41,12 @@ async function run() {
41
41
  registerTool: (tool: any) => {
42
42
  registeredTool = tool;
43
43
  },
44
+ registerCommand: () => {},
45
+ registerCli: () => {},
44
46
  getConfig: () => ({
45
47
  plugins: {
46
48
  entries: {
47
- 'openclaw-arcade': {
49
+ 'openclaw-arcade-plugin': {
48
50
  config: {
49
51
  arcadeUrl: 'https://arc.gorillapool.io',
50
52
  network: 'mainnet'
@@ -56,7 +58,7 @@ async function run() {
56
58
  };
57
59
 
58
60
  await test('Plugin registers arcade tool', async () => {
59
- register(mockApi);
61
+ plugin.register(mockApi);
60
62
  assert(registeredTool !== null, 'tool should be registered');
61
63
  assert(registeredTool.name === 'arcade', 'tool name should be arcade');
62
64
  });