@bsv/wallet-toolbox 2.1.3 → 2.1.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.
Files changed (42) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/docs/client.md +269 -43
  3. package/docs/monitor.md +92 -6
  4. package/docs/services.md +163 -21
  5. package/docs/wallet.md +269 -43
  6. package/out/src/index.all.d.ts +1 -0
  7. package/out/src/index.all.d.ts.map +1 -1
  8. package/out/src/index.all.js +1 -0
  9. package/out/src/index.all.js.map +1 -1
  10. package/out/src/index.mobile.d.ts +1 -0
  11. package/out/src/index.mobile.d.ts.map +1 -1
  12. package/out/src/index.mobile.js +1 -0
  13. package/out/src/index.mobile.js.map +1 -1
  14. package/out/src/monitor/Monitor.d.ts +24 -0
  15. package/out/src/monitor/Monitor.d.ts.map +1 -1
  16. package/out/src/monitor/Monitor.js +24 -1
  17. package/out/src/monitor/Monitor.js.map +1 -1
  18. package/out/src/monitor/tasks/TaskArcSSE.d.ts +27 -0
  19. package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -0
  20. package/out/src/monitor/tasks/TaskArcSSE.js +260 -0
  21. package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -0
  22. package/out/src/monitor/tasks/__tests/TaskArcSSE.test.d.ts +2 -0
  23. package/out/src/monitor/tasks/__tests/TaskArcSSE.test.d.ts.map +1 -0
  24. package/out/src/monitor/tasks/__tests/TaskArcSSE.test.js +257 -0
  25. package/out/src/monitor/tasks/__tests/TaskArcSSE.test.js.map +1 -0
  26. package/out/src/services/Services.d.ts +1 -1
  27. package/out/src/services/Services.d.ts.map +1 -1
  28. package/out/src/services/Services.js +5 -3
  29. package/out/src/services/Services.js.map +1 -1
  30. package/out/src/services/index.d.ts +1 -0
  31. package/out/src/services/index.d.ts.map +1 -1
  32. package/out/src/services/index.js +1 -0
  33. package/out/src/services/index.js.map +1 -1
  34. package/out/src/services/providers/ArcSSEClient.d.ts +57 -0
  35. package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -0
  36. package/out/src/services/providers/ArcSSEClient.js +111 -0
  37. package/out/src/services/providers/ArcSSEClient.js.map +1 -0
  38. package/out/src/services/providers/__tests/ArcSSEClient.test.d.ts +2 -0
  39. package/out/src/services/providers/__tests/ArcSSEClient.test.d.ts.map +1 -0
  40. package/out/src/services/providers/__tests/ArcSSEClient.test.js +256 -0
  41. package/out/src/services/providers/__tests/ArcSSEClient.test.js.map +1 -0
  42. package/package.json +3 -3
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Client for Arcade transaction status updates.
4
+ *
5
+ * Uses react-native-sse EventSource to connect to Arcade's
6
+ * `GET /events?callbackToken=<token>` endpoint for real-time
7
+ * status updates via SSE.
8
+ *
9
+ * Supports on-demand fetching via fetchEvents() for use on
10
+ * app open, balance refresh, transaction list view, etc.
11
+ * The EventSource stays connected between fetches for live updates.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ArcSSEClient = void 0;
15
+ const TAG = '[ArcSSE]';
16
+ class ArcSSEClient {
17
+ constructor(options) {
18
+ this.options = options;
19
+ this.es = null;
20
+ this.connected = false;
21
+ this.connecting = false;
22
+ this._lastEventId = options.lastEventId;
23
+ let base = options.baseUrl;
24
+ while (base.endsWith('/')) {
25
+ base = base.slice(0, -1);
26
+ }
27
+ this.url = `${base}/events?callbackToken=${encodeURIComponent(options.callbackToken)}`;
28
+ }
29
+ get lastEventId() {
30
+ return this._lastEventId;
31
+ }
32
+ /**
33
+ * Open the SSE connection. Events will be dispatched via onEvent as they arrive.
34
+ */
35
+ connect() {
36
+ if (this.es) {
37
+ console.log(`${TAG} already connected`);
38
+ return;
39
+ }
40
+ this.connecting = true;
41
+ const ESClass = this.options.EventSourceClass;
42
+ const headers = {
43
+ 'Last-Event-ID': this._lastEventId || '0'
44
+ };
45
+ if (this.options.arcApiKey) {
46
+ headers['Authorization'] = `Bearer ${this.options.arcApiKey}`;
47
+ }
48
+ console.log(`${TAG} connecting to ${this.url} (Last-Event-ID: ${headers['Last-Event-ID']})`);
49
+ this.es = new ESClass(this.url, {
50
+ headers,
51
+ debug: true,
52
+ pollingInterval: 0 // Don't auto-reconnect on close — we manage lifecycle
53
+ });
54
+ this.es.addEventListener('open', () => {
55
+ this.connected = true;
56
+ this.connecting = false;
57
+ console.log(`${TAG} connected`);
58
+ });
59
+ this.es.addEventListener('status', (event) => {
60
+ var _a, _b;
61
+ try {
62
+ const data = JSON.parse(event.data);
63
+ console.log(`${TAG} event: txid=${data.txid} status=${data.txStatus}`);
64
+ if (event.lastEventId) {
65
+ this._lastEventId = event.lastEventId;
66
+ (_b = (_a = this.options).onLastEventIdChanged) === null || _b === void 0 ? void 0 : _b.call(_a, event.lastEventId);
67
+ }
68
+ this.options.onEvent(data);
69
+ }
70
+ catch (_c) {
71
+ console.log(`${TAG} malformed event: ${String(event.data).substring(0, 200)}`);
72
+ }
73
+ });
74
+ this.es.addEventListener('error', (event) => {
75
+ var _a, _b;
76
+ console.log(`${TAG} error:`, JSON.stringify(event));
77
+ this.connected = false;
78
+ this.connecting = false;
79
+ (_b = (_a = this.options).onError) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(event.message || 'SSE error'));
80
+ });
81
+ }
82
+ /** Close the connection and clean up */
83
+ close() {
84
+ if (this.es) {
85
+ console.log(`${TAG} closing`);
86
+ this.es.close();
87
+ this.es = null;
88
+ this.connected = false;
89
+ this.connecting = false;
90
+ }
91
+ }
92
+ /**
93
+ * Ensure connection is open. If already connected, this is a no-op.
94
+ * If not connected, opens a new connection with catchup from lastEventId.
95
+ * Returns immediately — events arrive asynchronously via onEvent callback.
96
+ */
97
+ async fetchEvents() {
98
+ if (!this.es && !this.connecting) {
99
+ this.connect();
100
+ }
101
+ else if (this.es && !this.connected && !this.connecting) {
102
+ // Connection exists but failed — reconnect
103
+ this.close();
104
+ this.connect();
105
+ }
106
+ // Events arrive asynchronously — return 0 since we can't know the count synchronously
107
+ return 0;
108
+ }
109
+ }
110
+ exports.ArcSSEClient = ArcSSEClient;
111
+ //# sourceMappingURL=ArcSSEClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcSSEClient.js","sourceRoot":"","sources":["../../../../src/services/providers/ArcSSEClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ArcSSEClient.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcSSEClient.test.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/__tests/ArcSSEClient.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ArcSSEClient_1 = require("../ArcSSEClient");
4
+ /** Minimal fake EventSource that records listener registrations and lets tests fire them */
5
+ class FakeEventSource {
6
+ constructor(url, opts) {
7
+ this.listeners = {};
8
+ this.closed = false;
9
+ this.url = url;
10
+ this.opts = opts;
11
+ FakeEventSource.instances.push(this);
12
+ }
13
+ addEventListener(type, fn) {
14
+ if (!this.listeners[type])
15
+ this.listeners[type] = [];
16
+ this.listeners[type].push(fn);
17
+ }
18
+ /** Helper used by tests to simulate an incoming server event */
19
+ emit(type, event = {}) {
20
+ var _a;
21
+ for (const fn of (_a = this.listeners[type]) !== null && _a !== void 0 ? _a : []) {
22
+ fn(event);
23
+ }
24
+ }
25
+ close() {
26
+ this.closed = true;
27
+ }
28
+ }
29
+ FakeEventSource.instances = [];
30
+ function makeClient(overrides = {}) {
31
+ FakeEventSource.instances = [];
32
+ const events = [];
33
+ const errors = [];
34
+ const lastEventIds = [];
35
+ const client = new ArcSSEClient_1.ArcSSEClient({
36
+ baseUrl: 'https://arcade.example.com',
37
+ callbackToken: 'tok-abc123',
38
+ onEvent: e => events.push(e),
39
+ onError: e => errors.push(e),
40
+ onLastEventIdChanged: id => lastEventIds.push(id),
41
+ EventSourceClass: FakeEventSource,
42
+ ...overrides
43
+ });
44
+ return { client, events, errors, lastEventIds };
45
+ }
46
+ describe('ArcSSEClient', () => {
47
+ beforeEach(() => {
48
+ FakeEventSource.instances = [];
49
+ jest.spyOn(console, 'log').mockImplementation(() => { });
50
+ });
51
+ afterEach(() => {
52
+ jest.restoreAllMocks();
53
+ });
54
+ // ── URL construction ──────────────────────────────────────────────────────
55
+ describe('URL construction', () => {
56
+ test('builds correct URL with no trailing slash', () => {
57
+ const { client } = makeClient({ baseUrl: 'https://arcade.example.com' });
58
+ client.connect();
59
+ const es = FakeEventSource.instances[0];
60
+ expect(es.url).toBe('https://arcade.example.com/events?callbackToken=tok-abc123');
61
+ });
62
+ test('strips single trailing slash from baseUrl', () => {
63
+ const { client } = makeClient({ baseUrl: 'https://arcade.example.com/' });
64
+ client.connect();
65
+ expect(FakeEventSource.instances[0].url).toBe('https://arcade.example.com/events?callbackToken=tok-abc123');
66
+ });
67
+ test('strips multiple trailing slashes from baseUrl', () => {
68
+ const { client } = makeClient({ baseUrl: 'https://arcade.example.com///' });
69
+ client.connect();
70
+ expect(FakeEventSource.instances[0].url).toBe('https://arcade.example.com/events?callbackToken=tok-abc123');
71
+ });
72
+ test('percent-encodes callbackToken in URL', () => {
73
+ const { client } = makeClient({ callbackToken: 'tok with spaces & chars' });
74
+ client.connect();
75
+ expect(FakeEventSource.instances[0].url).toContain('callbackToken=tok%20with%20spaces%20%26%20chars');
76
+ });
77
+ });
78
+ // ── connect ───────────────────────────────────────────────────────────────
79
+ describe('connect()', () => {
80
+ test('creates an EventSource with correct headers', () => {
81
+ const { client } = makeClient();
82
+ client.connect();
83
+ const es = FakeEventSource.instances[0];
84
+ expect(es.opts.headers['Last-Event-ID']).toBe('0');
85
+ });
86
+ test('uses lastEventId from options as Last-Event-ID header', () => {
87
+ const { client } = makeClient({ lastEventId: '42' });
88
+ client.connect();
89
+ expect(FakeEventSource.instances[0].opts.headers['Last-Event-ID']).toBe('42');
90
+ });
91
+ test('does not create a second EventSource when already connected', () => {
92
+ const { client } = makeClient();
93
+ client.connect();
94
+ client.connect();
95
+ expect(FakeEventSource.instances.length).toBe(1);
96
+ });
97
+ test('open event sets connected state (no crash)', () => {
98
+ const { client } = makeClient();
99
+ client.connect();
100
+ const es = FakeEventSource.instances[0];
101
+ expect(() => es.emit('open')).not.toThrow();
102
+ });
103
+ });
104
+ // ── status event handling ─────────────────────────────────────────────────
105
+ describe('status events', () => {
106
+ test('dispatches parsed event to onEvent callback', () => {
107
+ const { client, events } = makeClient();
108
+ client.connect();
109
+ const es = FakeEventSource.instances[0];
110
+ const payload = { txid: 'aaaa', txStatus: 'MINED', timestamp: '2025-01-01T00:00:00Z' };
111
+ es.emit('status', { data: JSON.stringify(payload) });
112
+ expect(events).toHaveLength(1);
113
+ expect(events[0]).toEqual(payload);
114
+ });
115
+ test('updates lastEventId and calls onLastEventIdChanged', () => {
116
+ const { client, lastEventIds } = makeClient();
117
+ client.connect();
118
+ const es = FakeEventSource.instances[0];
119
+ es.emit('status', {
120
+ data: JSON.stringify({ txid: 'bbbb', txStatus: 'SEEN_ON_NETWORK', timestamp: '' }),
121
+ lastEventId: '99'
122
+ });
123
+ expect(client.lastEventId).toBe('99');
124
+ expect(lastEventIds).toEqual(['99']);
125
+ });
126
+ test('does not update lastEventId when event has no lastEventId', () => {
127
+ const { client } = makeClient({ lastEventId: 'initial' });
128
+ client.connect();
129
+ const es = FakeEventSource.instances[0];
130
+ es.emit('status', {
131
+ data: JSON.stringify({ txid: 'cccc', txStatus: 'MINED', timestamp: '' })
132
+ // no lastEventId field
133
+ });
134
+ expect(client.lastEventId).toBe('initial');
135
+ });
136
+ test('ignores malformed JSON without throwing', () => {
137
+ const { client, events } = makeClient();
138
+ client.connect();
139
+ const es = FakeEventSource.instances[0];
140
+ expect(() => es.emit('status', { data: 'not-json' })).not.toThrow();
141
+ expect(events).toHaveLength(0);
142
+ });
143
+ });
144
+ // ── error event handling ──────────────────────────────────────────────────
145
+ describe('error events', () => {
146
+ test('calls onError with message from event', () => {
147
+ const { client, errors } = makeClient();
148
+ client.connect();
149
+ FakeEventSource.instances[0].emit('error', { message: 'connection refused' });
150
+ expect(errors).toHaveLength(1);
151
+ expect(errors[0].message).toBe('connection refused');
152
+ });
153
+ test('calls onError with generic message when event has no message', () => {
154
+ const { client, errors } = makeClient();
155
+ client.connect();
156
+ FakeEventSource.instances[0].emit('error', {});
157
+ expect(errors[0].message).toBe('SSE error');
158
+ });
159
+ test('does not throw when onError is not provided', () => {
160
+ const client = new ArcSSEClient_1.ArcSSEClient({
161
+ baseUrl: 'https://arcade.example.com',
162
+ callbackToken: 'tok',
163
+ onEvent: () => { },
164
+ EventSourceClass: FakeEventSource
165
+ });
166
+ client.connect();
167
+ expect(() => FakeEventSource.instances[0].emit('error', {})).not.toThrow();
168
+ });
169
+ });
170
+ // ── close ─────────────────────────────────────────────────────────────────
171
+ describe('close()', () => {
172
+ test('calls close on the underlying EventSource', () => {
173
+ const { client } = makeClient();
174
+ client.connect();
175
+ const es = FakeEventSource.instances[0];
176
+ client.close();
177
+ expect(es.closed).toBe(true);
178
+ });
179
+ test('is a no-op when not connected', () => {
180
+ const { client } = makeClient();
181
+ expect(() => client.close()).not.toThrow();
182
+ });
183
+ test('allows reconnect after close', () => {
184
+ const { client } = makeClient();
185
+ client.connect();
186
+ client.close();
187
+ client.connect();
188
+ expect(FakeEventSource.instances.length).toBe(2);
189
+ });
190
+ });
191
+ // ── fetchEvents ───────────────────────────────────────────────────────────
192
+ describe('fetchEvents()', () => {
193
+ test('returns 0', async () => {
194
+ const { client } = makeClient();
195
+ const result = await client.fetchEvents();
196
+ expect(result).toBe(0);
197
+ });
198
+ test('opens connection if not already connected', async () => {
199
+ const { client } = makeClient();
200
+ await client.fetchEvents();
201
+ expect(FakeEventSource.instances.length).toBe(1);
202
+ });
203
+ test('does not open a second connection when already connected', async () => {
204
+ const { client } = makeClient();
205
+ client.connect();
206
+ FakeEventSource.instances[0].emit('open'); // mark as connected
207
+ await client.fetchEvents();
208
+ expect(FakeEventSource.instances.length).toBe(1);
209
+ });
210
+ test('does not reconnect while connecting (open not yet fired)', async () => {
211
+ const { client } = makeClient();
212
+ client.connect();
213
+ // es exists, connected=false but connecting=true (open never fired yet)
214
+ await client.fetchEvents();
215
+ // should NOT tear down — still in connecting state
216
+ expect(FakeEventSource.instances[0].closed).toBeFalsy();
217
+ expect(FakeEventSource.instances.length).toBe(1);
218
+ });
219
+ test('reconnects with stale (errored) EventSource by closing first', async () => {
220
+ const { client } = makeClient();
221
+ client.connect();
222
+ // Simulate error which clears connecting flag
223
+ FakeEventSource.instances[0].emit('error', { message: 'fail' });
224
+ // Now es exists, connected=false, connecting=false — should reconnect
225
+ await client.fetchEvents();
226
+ expect(FakeEventSource.instances[0].closed).toBe(true);
227
+ expect(FakeEventSource.instances.length).toBe(2);
228
+ });
229
+ });
230
+ // ── lastEventId getter ────────────────────────────────────────────────────
231
+ describe('lastEventId', () => {
232
+ test('returns undefined when not set', () => {
233
+ const { client } = makeClient();
234
+ expect(client.lastEventId).toBeUndefined();
235
+ });
236
+ test('returns initial value from options', () => {
237
+ const { client } = makeClient({ lastEventId: 'start' });
238
+ expect(client.lastEventId).toBe('start');
239
+ });
240
+ test('advances as events are received', () => {
241
+ const { client } = makeClient();
242
+ client.connect();
243
+ const es = FakeEventSource.instances[0];
244
+ es.emit('status', {
245
+ data: JSON.stringify({ txid: 'x', txStatus: 'MINED', timestamp: '' }),
246
+ lastEventId: '1'
247
+ });
248
+ es.emit('status', {
249
+ data: JSON.stringify({ txid: 'y', txStatus: 'MINED', timestamp: '' }),
250
+ lastEventId: '2'
251
+ });
252
+ expect(client.lastEventId).toBe('2');
253
+ });
254
+ });
255
+ });
256
+ //# sourceMappingURL=ArcSSEClient.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcSSEClient.test.js","sourceRoot":"","sources":["../../../../../src/services/providers/__tests/ArcSSEClient.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/wallet-toolbox",
3
- "version": "2.1.3",
3
+ "version": "2.1.5",
4
4
  "description": "BRC100 conforming wallet, wallet storage and wallet signer components",
5
5
  "main": "./out/src/index.js",
6
6
  "types": "./out/src/index.d.ts",
@@ -39,8 +39,8 @@
39
39
  "homepage": "https://github.com/bsv-blockchain/wallet-toolbox#readme",
40
40
  "dependencies": {
41
41
  "@bsv/auth-express-middleware": "^2.0.4",
42
- "@bsv/payment-express-middleware": "^2.0.0",
43
- "@bsv/sdk": "^2.0.4",
42
+ "@bsv/payment-express-middleware": "^2.0.1",
43
+ "@bsv/sdk": "^2.0.6",
44
44
  "better-sqlite3": "^12.6.2",
45
45
  "express": "^4.21.2",
46
46
  "idb": "^8.0.2",