@arkade-os/sdk 0.4.71 → 0.4.72
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/README.md +29 -0
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{asyncStorageTaskQueue-CjKAUiuj.d.ts → asyncStorageTaskQueue-DhhNZc4v.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-DgXf4iuU.d.cts → asyncStorageTaskQueue-s5lUGWxu.d.cts} +2 -2
- package/dist/{chunk-I7ZNWBBU.cjs → chunk-4BWZ437E.cjs} +21 -17
- package/dist/chunk-4BWZ437E.cjs.map +1 -0
- package/dist/{chunk-FM263GKH.cjs → chunk-4C5PMGBB.cjs} +51 -25
- package/dist/chunk-4C5PMGBB.cjs.map +1 -0
- package/dist/{chunk-2ZX4Z2IP.js → chunk-5GQFYVWP.js} +30 -5
- package/dist/chunk-5GQFYVWP.js.map +1 -0
- package/dist/{chunk-5J5PDZRR.cjs → chunk-6FTHFJAN.cjs} +30 -4
- package/dist/chunk-6FTHFJAN.cjs.map +1 -0
- package/dist/{chunk-E5JNYFOF.js → chunk-BHLYB44A.js} +210 -53
- package/dist/chunk-BHLYB44A.js.map +1 -0
- package/dist/{chunk-ALZ2CZ3T.js → chunk-CB6QPAO5.js} +3 -3
- package/dist/{chunk-ALZ2CZ3T.js.map → chunk-CB6QPAO5.js.map} +1 -1
- package/dist/{chunk-NOWVA5CM.js → chunk-CZPBPMO2.js} +4 -4
- package/dist/{chunk-NOWVA5CM.js.map → chunk-CZPBPMO2.js.map} +1 -1
- package/dist/{chunk-ZT3EM4CE.js → chunk-IGER5FPC.js} +37 -11
- package/dist/chunk-IGER5FPC.js.map +1 -0
- package/dist/{chunk-7PHMT3T4.cjs → chunk-KDMHEWTD.cjs} +10 -10
- package/dist/{chunk-7PHMT3T4.cjs.map → chunk-KDMHEWTD.cjs.map} +1 -1
- package/dist/{chunk-P6EXRY5L.cjs → chunk-NPM5YZBC.cjs} +49 -49
- package/dist/{chunk-P6EXRY5L.cjs.map → chunk-NPM5YZBC.cjs.map} +1 -1
- package/dist/{chunk-SCSLCU66.js → chunk-S5PUFSXC.js} +8 -4
- package/dist/chunk-S5PUFSXC.js.map +1 -0
- package/dist/{chunk-MK5EPTTB.cjs → chunk-U5I3ITV7.cjs} +643 -485
- package/dist/chunk-U5I3ITV7.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-D-gEEqrP.d.cts → delegate-BJp8f6LT.d.cts} +1 -1
- package/dist/{delegate-CKJdsC99.d.ts → delegate-Ckz_TWzM.d.ts} +1 -1
- package/dist/{hdWalletCapable-CwLPmWct.d.cts → hdWalletCapable-DA9bJ5eB.d.cts} +2 -2
- package/dist/{hdWalletCapable-BJ4pvkai.d.ts → hdWalletCapable-DABgAD-T.d.ts} +2 -2
- package/dist/{index-Boppyqav.d.ts → index-B8xrELXY.d.ts} +2 -2
- package/dist/{index-BE1uFXrV.d.cts → index-DSbDm0Io.d.cts} +2 -2
- package/dist/{index-CyGnhCSS.d.ts → index-Dg0-TvBQ.d.cts} +51 -3
- package/dist/{index-CyGnhCSS.d.cts → index-Dg0-TvBQ.d.ts} +51 -3
- package/dist/index.cjs +306 -298
- package/dist/index.d.cts +54 -10
- package/dist/index.d.ts +54 -10
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.d.cts +2 -2
- package/dist/repositories/sqlite/index.d.ts +2 -2
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-CjmMH_rW.d.cts → taskRunner-BH_FxaNI.d.cts} +2 -2
- package/dist/{taskRunner-l3zyfW_Q.d.ts → taskRunner-DrVz2QZs.d.ts} +2 -2
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.d.cts +4 -4
- package/dist/wallet/expo/index.d.ts +4 -4
- package/dist/wallet/expo/index.js +5 -5
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-2ZX4Z2IP.js.map +0 -1
- package/dist/chunk-5J5PDZRR.cjs.map +0 -1
- package/dist/chunk-E5JNYFOF.js.map +0 -1
- package/dist/chunk-FM263GKH.cjs.map +0 -1
- package/dist/chunk-I7ZNWBBU.cjs.map +0 -1
- package/dist/chunk-MK5EPTTB.cjs.map +0 -1
- package/dist/chunk-SCSLCU66.js.map +0 -1
- package/dist/chunk-ZT3EM4CE.js.map +0 -1
package/README.md
CHANGED
|
@@ -1396,6 +1396,35 @@ const swWallet = await ServiceWorkerWallet.setup({
|
|
|
1396
1396
|
|
|
1397
1397
|
Raise it when the external issuer is expected to burn more than `N` consecutive addresses without any of them being paid — every index in such a run is a miss, and the funded one sits past the band. When that happens the funds are invisible until a `restore()` whose `gapLimit` is large enough to cross the run (`wallet.restore({ gapLimit: 200 })`); a default restore closes its gap window before reaching the funded index. Keep the value modest: the band adds up to `2N + 1` indices × the candidate matrix (typically 1-4 scripts each) to the wallet's subscription.
|
|
1398
1398
|
|
|
1399
|
+
#### Restoring plugin state
|
|
1400
|
+
|
|
1401
|
+
`wallet.restore()` is the explicit imported-wallet recovery boundary. It first restores the
|
|
1402
|
+
wallet's own addresses, contracts, history, and balances, then runs every restore hook registered
|
|
1403
|
+
for that wallet instance. `Wallet` and `ServiceWorkerWallet` both follow this ordering, and
|
|
1404
|
+
concurrent calls coalesce until the hooks finish.
|
|
1405
|
+
|
|
1406
|
+
```typescript
|
|
1407
|
+
import { registerWalletRestoreHook } from '@arkade-os/sdk'
|
|
1408
|
+
|
|
1409
|
+
const unregister = registerWalletRestoreHook(wallet, {
|
|
1410
|
+
id: 'my-plugin',
|
|
1411
|
+
restore: async (restoredWallet) => {
|
|
1412
|
+
await rebuildPluginState(await restoredWallet.getTransactionHistory())
|
|
1413
|
+
},
|
|
1414
|
+
})
|
|
1415
|
+
|
|
1416
|
+
await wallet.restore()
|
|
1417
|
+
```
|
|
1418
|
+
|
|
1419
|
+
Registering the same `id` again replaces that hook without changing its position. A run uses a
|
|
1420
|
+
stable snapshot, attempts every hook in registration order, and throws an `AggregateError` after
|
|
1421
|
+
all failures have been collected. If core recovery fails, hooks do not run. The returned function
|
|
1422
|
+
removes only that exact registration and is safe to call more than once.
|
|
1423
|
+
|
|
1424
|
+
Hooks do not run during `Wallet.create()`, `ServiceWorkerWallet.setup()`, or ordinary startup. A
|
|
1425
|
+
plugin should register before an application calls `restore()` and keep its normal incremental
|
|
1426
|
+
reconciliation for state that arrives later.
|
|
1427
|
+
|
|
1399
1428
|
For advanced use cases, you can access the ContractManager directly to register external contracts:
|
|
1400
1429
|
|
|
1401
1430
|
```typescript
|
package/dist/adapters/expo.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
require('../chunk-
|
|
3
|
+
var chunk4BWZ437E_cjs = require('../chunk-4BWZ437E.cjs');
|
|
4
|
+
require('../chunk-4C5PMGBB.cjs');
|
|
5
|
+
require('../chunk-6FTHFJAN.cjs');
|
|
6
6
|
require('../chunk-5BLDMQED.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, "ExpoArkProvider", {
|
|
11
11
|
enumerable: true,
|
|
12
|
-
get: function () { return
|
|
12
|
+
get: function () { return chunk4BWZ437E_cjs.ExpoArkProvider; }
|
|
13
13
|
});
|
|
14
14
|
Object.defineProperty(exports, "ExpoIndexerProvider", {
|
|
15
15
|
enumerable: true,
|
|
16
|
-
get: function () { return
|
|
16
|
+
get: function () { return chunk4BWZ437E_cjs.ExpoIndexerProvider; }
|
|
17
17
|
});
|
|
18
18
|
//# sourceMappingURL=expo.cjs.map
|
|
19
19
|
//# sourceMappingURL=expo.cjs.map
|
package/dist/adapters/expo.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as RestArkProvider, k as SettlementEvent, T as TxNotificationEvent, o as RestIndexerProvider, p as SubscriptionResponse } from '../index-
|
|
2
|
-
export { q as ArkProvider, r as IndexerProvider } from '../index-
|
|
1
|
+
import { n as RestArkProvider, k as SettlementEvent, T as TxNotificationEvent, o as RestIndexerProvider, p as SubscriptionResponse } from '../index-Dg0-TvBQ.cjs';
|
|
2
|
+
export { q as ArkProvider, r as IndexerProvider } from '../index-Dg0-TvBQ.cjs';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer';
|
package/dist/adapters/expo.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as RestArkProvider, k as SettlementEvent, T as TxNotificationEvent, o as RestIndexerProvider, p as SubscriptionResponse } from '../index-
|
|
2
|
-
export { q as ArkProvider, r as IndexerProvider } from '../index-
|
|
1
|
+
import { n as RestArkProvider, k as SettlementEvent, T as TxNotificationEvent, o as RestIndexerProvider, p as SubscriptionResponse } from '../index-Dg0-TvBQ.js';
|
|
2
|
+
export { q as ArkProvider, r as IndexerProvider } from '../index-Dg0-TvBQ.js';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer';
|
package/dist/adapters/expo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ExpoArkProvider, ExpoIndexerProvider } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { ExpoArkProvider, ExpoIndexerProvider } from '../chunk-S5PUFSXC.js';
|
|
2
|
+
import '../chunk-IGER5FPC.js';
|
|
3
|
+
import '../chunk-5GQFYVWP.js';
|
|
4
4
|
import '../chunk-NSBPE2FW.js';
|
|
5
5
|
//# sourceMappingURL=expo.js.map
|
|
6
6
|
//# sourceMappingURL=expo.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
require('../chunk-
|
|
6
|
-
require('../chunk-
|
|
3
|
+
var chunkU5I3ITV7_cjs = require('../chunk-U5I3ITV7.cjs');
|
|
4
|
+
require('../chunk-4C5PMGBB.cjs');
|
|
5
|
+
require('../chunk-NPM5YZBC.cjs');
|
|
6
|
+
require('../chunk-6FTHFJAN.cjs');
|
|
7
7
|
require('../chunk-5BLDMQED.cjs');
|
|
8
8
|
|
|
9
9
|
// src/storage/indexedDB.ts
|
|
@@ -11,7 +11,7 @@ var IndexedDBStorageAdapter = class {
|
|
|
11
11
|
dbName;
|
|
12
12
|
version;
|
|
13
13
|
db = null;
|
|
14
|
-
constructor(dbName, version =
|
|
14
|
+
constructor(dbName, version = chunkU5I3ITV7_cjs.DB_VERSION) {
|
|
15
15
|
this.dbName = dbName;
|
|
16
16
|
this.version = version;
|
|
17
17
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DB_VERSION } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
import { DB_VERSION } from '../chunk-BHLYB44A.js';
|
|
2
|
+
import '../chunk-IGER5FPC.js';
|
|
3
|
+
import '../chunk-CB6QPAO5.js';
|
|
4
|
+
import '../chunk-5GQFYVWP.js';
|
|
5
5
|
import '../chunk-NSBPE2FW.js';
|
|
6
6
|
|
|
7
7
|
// src/storage/indexedDB.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as TaskQueue, c as TaskItem, d as TaskResult } from './taskRunner-DrVz2QZs.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Minimal async key-value storage interface.
|
|
@@ -46,4 +46,4 @@ declare class AsyncStorageTaskQueue implements TaskQueue {
|
|
|
46
46
|
private writeList;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
export {
|
|
49
|
+
export { AsyncStorageTaskQueue as A, type AsyncStorageLike as a };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as TaskQueue, c as TaskItem, d as TaskResult } from './taskRunner-BH_FxaNI.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Minimal async key-value storage interface.
|
|
@@ -46,4 +46,4 @@ declare class AsyncStorageTaskQueue implements TaskQueue {
|
|
|
46
46
|
private writeList;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
export {
|
|
49
|
+
export { AsyncStorageTaskQueue as A, type AsyncStorageLike as a };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk4C5PMGBB_cjs = require('./chunk-4C5PMGBB.cjs');
|
|
4
|
+
var chunk6FTHFJAN_cjs = require('./chunk-6FTHFJAN.cjs');
|
|
5
5
|
|
|
6
6
|
// src/providers/expoUtils.ts
|
|
7
7
|
async function getExpoFetch(options) {
|
|
@@ -10,8 +10,8 @@ async function getExpoFetch(options) {
|
|
|
10
10
|
console.debug("Using expo/fetch for streaming");
|
|
11
11
|
const expoFetchWithHeader = (input, init) => {
|
|
12
12
|
const headers = new Headers(init?.headers);
|
|
13
|
-
headers.set("X-Build-Version",
|
|
14
|
-
headers.set("X-SDK-VERSION",
|
|
13
|
+
headers.set("X-Build-Version", chunk6FTHFJAN_cjs.buildVersion);
|
|
14
|
+
headers.set("X-SDK-VERSION", chunk6FTHFJAN_cjs.sdkVersion);
|
|
15
15
|
return expoFetchModule.fetch(input, { ...init, headers });
|
|
16
16
|
};
|
|
17
17
|
return expoFetchWithHeader;
|
|
@@ -20,7 +20,7 @@ async function getExpoFetch(options) {
|
|
|
20
20
|
"Using standard fetch instead of expo/fetch. Streaming may not be fully supported in some environments.",
|
|
21
21
|
error
|
|
22
22
|
);
|
|
23
|
-
return
|
|
23
|
+
return chunk6FTHFJAN_cjs.fetch;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
async function* sseStreamIterator(url, abortSignal, fetchFn, headers, parseData) {
|
|
@@ -33,6 +33,10 @@ async function* sseStreamIterator(url, abortSignal, fetchFn, headers, parseData)
|
|
|
33
33
|
Accept: "text/event-stream",
|
|
34
34
|
...headers
|
|
35
35
|
},
|
|
36
|
+
// Required, not just for cancellation: `getExpoFetch` falls back to
|
|
37
|
+
// the Ark `fetch` wrapper, which routes through `baseFetch` and so
|
|
38
|
+
// bounds any read that brings no signal of its own. Drop this and
|
|
39
|
+
// the stream is truncated at READ_TIMEOUT_MS.
|
|
36
40
|
signal: fetchController.signal
|
|
37
41
|
});
|
|
38
42
|
if (!response.ok) {
|
|
@@ -77,8 +81,8 @@ async function* sseStreamIterator(url, abortSignal, fetchFn, headers, parseData)
|
|
|
77
81
|
}
|
|
78
82
|
|
|
79
83
|
// src/providers/expoArk.ts
|
|
80
|
-
var ExpoArkProvider = class extends
|
|
81
|
-
constructor(serverUrl =
|
|
84
|
+
var ExpoArkProvider = class extends chunk6FTHFJAN_cjs.RestArkProvider {
|
|
85
|
+
constructor(serverUrl = chunk6FTHFJAN_cjs.DEFAULT_ARKADE_SERVER_URL) {
|
|
82
86
|
super(serverUrl);
|
|
83
87
|
}
|
|
84
88
|
async *getEventStream(signal, topics) {
|
|
@@ -98,7 +102,7 @@ var ExpoArkProvider = class extends chunk5J5PDZRR_cjs.RestArkProvider {
|
|
|
98
102
|
if (error instanceof Error && error.name === "AbortError") {
|
|
99
103
|
break;
|
|
100
104
|
}
|
|
101
|
-
if (
|
|
105
|
+
if (chunk6FTHFJAN_cjs.isFetchTimeoutError(error)) {
|
|
102
106
|
console.debug("Timeout error ignored");
|
|
103
107
|
continue;
|
|
104
108
|
}
|
|
@@ -119,7 +123,7 @@ var ExpoArkProvider = class extends chunk5J5PDZRR_cjs.RestArkProvider {
|
|
|
119
123
|
if (error instanceof Error && error.name === "AbortError") {
|
|
120
124
|
break;
|
|
121
125
|
}
|
|
122
|
-
if (
|
|
126
|
+
if (chunk6FTHFJAN_cjs.isFetchTimeoutError(error)) {
|
|
123
127
|
console.debug("Timeout error ignored");
|
|
124
128
|
continue;
|
|
125
129
|
}
|
|
@@ -131,8 +135,8 @@ var ExpoArkProvider = class extends chunk5J5PDZRR_cjs.RestArkProvider {
|
|
|
131
135
|
};
|
|
132
136
|
|
|
133
137
|
// src/providers/expoIndexer.ts
|
|
134
|
-
var ExpoIndexerProvider = class extends
|
|
135
|
-
constructor(serverUrl =
|
|
138
|
+
var ExpoIndexerProvider = class extends chunk4C5PMGBB_cjs.RestIndexerProvider {
|
|
139
|
+
constructor(serverUrl = chunk6FTHFJAN_cjs.DEFAULT_ARKADE_SERVER_URL) {
|
|
136
140
|
super(serverUrl);
|
|
137
141
|
}
|
|
138
142
|
async *getSubscription(subscriptionId, abortSignal) {
|
|
@@ -161,9 +165,9 @@ var ExpoIndexerProvider = class extends chunkFM263GKH_cjs.RestIndexerProvider {
|
|
|
161
165
|
return {
|
|
162
166
|
txid: data.event.txid,
|
|
163
167
|
scripts: data.event.scripts || [],
|
|
164
|
-
newVtxos: (data.event.newVtxos || []).map(
|
|
165
|
-
spentVtxos: (data.event.spentVtxos || []).map(
|
|
166
|
-
sweptVtxos: (data.event.sweptVtxos || []).map(
|
|
168
|
+
newVtxos: (data.event.newVtxos || []).map(chunk6FTHFJAN_cjs.convertVtxo),
|
|
169
|
+
spentVtxos: (data.event.spentVtxos || []).map(chunk6FTHFJAN_cjs.convertVtxo),
|
|
170
|
+
sweptVtxos: (data.event.sweptVtxos || []).map(chunk6FTHFJAN_cjs.convertVtxo),
|
|
167
171
|
tx: data.event.tx,
|
|
168
172
|
checkpointTxs: data.event.checkpointTxs
|
|
169
173
|
};
|
|
@@ -175,7 +179,7 @@ var ExpoIndexerProvider = class extends chunkFM263GKH_cjs.RestIndexerProvider {
|
|
|
175
179
|
if (error instanceof Error && error.name === "AbortError") {
|
|
176
180
|
break;
|
|
177
181
|
}
|
|
178
|
-
if (
|
|
182
|
+
if (chunk6FTHFJAN_cjs.isFetchTimeoutError(error)) {
|
|
179
183
|
console.debug("Timeout error ignored");
|
|
180
184
|
continue;
|
|
181
185
|
}
|
|
@@ -188,5 +192,5 @@ var ExpoIndexerProvider = class extends chunkFM263GKH_cjs.RestIndexerProvider {
|
|
|
188
192
|
|
|
189
193
|
exports.ExpoArkProvider = ExpoArkProvider;
|
|
190
194
|
exports.ExpoIndexerProvider = ExpoIndexerProvider;
|
|
191
|
-
//# sourceMappingURL=chunk-
|
|
192
|
-
//# sourceMappingURL=chunk-
|
|
195
|
+
//# sourceMappingURL=chunk-4BWZ437E.cjs.map
|
|
196
|
+
//# sourceMappingURL=chunk-4BWZ437E.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/expoUtils.ts","../src/providers/expoArk.ts","../src/providers/expoIndexer.ts"],"names":["buildVersion","sdkVersion","fetch","RestArkProvider","DEFAULT_ARKADE_SERVER_URL","isFetchTimeoutError","RestIndexerProvider","convertVtxo"],"mappings":"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","file":"chunk-4BWZ437E.cjs","sourcesContent":["import { fetch, buildVersion, sdkVersion } from \"../utils/fetch\";\n\n/**\n * Dynamically imports expo/fetch with fallback to standard fetch.\n * @returns A fetch function suitable for SSE streaming\n */\nexport async function getExpoFetch(options?: { requireExpo?: boolean }): Promise<typeof fetch> {\n const requireExpo = options?.requireExpo ?? false;\n\n try {\n const expoFetchModule = await import(\"expo/fetch\");\n console.debug(\"Using expo/fetch for streaming\");\n const expoFetchWithHeader = (input: RequestInfo, init?: RequestInit) => {\n const headers = new Headers(init?.headers);\n headers.set(\"X-Build-Version\", buildVersion);\n headers.set(\"X-SDK-VERSION\", sdkVersion);\n return expoFetchModule.fetch(input, { ...init, headers });\n };\n return expoFetchWithHeader as unknown as typeof fetch;\n } catch (error) {\n if (requireExpo) {\n throw new Error(\n \"expo/fetch is unavailable in this environment. \" +\n \"Please ensure expo/fetch is installed and properly configured.\",\n );\n }\n\n console.warn(\n \"Using standard fetch instead of expo/fetch. \" +\n \"Streaming may not be fully supported in some environments.\",\n error,\n );\n return fetch;\n }\n}\n\n/**\n * Generic SSE stream processor using fetch API with ReadableStream.\n * Handles SSE format parsing, buffer management, and abort signals.\n *\n * @param url - The SSE endpoint URL\n * @param abortSignal - Signal to abort the stream\n * @param fetchFn - Fetch function to use (defaults to standard fetch)\n * @param headers - Additional headers to send\n * @param parseData - Function to parse and yield data from SSE events\n */\nexport async function* sseStreamIterator<T>(\n url: string,\n abortSignal: AbortSignal,\n fetchFn: typeof fetch,\n headers: Record<string, string>,\n parseData: (data: any) => T | null,\n): AsyncGenerator<T, void, unknown> {\n const fetchController = new AbortController();\n const cleanup = () => fetchController.abort();\n abortSignal?.addEventListener(\"abort\", cleanup, { once: true });\n\n try {\n const response = await fetchFn(url, {\n headers: {\n Accept: \"text/event-stream\",\n ...headers,\n },\n // Required, not just for cancellation: `getExpoFetch` falls back to\n // the Ark `fetch` wrapper, which routes through `baseFetch` and so\n // bounds any read that brings no signal of its own. Drop this and\n // the stream is truncated at READ_TIMEOUT_MS.\n signal: fetchController.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status} when fetching SSE stream`);\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (!abortSignal?.aborted) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n\n for (let i = 0; i < lines.length - 1; i++) {\n const line = lines[i].trim();\n if (!line) continue;\n\n if (line.startsWith(\"data:\")) {\n const jsonStr = line.substring(5).trim();\n if (!jsonStr) continue;\n\n try {\n const data = JSON.parse(jsonStr);\n const parsed = parseData(data);\n if (parsed !== null) {\n yield parsed;\n }\n } catch (parseError) {\n console.error(\"Failed to parse SSE data:\", parseError);\n throw parseError;\n }\n }\n }\n\n buffer = lines[lines.length - 1];\n }\n } finally {\n abortSignal?.removeEventListener(\"abort\", cleanup);\n }\n}\n","import { DEFAULT_ARKADE_SERVER_URL } from \"../networks\";\nimport { RestArkProvider, SettlementEvent, TxNotificationEvent, isFetchTimeoutError } from \"./ark\";\nimport { getExpoFetch, sseStreamIterator } from \"./expoUtils\";\n\n/**\n * Expo-compatible Arkade provider implementation using expo/fetch for SSE support.\n * This provider works specifically in React Native/Expo environments where\n * standard EventSource is not available but expo/fetch provides SSE capabilities.\n *\n * @example\n * ```typescript\n * import { ExpoArkProvider } from '@arkade-os/sdk/providers/expo';\n *\n * const provider = new ExpoArkProvider('https://arkade.computer');\n * const info = await provider.getInfo();\n * ```\n */\nexport class ExpoArkProvider extends RestArkProvider {\n constructor(serverUrl: string = DEFAULT_ARKADE_SERVER_URL) {\n super(serverUrl);\n }\n\n override async *getEventStream(\n signal: AbortSignal,\n topics: string[],\n ): AsyncIterableIterator<SettlementEvent> {\n const expoFetch = await getExpoFetch();\n const url = `${this.serverUrl}/v1/batch/events`;\n const queryParams =\n topics.length > 0\n ? `?${topics.map((topic) => `topics=${encodeURIComponent(topic)}`).join(\"&\")}`\n : \"\";\n\n while (!signal?.aborted) {\n try {\n yield* sseStreamIterator(url + queryParams, signal, expoFetch, {}, (data) => {\n // Handle different response structures\n // v8 mesh API might wrap in {result: ...} or send directly\n const eventData = data.result || data;\n\n // Skip heartbeat messages\n if (eventData.heartbeat !== undefined) {\n return null;\n }\n\n return this.parseSettlementEvent(eventData);\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Event stream error:\", error);\n throw error;\n }\n }\n }\n\n override async *getTransactionsStream(\n signal: AbortSignal,\n ): AsyncIterableIterator<TxNotificationEvent> {\n const expoFetch = await getExpoFetch();\n const url = `${this.serverUrl}/v1/txs`;\n\n while (!signal?.aborted) {\n try {\n yield* sseStreamIterator(url, signal, expoFetch, {}, (data) => {\n return this.parseTransactionNotification(data.result);\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Transaction stream error:\", error);\n throw error;\n }\n }\n }\n}\n","import { RestIndexerProvider, SubscriptionResponse } from \"./indexer\";\nimport { isFetchTimeoutError } from \"./ark\";\nimport { convertVtxo } from \"../wallet/vtxo\";\nimport { getExpoFetch, sseStreamIterator } from \"./expoUtils\";\nimport { DEFAULT_ARKADE_SERVER_URL } from \"../networks\";\n\n/**\n * Expo-compatible Indexer provider implementation using expo/fetch for streaming support.\n * This provider works specifically in React Native/Expo environments where\n * standard fetch streaming may not work properly but expo/fetch provides streaming capabilities.\n *\n * @example\n * ```typescript\n * import { ExpoIndexerProvider } from '@arkade-os/sdk/adapters/expo';\n *\n * const provider = new ExpoIndexerProvider('https://indexer.example.com');\n * const vtxos = await provider.getVtxos({ scripts: ['script1'] });\n * ```\n */\nexport class ExpoIndexerProvider extends RestIndexerProvider {\n constructor(serverUrl: string = DEFAULT_ARKADE_SERVER_URL) {\n super(serverUrl);\n }\n\n override async *getSubscription(\n subscriptionId: string,\n abortSignal: AbortSignal,\n ): AsyncIterableIterator<SubscriptionResponse> {\n // Detect if we're running in React Native/Expo environment\n const isReactNative =\n typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\";\n\n const expoFetch = await getExpoFetch().catch((error) => {\n // In React Native/Expo, expo/fetch is required for proper streaming support\n if (isReactNative) {\n throw new Error(\n \"expo/fetch is unavailable in React Native environment. \" +\n \"Please ensure expo/fetch is installed and properly configured. \" +\n \"Streaming support may not work with standard fetch in React Native.\",\n );\n }\n throw error;\n });\n\n const url = `${this.serverUrl}/v1/indexer/script/subscription/${subscriptionId}`;\n\n while (!abortSignal.aborted) {\n try {\n yield* sseStreamIterator(\n url,\n abortSignal,\n expoFetch,\n { \"Content-Type\": \"application/json\" },\n (data): SubscriptionResponse | null => {\n // Handle new v8 proto format with heartbeat or event\n if (data.heartbeat !== undefined) {\n // Skip heartbeat messages\n return null;\n }\n // Process event messages\n if (data.event) {\n return {\n txid: data.event.txid,\n scripts: data.event.scripts || [],\n newVtxos: (data.event.newVtxos || []).map(convertVtxo),\n spentVtxos: (data.event.spentVtxos || []).map(convertVtxo),\n sweptVtxos: (data.event.sweptVtxos || []).map(convertVtxo),\n tx: data.event.tx,\n checkpointTxs: data.event.checkpointTxs,\n };\n }\n return null;\n },\n );\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Subscription error:\", error);\n throw error;\n }\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk6FTHFJAN_cjs = require('./chunk-6FTHFJAN.cjs');
|
|
4
4
|
var chunk5BLDMQED_cjs = require('./chunk-5BLDMQED.cjs');
|
|
5
5
|
var base = require('@scure/base');
|
|
6
6
|
var secp256k1_js = require('@noble/curves/secp256k1.js');
|
|
@@ -1420,10 +1420,10 @@ async function indexerFetch(input, init) {
|
|
|
1420
1420
|
const lastAttempt = attempt >= maxAttempts;
|
|
1421
1421
|
let res;
|
|
1422
1422
|
try {
|
|
1423
|
-
res = await
|
|
1423
|
+
res = await chunk6FTHFJAN_cjs.rateGate.runHttp(input, () => chunk6FTHFJAN_cjs.baseFetch(input, init));
|
|
1424
1424
|
} catch (err) {
|
|
1425
|
-
const mapped =
|
|
1426
|
-
if (lastAttempt || !(mapped instanceof
|
|
1425
|
+
const mapped = chunk6FTHFJAN_cjs.toProviderUnavailable(err, "indexer");
|
|
1426
|
+
if (lastAttempt || !(mapped instanceof chunk6FTHFJAN_cjs.ProviderUnavailableError)) throw mapped;
|
|
1427
1427
|
await sleep(retryDelayMs(attempt));
|
|
1428
1428
|
continue;
|
|
1429
1429
|
}
|
|
@@ -1435,7 +1435,7 @@ async function indexerFetch(input, init) {
|
|
|
1435
1435
|
body = void 0;
|
|
1436
1436
|
}
|
|
1437
1437
|
try {
|
|
1438
|
-
|
|
1438
|
+
chunk6FTHFJAN_cjs.throwIfHttpUnavailable(res, "indexer", body);
|
|
1439
1439
|
} catch (err) {
|
|
1440
1440
|
if (lastAttempt) throw err;
|
|
1441
1441
|
await sleep(retryDelayMs(attempt));
|
|
@@ -1464,13 +1464,15 @@ var ChainTxType = /* @__PURE__ */ ((ChainTxType2) => {
|
|
|
1464
1464
|
return ChainTxType2;
|
|
1465
1465
|
})(ChainTxType || {});
|
|
1466
1466
|
var RestIndexerProvider = class {
|
|
1467
|
-
constructor(serverUrl =
|
|
1467
|
+
constructor(serverUrl = chunk6FTHFJAN_cjs.DEFAULT_ARKADE_SERVER_URL, options = {}) {
|
|
1468
1468
|
this.serverUrl = serverUrl;
|
|
1469
1469
|
this.eventSource = options.eventSource;
|
|
1470
1470
|
}
|
|
1471
1471
|
serverUrl;
|
|
1472
1472
|
/** Overrides {@link configureEventSource} for this provider's subscription. */
|
|
1473
1473
|
eventSource;
|
|
1474
|
+
/** @see fetchVtxosJson */
|
|
1475
|
+
inFlightVtxoReads = /* @__PURE__ */ new Map();
|
|
1474
1476
|
async getVtxoTree(batchOutpoint, opts) {
|
|
1475
1477
|
let url = `${this.serverUrl}/v1/indexer/batch/${batchOutpoint.txid}/${batchOutpoint.vout}/tree`;
|
|
1476
1478
|
const params = new URLSearchParams();
|
|
@@ -1600,8 +1602,8 @@ var RestIndexerProvider = class {
|
|
|
1600
1602
|
try {
|
|
1601
1603
|
while (!abortSignal?.aborted) {
|
|
1602
1604
|
try {
|
|
1603
|
-
const currentIterator =
|
|
1604
|
-
|
|
1605
|
+
const currentIterator = chunk6FTHFJAN_cjs.eventSourceIterator(
|
|
1606
|
+
chunk6FTHFJAN_cjs.resolveEventSource(override)(url)
|
|
1605
1607
|
);
|
|
1606
1608
|
iterator = currentIterator;
|
|
1607
1609
|
for await (const event of currentIterator) {
|
|
@@ -1612,9 +1614,9 @@ var RestIndexerProvider = class {
|
|
|
1612
1614
|
yield {
|
|
1613
1615
|
txid: data.event.txid,
|
|
1614
1616
|
scripts: data.event.scripts || [],
|
|
1615
|
-
newVtxos: (data.event.newVtxos || []).map(
|
|
1616
|
-
spentVtxos: (data.event.spentVtxos || []).map(
|
|
1617
|
-
sweptVtxos: (data.event.sweptVtxos || []).map(
|
|
1617
|
+
newVtxos: (data.event.newVtxos || []).map(chunk6FTHFJAN_cjs.convertVtxo),
|
|
1618
|
+
spentVtxos: (data.event.spentVtxos || []).map(chunk6FTHFJAN_cjs.convertVtxo),
|
|
1619
|
+
sweptVtxos: (data.event.sweptVtxos || []).map(chunk6FTHFJAN_cjs.convertVtxo),
|
|
1618
1620
|
tx: data.event.tx,
|
|
1619
1621
|
checkpointTxs: data.event.checkpointTxs
|
|
1620
1622
|
};
|
|
@@ -1628,14 +1630,14 @@ var RestIndexerProvider = class {
|
|
|
1628
1630
|
if (abortSignal?.aborted || error instanceof Error && error.name === "AbortError") {
|
|
1629
1631
|
break;
|
|
1630
1632
|
}
|
|
1631
|
-
if (
|
|
1633
|
+
if (chunk6FTHFJAN_cjs.isFetchTimeoutError(error)) {
|
|
1632
1634
|
console.debug("Timeout error ignored");
|
|
1633
1635
|
continue;
|
|
1634
1636
|
}
|
|
1635
|
-
if (
|
|
1637
|
+
if (chunk6FTHFJAN_cjs.isEventSourceError(error)) {
|
|
1636
1638
|
throw error;
|
|
1637
1639
|
}
|
|
1638
|
-
if (
|
|
1640
|
+
if (chunk6FTHFJAN_cjs.isEventSourceUnavailableError(error)) throw error;
|
|
1639
1641
|
console.error("Subscription error:", error);
|
|
1640
1642
|
throw error;
|
|
1641
1643
|
} finally {
|
|
@@ -1777,19 +1779,43 @@ var RestIndexerProvider = class {
|
|
|
1777
1779
|
if (params.toString()) {
|
|
1778
1780
|
url += "?" + params.toString();
|
|
1779
1781
|
}
|
|
1780
|
-
const
|
|
1781
|
-
if (!res.ok) {
|
|
1782
|
-
throw new Error(`Failed to fetch vtxos: ${res.statusText}`);
|
|
1783
|
-
}
|
|
1784
|
-
const data = await res.json();
|
|
1785
|
-
if (!Response.isVtxosResponse(data)) {
|
|
1786
|
-
throw new Error("Invalid vtxos data received");
|
|
1787
|
-
}
|
|
1782
|
+
const data = await this.fetchVtxosJson(url);
|
|
1788
1783
|
return {
|
|
1789
|
-
vtxos: data.vtxos.map(
|
|
1784
|
+
vtxos: data.vtxos.map(chunk6FTHFJAN_cjs.convertVtxo),
|
|
1790
1785
|
page: data.page
|
|
1791
1786
|
};
|
|
1792
1787
|
}
|
|
1788
|
+
/**
|
|
1789
|
+
* The wire read behind {@link fetchVtxosPage}, with an identical read
|
|
1790
|
+
* already in flight served from that one request instead of repeated.
|
|
1791
|
+
*
|
|
1792
|
+
* Two callers can want the same page at the same instant without either
|
|
1793
|
+
* being redundant, so there is no single call site to remove: a send that
|
|
1794
|
+
* leaves change makes the indexer emit `vtxo_spent` and `vtxo_received` for
|
|
1795
|
+
* the wallet's own contract milliseconds apart, and `handleContractEvent`
|
|
1796
|
+
* delta-syncs that contract on both arms.
|
|
1797
|
+
*/
|
|
1798
|
+
async fetchVtxosJson(url) {
|
|
1799
|
+
const joined = this.inFlightVtxoReads.get(url);
|
|
1800
|
+
if (joined) return joined;
|
|
1801
|
+
const shared = (async () => {
|
|
1802
|
+
const res = await indexerFetch(url);
|
|
1803
|
+
if (!res.ok) {
|
|
1804
|
+
throw new Error(`Failed to fetch vtxos: ${res.statusText}`);
|
|
1805
|
+
}
|
|
1806
|
+
const data = await res.json();
|
|
1807
|
+
if (!Response.isVtxosResponse(data)) {
|
|
1808
|
+
throw new Error("Invalid vtxos data received");
|
|
1809
|
+
}
|
|
1810
|
+
return data;
|
|
1811
|
+
})();
|
|
1812
|
+
this.inFlightVtxoReads.set(url, shared);
|
|
1813
|
+
try {
|
|
1814
|
+
return await shared;
|
|
1815
|
+
} finally {
|
|
1816
|
+
if (this.inFlightVtxoReads.get(url) === shared) this.inFlightVtxoReads.delete(url);
|
|
1817
|
+
}
|
|
1818
|
+
}
|
|
1793
1819
|
async getAssetDetails(assetId) {
|
|
1794
1820
|
const url = `${this.serverUrl}/v1/indexer/asset/${encodeURIComponent(assetId)}`;
|
|
1795
1821
|
const res = await indexerFetch(url);
|
|
@@ -1969,5 +1995,5 @@ exports.Metadata = Metadata;
|
|
|
1969
1995
|
exports.Packet = Packet;
|
|
1970
1996
|
exports.RestIndexerProvider = RestIndexerProvider;
|
|
1971
1997
|
exports.asset_exports = asset_exports;
|
|
1972
|
-
//# sourceMappingURL=chunk-
|
|
1973
|
-
//# sourceMappingURL=chunk-
|
|
1998
|
+
//# sourceMappingURL=chunk-4C5PMGBB.cjs.map
|
|
1999
|
+
//# sourceMappingURL=chunk-4C5PMGBB.cjs.map
|