openclaw-arcade-plugin 0.2.14 → 0.2.16

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 CHANGED
@@ -1,173 +1,169 @@
1
- import debug from 'debug';
2
- const log = debug('openclaw:plugin:arcade');
3
- let isInitialized = false;
4
- /**
5
- * OpenClaw Arcade Plugin
6
- * Transaction broadcasting and lifecycle tracking via BSV Arcade.
7
- */
8
- export function register(api) {
9
- const version = "0.2.13";
10
- if (isInitialized)
11
- return;
12
- isInitialized = true;
13
- api.logger.info(`[arcade] Initializing Arcade Plugin v${version}`);
14
- const entries = api.getConfig?.()?.plugins?.entries || {};
15
- const entry = entries['sv_arcade']
16
- || entries['arcade']
17
- || entries['openclaw-arcade-plugin']
18
- || entries['openclaw-arcade']
19
- || entries['bsv-arcade']
20
- || {};
21
- const pluginConfig = { ...entry, ...(entry.config || {}), ...(api.config || {}) };
22
- const network = pluginConfig.network || 'mainnet';
23
- const defaultArcadeUrl = network === 'testnet'
24
- ? 'https://testnet.arc.gorillapool.io'
25
- : 'https://arc.gorillapool.io';
26
- const arcadeUrl = (pluginConfig.arcadeUrl || defaultArcadeUrl).replace(/\/$/, '');
27
- // 1. Tool
28
- api.registerTool({
29
- name: "arcade",
30
- description: "Submit and track BSV transactions with full lifecycle visibility",
31
- parameters: {
32
- type: "object",
33
- properties: {
34
- action: {
35
- type: "string",
36
- enum: ["broadcast", "status", "proof", "config"],
37
- description: "Action to perform"
38
- },
39
- txhex: {
40
- type: "string",
41
- description: "Hex-encoded raw transaction to broadcast"
42
- },
43
- txid: {
44
- type: "string",
45
- description: "Transaction ID to track or fetch proof for"
46
- }
47
- },
48
- required: ["action"]
1
+ // index.ts
2
+ import debug from "debug";
3
+ var log = debug("openclaw:plugin:arcade");
4
+ var isInitialized = false;
5
+ function register(api) {
6
+ const version = "0.2.15";
7
+ if (isInitialized) return;
8
+ isInitialized = true;
9
+ api.logger.info(`[arcade] Initializing Arcade Plugin v${version}`);
10
+ const entries = api.getConfig?.()?.plugins?.entries || {};
11
+ const entry = entries["sv_arcade"] || entries["arcade"] || entries["openclaw-arcade-plugin"] || entries["openclaw-arcade"] || entries["bsv-arcade"] || {};
12
+ const pluginConfig = { ...entry, ...entry.config || {}, ...api.config || {} };
13
+ const network = pluginConfig.network || "mainnet";
14
+ const defaultArcadeUrl = network === "testnet" ? "https://testnet.arc.gorillapool.io" : "https://arc.gorillapool.io";
15
+ const arcadeUrl = (pluginConfig.arcadeUrl || defaultArcadeUrl).replace(/\/$/, "");
16
+ api.registerTool({
17
+ name: "arcade",
18
+ description: "Submit and track BSV transactions with full lifecycle visibility",
19
+ parameters: {
20
+ type: "object",
21
+ properties: {
22
+ action: {
23
+ type: "string",
24
+ enum: ["broadcast", "status", "proof", "config"],
25
+ description: "Action to perform"
49
26
  },
50
- async execute(_id, params) {
51
- log('Executing tool action: %s with params: %O', params.action, params);
52
- try {
53
- const { action, txhex, txid } = params;
54
- switch (action) {
55
- case "broadcast":
56
- if (!txhex)
57
- throw new Error("txhex is required for broadcast");
58
- log('Broadcasting transaction: %s...', txhex.slice(0, 64));
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
- log('Broadcast failed: %O', bData);
67
- throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);
68
- }
69
- log('Broadcast successful, TXID: %s', bData.txid);
70
- return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}\nStatus: ${bData.txStatus}` }] };
71
- case "status":
72
- if (!txid)
73
- throw new Error("txid is required for status check");
74
- log('Checking status for TXID: %s', txid);
75
- const sResp = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
76
- const sData = await sResp.json();
77
- if (!sResp.ok) {
78
- log('Status check failed: %O', sData);
79
- throw new Error(`Status check failed: ${JSON.stringify(sData)}`);
80
- }
81
- log('Status: %s, Block: %s', sData.txStatus, sData.blockHeight);
82
- return { content: [{ type: "text", text: `Transaction ${txid}:\nStatus: ${sData.txStatus}\nBlock: ${sData.blockHeight || 'Pending'}` }] };
83
- case "proof":
84
- if (!txid)
85
- throw new Error("txid is required for proof retrieval");
86
- log('Fetching proof for TXID: %s', txid);
87
- const pResp = await fetch(`${arcadeUrl}/v1/tx/${txid}/proof`);
88
- if (!pResp.ok) {
89
- log('Proof retrieval failed: %d', pResp.status);
90
- throw new Error(`Proof retrieval failed: ${pResp.status}`);
91
- }
92
- const pData = await pResp.arrayBuffer();
93
- const base64Proof = Buffer.from(pData).toString('base64');
94
- log('Proof retrieved, length: %d bytes', pData.byteLength);
95
- return { content: [{ type: "text", text: `Merkle Proof (Base64): ${base64Proof}` }] };
96
- case "config":
97
- return { content: [{ type: "text", text: `Arcade Configuration:\nURL: ${arcadeUrl}\nNetwork: ${network}` }] };
98
- default:
99
- throw new Error(`Unknown action: ${action}`);
100
- }
101
- }
102
- catch (error) {
103
- return {
104
- content: [{
105
- type: "text",
106
- text: `Error: ${error.message || String(error)}`
107
- }]
108
- };
109
- }
27
+ txhex: {
28
+ type: "string",
29
+ description: "Hex-encoded raw transaction to broadcast"
30
+ },
31
+ txid: {
32
+ type: "string",
33
+ description: "Transaction ID to track or fetch proof for"
110
34
  }
111
- });
112
- // 2. Command
113
- api.registerCommand({
114
- name: "arcade",
115
- description: "BSV transaction tracking commands",
116
- acceptsArgs: true,
117
- handler: async (ctx) => {
118
- try {
119
- api.logger?.info?.(`[openclaw-arcade] Command received with args: ${JSON.stringify(ctx.args)} (type: ${typeof ctx.args})`);
120
- const args = Array.isArray(ctx.args) ? ctx.args : (typeof ctx.args === 'string' ? ctx.args.split(' ').filter(Boolean) : []);
121
- const action = args[0] || 'config';
122
- const params = { action };
123
- if (action === 'help') {
124
- 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` };
125
- }
126
- if (action === 'status' && args[1])
127
- params.txid = args[1];
128
- if (action === 'broadcast' && args[1])
129
- params.txhex = args[1];
130
- // Custom logic for simplified chat output
131
- if (action === 'status' && params.txid) {
132
- const res = await fetch(`${arcadeUrl}/v1/tx/${params.txid}`);
133
- const data = await res.json();
134
- return { text: `🛡️ **Transaction Status**\n**TXID**: ${params.txid}\n**Status**: ${data.txStatus || 'Unknown'}` };
135
- }
136
- return { text: `Command '${action}' executed.` };
35
+ },
36
+ required: ["action"]
37
+ },
38
+ async execute(_id, params) {
39
+ log("Executing tool action: %s with params: %O", params.action, params);
40
+ try {
41
+ const { action, txhex, txid } = params;
42
+ switch (action) {
43
+ case "broadcast":
44
+ if (!txhex) throw new Error("txhex is required for broadcast");
45
+ log("Broadcasting transaction: %s...", txhex.slice(0, 64));
46
+ const bResp = await fetch(`${arcadeUrl}/v1/tx`, {
47
+ method: "POST",
48
+ headers: { "Content-Type": "application/json" },
49
+ body: JSON.stringify({ rawTx: txhex })
50
+ });
51
+ const bData = await bResp.json();
52
+ if (!bResp.ok) {
53
+ log("Broadcast failed: %O", bData);
54
+ throw new Error(`Broadcast failed: ${JSON.stringify(bData)}`);
55
+ }
56
+ log("Broadcast successful, TXID: %s", bData.txid);
57
+ return { content: [{ type: "text", text: `Transaction broadcasted! TXID: ${bData.txid}
58
+ Status: ${bData.txStatus}` }] };
59
+ case "status":
60
+ if (!txid) throw new Error("txid is required for status check");
61
+ log("Checking status for TXID: %s", txid);
62
+ const sResp = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
63
+ const sData = await sResp.json();
64
+ if (!sResp.ok) {
65
+ log("Status check failed: %O", sData);
66
+ throw new Error(`Status check failed: ${JSON.stringify(sData)}`);
137
67
  }
138
- catch (error) {
139
- return { text: `❌ Arcade Error: ${error.message}` };
68
+ log("Status: %s, Block: %s", sData.txStatus, sData.blockHeight);
69
+ return { content: [{ type: "text", text: `Transaction ${txid}:
70
+ Status: ${sData.txStatus}
71
+ Block: ${sData.blockHeight || "Pending"}` }] };
72
+ case "proof":
73
+ if (!txid) throw new Error("txid is required for proof retrieval");
74
+ log("Fetching proof for TXID: %s", txid);
75
+ const pResp = await fetch(`${arcadeUrl}/v1/tx/${txid}/proof`);
76
+ if (!pResp.ok) {
77
+ log("Proof retrieval failed: %d", pResp.status);
78
+ throw new Error(`Proof retrieval failed: ${pResp.status}`);
140
79
  }
80
+ const pData = await pResp.arrayBuffer();
81
+ const base64Proof = Buffer.from(pData).toString("base64");
82
+ log("Proof retrieved, length: %d bytes", pData.byteLength);
83
+ return { content: [{ type: "text", text: `Merkle Proof (Base64): ${base64Proof}` }] };
84
+ case "config":
85
+ return { content: [{ type: "text", text: `Arcade Configuration:
86
+ URL: ${arcadeUrl}
87
+ Network: ${network}` }] };
88
+ default:
89
+ throw new Error(`Unknown action: ${action}`);
141
90
  }
91
+ } catch (error) {
92
+ return {
93
+ content: [{
94
+ type: "text",
95
+ text: `Error: ${error.message || String(error)}`
96
+ }]
97
+ };
98
+ }
99
+ }
100
+ });
101
+ api.registerCommand({
102
+ name: "arcade",
103
+ description: "BSV transaction tracking commands",
104
+ acceptsArgs: true,
105
+ handler: async (ctx) => {
106
+ try {
107
+ api.logger?.info?.(`[openclaw-arcade] Command received with args: ${JSON.stringify(ctx.args)} (type: ${typeof ctx.args})`);
108
+ const args = Array.isArray(ctx.args) ? ctx.args : typeof ctx.args === "string" ? ctx.args.split(" ").filter(Boolean) : [];
109
+ const action = args[0] || "config";
110
+ const params = { action };
111
+ if (action === "help") {
112
+ return { text: `\u{1F6E1}\uFE0F **Arcade Help**
113
+
114
+ **Subcommands**:
115
+ - \`status <txid>\`: Check broadcast status
116
+ - \`broadcast <hex>\`: Send raw transaction
117
+ - \`proof <txid>\`: Fetch Merkle Proof
118
+ - \`config\`: Show active URL` };
119
+ }
120
+ if (action === "status" && args[1]) params.txid = args[1];
121
+ if (action === "broadcast" && args[1]) params.txhex = args[1];
122
+ if (action === "status" && params.txid) {
123
+ const res = await fetch(`${arcadeUrl}/v1/tx/${params.txid}`);
124
+ const data = await res.json();
125
+ return { text: `\u{1F6E1}\uFE0F **Transaction Status**
126
+ **TXID**: ${params.txid}
127
+ **Status**: ${data.txStatus || "Unknown"}` };
128
+ }
129
+ return { text: `Command '${action}' executed.` };
130
+ } catch (error) {
131
+ return { text: `\u274C Arcade Error: ${error.message}` };
132
+ }
133
+ }
134
+ });
135
+ api.registerCli(({ program }) => {
136
+ const arc = program.command("arcade").description("BSV transaction tracking commands");
137
+ arc.command("status <txid>").description("Check broadcast status").action(async (txid) => {
138
+ const res = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
139
+ const data = await res.json();
140
+ console.log(JSON.stringify(data, null, 2));
142
141
  });
143
- // 3. CLI
144
- api.registerCli(({ program }) => {
145
- const arc = program.command("arcade").description("BSV transaction tracking commands");
146
- arc.command("status <txid>").description("Check broadcast status").action(async (txid) => {
147
- const res = await fetch(`${arcadeUrl}/v1/tx/${txid}`);
148
- const data = await res.json();
149
- console.log(JSON.stringify(data, null, 2));
150
- });
151
- arc.command("broadcast <hex>").description("Send raw transaction").action(async (txhex) => {
152
- const res = await fetch(`${arcadeUrl}/v1/tx`, {
153
- method: 'POST',
154
- headers: { 'Content-Type': 'application/json' },
155
- body: JSON.stringify({ rawTx: txhex })
156
- });
157
- const data = await res.json();
158
- console.log(JSON.stringify(data, null, 2));
159
- });
160
- arc.command("config").description("Show current Arcade configuration").action(() => {
161
- console.log(JSON.stringify({ arcadeUrl, network }, null, 2));
162
- });
163
- }, { commands: ["arcade"] });
142
+ arc.command("broadcast <hex>").description("Send raw transaction").action(async (txhex) => {
143
+ const res = await fetch(`${arcadeUrl}/v1/tx`, {
144
+ method: "POST",
145
+ headers: { "Content-Type": "application/json" },
146
+ body: JSON.stringify({ rawTx: txhex })
147
+ });
148
+ const data = await res.json();
149
+ console.log(JSON.stringify(data, null, 2));
150
+ });
151
+ arc.command("config").description("Show current Arcade configuration").action(() => {
152
+ console.log(JSON.stringify({ arcadeUrl, network }, null, 2));
153
+ });
154
+ }, { commands: ["arcade"] });
164
155
  }
165
- export const plugin = {
166
- id: "openclaw-arcade-plugin",
167
- name: "BSV Arcade Broadcaster",
168
- description: "Submit and track BSV transactions with full lifecycle visibility",
169
- activate: register,
170
- register: register
156
+ var plugin = {
157
+ id: "openclaw-arcade-plugin",
158
+ name: "BSV Arcade Broadcaster",
159
+ description: "Submit and track BSV transactions with full lifecycle visibility",
160
+ activate: register,
161
+ register
162
+ };
163
+ var index_default = register;
164
+ export {
165
+ index_default as default,
166
+ plugin,
167
+ register
171
168
  };
172
- export default register;
173
- //# sourceMappingURL=index.js.map
169
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAE5C,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAQ;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,aAAa;QAAE,OAAO;IAC1B,aAAa,GAAG,IAAI,CAAC;IAErB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;WAC7B,OAAO,CAAC,QAAQ,CAAC;WACjB,OAAO,CAAC,wBAAwB,CAAC;WACjC,OAAO,CAAC,iBAAiB,CAAC;WAC1B,OAAO,CAAC,YAAY,CAAC;WACrB,EAAE,CAAC;IAEN,MAAM,YAAY,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;IAClF,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,IAAI,SAAS,CAAC;IAClD,MAAM,gBAAgB,GAAG,OAAO,KAAK,SAAS;QAC5C,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,4BAA4B,CAAC;IACjC,MAAM,SAAS,GAAG,CAAC,YAAY,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAElF,UAAU;IACV,GAAG,CAAC,YAAY,CAAC;QACf,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kEAAkE;QAC/E,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;oBAChD,WAAW,EAAE,mBAAmB;iBACjC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0CAA0C;iBACxD;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;QACD,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAW;YACpC,GAAG,CAAC,2CAA2C,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxE,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;gBAEvC,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,WAAW;wBACd,IAAI,CAAC,KAAK;4BAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;wBAC/D,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC3D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE;4BAC9C,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;4BAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;yBACvC,CAAC,CAAC;wBACH,MAAM,KAAK,GAAQ,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;4BACd,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;4BACnC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAChE,CAAC;wBACD,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;wBAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;oBAE1H,KAAK,QAAQ;wBACX,IAAI,CAAC,IAAI;4BAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;wBAChE,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;wBAC1C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,UAAU,IAAI,EAAE,CAAC,CAAC;wBACxD,MAAM,KAAK,GAAQ,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;4BACd,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;4BACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACnE,CAAC;wBACD,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;wBAChE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,IAAI,cAAc,KAAK,CAAC,QAAQ,YAAY,KAAK,CAAC,WAAW,IAAI,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;oBAE5I,KAAK,OAAO;wBACV,IAAI,CAAC,IAAI;4BAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;wBACnE,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;wBACzC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,UAAU,IAAI,QAAQ,CAAC,CAAC;wBAC9D,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;4BACd,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;4BAChD,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC7D,CAAC;wBACD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;wBACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAC1D,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;wBAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;oBACxF,KAAK,QAAQ;wBACX,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,SAAS,cAAc,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;oBAEhH;wBACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;yBACjD,CAAC;iBACH,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,aAAa;IACb,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YAC1B,IAAI,CAAC;gBACH,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,iDAAiD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC3H,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5H,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;gBACnC,MAAM,MAAM,GAAQ,EAAE,MAAM,EAAE,CAAC;gBAE/B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,OAAO,EAAE,IAAI,EAAE,0MAA0M,EAAE,CAAC;gBAC9N,CAAC;gBAED,IAAI,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;oBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAI,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAE9D,0CAA0C;gBAC1C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC7D,MAAM,IAAI,GAAQ,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;oBACnC,OAAO,EAAE,IAAI,EAAE,yCAAyC,MAAM,CAAC,IAAI,iBAAiB,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,EAAE,CAAC;gBACrH,CAAC;gBAED,OAAO,EAAE,IAAI,EAAE,YAAY,MAAM,aAAa,EAAE,CAAC;YACnD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,EAAE,IAAI,EAAE,mBAAmB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,SAAS;IACT,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAO,EAAE,EAAE;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;QACvF,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;YAC/F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,UAAU,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,IAAI,GAAQ,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;YAChG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE;gBAC5C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;aACvC,CAAC,CAAC;YACH,MAAM,IAAI,GAAQ,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;YACjF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,wBAAwB;IAC5B,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,kEAAkE;IAC/E,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {
2
+ "version": 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 * OpenClaw Arcade Plugin\n * Transaction broadcasting and lifecycle tracking via BSV Arcade.\n */\nexport function register(api: any) {\n const version = \"0.2.15\";\n if (isInitialized) return;\n isInitialized = true;\n\n api.logger.info(`[arcade] Initializing Arcade Plugin v${version}`);\n const entries = api.getConfig?.()?.plugins?.entries || {};\n const entry = entries['sv_arcade'] \n || entries['arcade'] \n || entries['openclaw-arcade-plugin'] \n || entries['openclaw-arcade'] \n || entries['bsv-arcade'] \n || {};\n \n const pluginConfig = { ...entry, ...(entry.config || {}), ...(api.config || {}) };\n const network = pluginConfig.network || 'mainnet';\n const defaultArcadeUrl = network === 'testnet' \n ? 'https://testnet.arc.gorillapool.io' \n : 'https://arc.gorillapool.io';\n const arcadeUrl = (pluginConfig.arcadeUrl || defaultArcadeUrl).replace(/\\/$/, '');\n\n // 1. 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 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(`${arcadeUrl}/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(`${arcadeUrl}/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(`${arcadeUrl}/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: ${arcadeUrl}\\nNetwork: ${network}` }] };\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 // 2. 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 // Custom logic for simplified chat output\n if (action === 'status' && params.txid) {\n const res = await fetch(`${arcadeUrl}/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 // 3. CLI\n api.registerCli(({ program }: any) => {\n const arc = program.command(\"arcade\").description(\"BSV transaction tracking commands\");\n arc.command(\"status <txid>\").description(\"Check broadcast status\").action(async (txid: string) => {\n const res = await fetch(`${arcadeUrl}/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(`${arcadeUrl}/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, network }, null, 2));\n });\n }, { commands: [\"arcade\"] });\n }\n\nexport const plugin = {\n id: \"openclaw-arcade-plugin\",\n name: \"BSV Arcade Broadcaster\",\n description: \"Submit and track BSV transactions with full lifecycle visibility\",\n activate: register,\n register: register\n};\n\nexport default register;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/index.ts CHANGED
@@ -10,7 +10,7 @@ let isInitialized = false;
10
10
  * Transaction broadcasting and lifecycle tracking via BSV Arcade.
11
11
  */
12
12
  export function register(api: any) {
13
- const version = "0.2.13";
13
+ const version = "0.2.15";
14
14
  if (isInitialized) return;
15
15
  isInitialized = true;
16
16
 
@@ -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.14",
5
+ "version": "0.2.16",
6
6
  "skills": [
7
7
  "./SKILL.md"
8
8
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclaw-arcade-plugin",
3
- "version": "0.2.14",
3
+ "version": "0.2.16",
4
4
  "description": "OpenClaw plugin for transaction broadcasting and lifecycle tracking via BSV Arcade",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,16 +13,16 @@
13
13
  "README.md"
14
14
  ],
15
15
  "scripts": {
16
- "build": "tsc",
16
+ "build": "node ../../bundle.js arcade",
17
17
  "prepublishOnly": "npm run build && npm test",
18
18
  "lint": "eslint src/**/*.ts",
19
19
  "test": "npx tsx src/arcade.test.ts",
20
- "postversion": "node ../sync_versions.js",
21
- "postinstall": "node -e \"try{require('better-sqlite3')}catch{console.log('Note: better-sqlite3 requires build tools. If install failed, ensure python3 and a C++ compiler are available.')}\""
20
+ "postversion": "node ../../sync_versions.js",
21
+ "postinstall": "node -e \"try{require('sqlite3')}catch{console.log('Note: sqlite3 requires build tools if prebuilt binaries are unavailable.')}\""
22
22
  },
23
23
  "dependencies": {
24
24
  "@bsv/sdk": "^2.0.13",
25
- "better-sqlite3": "11.3.0",
25
+ "openclaw-plugin-core": "workspace:*",
26
26
  "debug": "^4.4.0"
27
27
  },
28
28
  "devDependencies": {