@arkade-os/sdk 0.4.27 → 0.4.28
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 +31 -100
- package/dist/adapters/asyncStorage.cjs +48 -0
- package/dist/adapters/asyncStorage.cjs.map +1 -0
- package/dist/adapters/asyncStorage.d.cts +16 -0
- package/dist/{types/storage → adapters}/asyncStorage.d.ts +5 -2
- package/dist/adapters/asyncStorage.js +46 -0
- package/dist/adapters/asyncStorage.js.map +1 -0
- package/dist/adapters/expo.cjs +19 -0
- package/dist/adapters/expo.cjs.map +1 -0
- package/dist/adapters/expo.d.cts +48 -0
- package/dist/adapters/expo.d.ts +48 -0
- package/dist/adapters/expo.js +6 -0
- package/dist/adapters/expo.js.map +1 -0
- package/dist/adapters/fileSystem.cjs +116 -0
- package/dist/adapters/fileSystem.cjs.map +1 -0
- package/dist/adapters/fileSystem.d.cts +17 -0
- package/dist/{types/storage → adapters}/fileSystem.d.ts +5 -2
- package/dist/adapters/fileSystem.js +93 -0
- package/dist/adapters/fileSystem.js.map +1 -0
- package/dist/adapters/indexedDB.cjs +103 -0
- package/dist/adapters/indexedDB.cjs.map +1 -0
- package/dist/adapters/indexedDB.d.cts +18 -0
- package/dist/{types/storage → adapters}/indexedDB.d.ts +5 -2
- package/dist/adapters/indexedDB.js +101 -0
- package/dist/adapters/indexedDB.js.map +1 -0
- package/dist/adapters/localStorage.cjs +50 -0
- package/dist/adapters/localStorage.cjs.map +1 -0
- package/dist/{types/storage/inMemory.d.ts → adapters/localStorage.d.cts} +6 -3
- package/dist/{types/storage → adapters}/localStorage.d.ts +5 -2
- package/dist/adapters/localStorage.js +48 -0
- package/dist/adapters/localStorage.js.map +1 -0
- package/dist/ark-TZ1gXAXU.d.cts +3880 -0
- package/dist/ark-TZ1gXAXU.d.ts +3880 -0
- package/dist/{types/worker/expo/asyncStorageTaskQueue.d.ts → asyncStorageTaskQueue-Cb1F_Z9s.d.ts} +6 -3
- package/dist/asyncStorageTaskQueue-EFqSmYTg.d.cts +49 -0
- package/dist/chunk-5BLDMQED.cjs +18 -0
- package/dist/chunk-5BLDMQED.cjs.map +1 -0
- package/dist/chunk-5PG7DV7A.cjs +805 -0
- package/dist/chunk-5PG7DV7A.cjs.map +1 -0
- package/dist/chunk-A3EMF7RN.js +95 -0
- package/dist/chunk-A3EMF7RN.js.map +1 -0
- package/dist/chunk-ADV27S4N.cjs +2701 -0
- package/dist/chunk-ADV27S4N.cjs.map +1 -0
- package/dist/chunk-BQLHADL7.js +13805 -0
- package/dist/chunk-BQLHADL7.js.map +1 -0
- package/dist/chunk-CFZMTDWI.js +209 -0
- package/dist/chunk-CFZMTDWI.js.map +1 -0
- package/dist/chunk-FG5ACJJW.cjs +212 -0
- package/dist/chunk-FG5ACJJW.cjs.map +1 -0
- package/dist/chunk-HW3JJ323.js +768 -0
- package/dist/chunk-HW3JJ323.js.map +1 -0
- package/dist/chunk-I3DGUUCT.cjs +838 -0
- package/dist/chunk-I3DGUUCT.cjs.map +1 -0
- package/dist/chunk-IPX2R7FR.cjs +100 -0
- package/dist/chunk-IPX2R7FR.cjs.map +1 -0
- package/dist/chunk-NSBPE2FW.js +15 -0
- package/dist/chunk-NSBPE2FW.js.map +1 -0
- package/dist/chunk-T64LAI7L.js +829 -0
- package/dist/chunk-T64LAI7L.js.map +1 -0
- package/dist/chunk-ZBUDLTBO.js +2671 -0
- package/dist/chunk-ZBUDLTBO.js.map +1 -0
- package/dist/chunk-ZLO6NETT.cjs +13910 -0
- package/dist/chunk-ZLO6NETT.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +26 -0
- package/dist/contracts/handlers/index.cjs.map +1 -0
- package/dist/contracts/handlers/index.d.cts +7 -0
- package/dist/contracts/handlers/index.d.ts +7 -0
- package/dist/contracts/handlers/index.js +5 -0
- package/dist/contracts/handlers/index.js.map +1 -0
- package/dist/delegate-BFZs69hp.d.cts +84 -0
- package/dist/delegate-aaVGfWsV.d.ts +84 -0
- package/dist/index-B22cA64m.d.cts +199 -0
- package/dist/{types/storage/index.d.ts → index-C0IanN1m.d.cts} +3 -1
- package/dist/index-C0IanN1m.d.ts +11 -0
- package/dist/index-NDla_UoJ.d.ts +199 -0
- package/dist/index.cjs +480 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3343 -0
- package/dist/index.d.ts +3343 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/realm/index.cjs +513 -0
- package/dist/repositories/realm/index.cjs.map +1 -0
- package/dist/repositories/realm/index.d.cts +217 -0
- package/dist/{types/repositories/realm/schemas.d.ts → repositories/realm/index.d.ts} +80 -112
- package/dist/repositories/realm/index.js +507 -0
- package/dist/repositories/realm/index.js.map +1 -0
- package/dist/repositories/sqlite/index.cjs +588 -0
- package/dist/repositories/sqlite/index.cjs.map +1 -0
- package/dist/repositories/sqlite/index.d.cts +118 -0
- package/dist/{types/repositories/sqlite/walletRepository.d.ts → repositories/sqlite/index.d.ts} +58 -5
- package/dist/repositories/sqlite/index.js +585 -0
- package/dist/repositories/sqlite/index.js.map +1 -0
- package/dist/taskRunner-C6Ff4OaU.d.cts +114 -0
- package/dist/taskRunner-yvPN8Z0K.d.ts +114 -0
- package/dist/wallet/expo/background.cjs +93 -0
- package/dist/wallet/expo/background.cjs.map +1 -0
- package/dist/wallet/expo/background.d.cts +84 -0
- package/dist/wallet/expo/background.d.ts +84 -0
- package/dist/wallet/expo/background.js +68 -0
- package/dist/wallet/expo/background.js.map +1 -0
- package/dist/wallet/expo/index.cjs +171 -0
- package/dist/wallet/expo/index.cjs.map +1 -0
- package/dist/wallet/expo/index.d.cts +122 -0
- package/dist/{types/wallet/expo/wallet.d.ts → wallet/expo/index.d.ts} +45 -22
- package/dist/wallet/expo/index.js +169 -0
- package/dist/wallet/expo/index.js.map +1 -0
- package/dist/wallet-AF-p-OWj.d.cts +774 -0
- package/dist/wallet-D9NBRqvC.d.ts +774 -0
- package/dist/worker/expo/index.cjs +140 -0
- package/dist/worker/expo/index.cjs.map +1 -0
- package/dist/worker/expo/index.d.cts +29 -0
- package/dist/worker/expo/index.d.ts +29 -0
- package/dist/worker/expo/index.js +121 -0
- package/dist/worker/expo/index.js.map +1 -0
- package/package.json +110 -76
- package/dist/cjs/adapters/asyncStorage.js +0 -5
- package/dist/cjs/adapters/expo.js +0 -8
- package/dist/cjs/adapters/fileSystem.js +0 -5
- package/dist/cjs/adapters/indexedDB.js +0 -5
- package/dist/cjs/adapters/localStorage.js +0 -5
- package/dist/cjs/arkfee/celenv.js +0 -43
- package/dist/cjs/arkfee/estimator.js +0 -143
- package/dist/cjs/arkfee/index.js +0 -5
- package/dist/cjs/arkfee/types.js +0 -26
- package/dist/cjs/arknote/index.js +0 -128
- package/dist/cjs/bip322/index.js +0 -270
- package/dist/cjs/contracts/arkcontract.js +0 -147
- package/dist/cjs/contracts/contractManager.js +0 -649
- package/dist/cjs/contracts/contractWatcher.js +0 -598
- package/dist/cjs/contracts/handlers/default.js +0 -93
- package/dist/cjs/contracts/handlers/delegate.js +0 -90
- package/dist/cjs/contracts/handlers/helpers.js +0 -115
- package/dist/cjs/contracts/handlers/index.js +0 -19
- package/dist/cjs/contracts/handlers/registry.js +0 -89
- package/dist/cjs/contracts/handlers/vhtlc.js +0 -194
- package/dist/cjs/contracts/index.js +0 -41
- package/dist/cjs/contracts/types.js +0 -2
- package/dist/cjs/contracts/vtxoOwnership.js +0 -78
- package/dist/cjs/extension/asset/assetGroup.js +0 -228
- package/dist/cjs/extension/asset/assetId.js +0 -152
- package/dist/cjs/extension/asset/assetInput.js +0 -222
- package/dist/cjs/extension/asset/assetOutput.js +0 -174
- package/dist/cjs/extension/asset/assetRef.js +0 -148
- package/dist/cjs/extension/asset/index.js +0 -23
- package/dist/cjs/extension/asset/metadata.js +0 -187
- package/dist/cjs/extension/asset/packet.js +0 -114
- package/dist/cjs/extension/asset/types.js +0 -22
- package/dist/cjs/extension/asset/utils.js +0 -105
- package/dist/cjs/extension/index.js +0 -254
- package/dist/cjs/extension/packet.js +0 -20
- package/dist/cjs/forfeit.js +0 -45
- package/dist/cjs/identity/descriptor.js +0 -169
- package/dist/cjs/identity/descriptorProvider.js +0 -2
- package/dist/cjs/identity/hdCapableIdentity.js +0 -20
- package/dist/cjs/identity/index.js +0 -40
- package/dist/cjs/identity/seedIdentity.js +0 -477
- package/dist/cjs/identity/serialize.js +0 -171
- package/dist/cjs/identity/singleKey.js +0 -126
- package/dist/cjs/identity/staticDescriptorProvider.js +0 -65
- package/dist/cjs/index.js +0 -202
- package/dist/cjs/intent/index.js +0 -259
- package/dist/cjs/musig2/index.js +0 -11
- package/dist/cjs/musig2/keys.js +0 -57
- package/dist/cjs/musig2/nonces.js +0 -48
- package/dist/cjs/musig2/sign.js +0 -102
- package/dist/cjs/networks.js +0 -26
- package/dist/cjs/package.json +0 -3
- package/dist/cjs/providers/ark.js +0 -577
- package/dist/cjs/providers/delegator.js +0 -85
- package/dist/cjs/providers/electrum.js +0 -869
- package/dist/cjs/providers/errors.js +0 -59
- package/dist/cjs/providers/expoArk.js +0 -82
- package/dist/cjs/providers/expoIndexer.js +0 -111
- package/dist/cjs/providers/expoUtils.js +0 -124
- package/dist/cjs/providers/indexer.js +0 -630
- package/dist/cjs/providers/onchain.js +0 -262
- package/dist/cjs/providers/utils.js +0 -121
- package/dist/cjs/repositories/contractRepository.js +0 -2
- package/dist/cjs/repositories/inMemory/contractRepository.js +0 -55
- package/dist/cjs/repositories/inMemory/walletRepository.js +0 -115
- package/dist/cjs/repositories/index.js +0 -34
- package/dist/cjs/repositories/indexedDB/contractRepository.js +0 -187
- package/dist/cjs/repositories/indexedDB/db.js +0 -19
- package/dist/cjs/repositories/indexedDB/manager.js +0 -100
- package/dist/cjs/repositories/indexedDB/schema.js +0 -204
- package/dist/cjs/repositories/indexedDB/walletRepository.js +0 -474
- package/dist/cjs/repositories/indexedDB/websqlAdapter.js +0 -144
- package/dist/cjs/repositories/migrations/contractRepositoryImpl.js +0 -127
- package/dist/cjs/repositories/migrations/fromStorageAdapter.js +0 -66
- package/dist/cjs/repositories/migrations/walletRepositoryImpl.js +0 -184
- package/dist/cjs/repositories/realm/contractRepository.js +0 -116
- package/dist/cjs/repositories/realm/index.js +0 -11
- package/dist/cjs/repositories/realm/schemas.js +0 -157
- package/dist/cjs/repositories/realm/types.js +0 -7
- package/dist/cjs/repositories/realm/walletRepository.js +0 -305
- package/dist/cjs/repositories/scriptFromAddress.js +0 -16
- package/dist/cjs/repositories/serialization.js +0 -82
- package/dist/cjs/repositories/sqlite/contractRepository.js +0 -135
- package/dist/cjs/repositories/sqlite/index.js +0 -7
- package/dist/cjs/repositories/sqlite/types.js +0 -2
- package/dist/cjs/repositories/sqlite/walletRepository.js +0 -441
- package/dist/cjs/repositories/walletRepository.js +0 -2
- package/dist/cjs/script/address.js +0 -108
- package/dist/cjs/script/base.js +0 -185
- package/dist/cjs/script/default.js +0 -57
- package/dist/cjs/script/delegate.js +0 -53
- package/dist/cjs/script/tapscript.js +0 -619
- package/dist/cjs/script/vhtlc.js +0 -170
- package/dist/cjs/storage/asyncStorage.js +0 -50
- package/dist/cjs/storage/fileSystem.js +0 -141
- package/dist/cjs/storage/inMemory.js +0 -24
- package/dist/cjs/storage/index.js +0 -2
- package/dist/cjs/storage/indexedDB.js +0 -101
- package/dist/cjs/storage/localStorage.js +0 -51
- package/dist/cjs/tree/signingSession.js +0 -229
- package/dist/cjs/tree/txTree.js +0 -192
- package/dist/cjs/tree/validation.js +0 -107
- package/dist/cjs/utils/anchor.js +0 -35
- package/dist/cjs/utils/arkTransaction.js +0 -271
- package/dist/cjs/utils/bip21.js +0 -127
- package/dist/cjs/utils/syncCursors.js +0 -128
- package/dist/cjs/utils/timelock.js +0 -59
- package/dist/cjs/utils/transaction.js +0 -28
- package/dist/cjs/utils/transactionHistory.js +0 -183
- package/dist/cjs/utils/txSizeEstimator.js +0 -132
- package/dist/cjs/utils/unknownFields.js +0 -174
- package/dist/cjs/wallet/asset-manager.js +0 -330
- package/dist/cjs/wallet/asset.js +0 -119
- package/dist/cjs/wallet/batch.js +0 -183
- package/dist/cjs/wallet/delegator.js +0 -308
- package/dist/cjs/wallet/expo/background.js +0 -116
- package/dist/cjs/wallet/expo/index.js +0 -9
- package/dist/cjs/wallet/expo/wallet.js +0 -230
- package/dist/cjs/wallet/hdDescriptorProvider.js +0 -188
- package/dist/cjs/wallet/index.js +0 -82
- package/dist/cjs/wallet/inputSignerRouter.js +0 -98
- package/dist/cjs/wallet/onchain.js +0 -290
- package/dist/cjs/wallet/ramps.js +0 -216
- package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +0 -953
- package/dist/cjs/wallet/serviceWorker/wallet.js +0 -1174
- package/dist/cjs/wallet/signingErrors.js +0 -32
- package/dist/cjs/wallet/unroll.js +0 -293
- package/dist/cjs/wallet/utils.js +0 -111
- package/dist/cjs/wallet/validation.js +0 -154
- package/dist/cjs/wallet/vtxo-manager.js +0 -1142
- package/dist/cjs/wallet/wallet.js +0 -2195
- package/dist/cjs/wallet/walletReceiveRotator.js +0 -547
- package/dist/cjs/worker/browser/service-worker-manager.js +0 -183
- package/dist/cjs/worker/browser/utils.js +0 -67
- package/dist/cjs/worker/errors.js +0 -16
- package/dist/cjs/worker/expo/asyncStorageTaskQueue.js +0 -78
- package/dist/cjs/worker/expo/index.js +0 -13
- package/dist/cjs/worker/expo/processors/contractPollProcessor.js +0 -62
- package/dist/cjs/worker/expo/processors/index.js +0 -6
- package/dist/cjs/worker/expo/taskQueue.js +0 -41
- package/dist/cjs/worker/expo/taskRunner.js +0 -73
- package/dist/cjs/worker/messageBus.js +0 -474
- package/dist/esm/adapters/asyncStorage.js +0 -1
- package/dist/esm/adapters/expo.js +0 -3
- package/dist/esm/adapters/fileSystem.js +0 -1
- package/dist/esm/adapters/indexedDB.js +0 -1
- package/dist/esm/adapters/localStorage.js +0 -1
- package/dist/esm/arkfee/celenv.js +0 -40
- package/dist/esm/arkfee/estimator.js +0 -139
- package/dist/esm/arkfee/index.js +0 -1
- package/dist/esm/arkfee/types.js +0 -22
- package/dist/esm/arknote/index.js +0 -124
- package/dist/esm/bip322/index.js +0 -267
- package/dist/esm/contracts/arkcontract.js +0 -140
- package/dist/esm/contracts/contractManager.js +0 -645
- package/dist/esm/contracts/contractWatcher.js +0 -594
- package/dist/esm/contracts/handlers/default.js +0 -90
- package/dist/esm/contracts/handlers/delegate.js +0 -87
- package/dist/esm/contracts/handlers/helpers.js +0 -110
- package/dist/esm/contracts/handlers/index.js +0 -12
- package/dist/esm/contracts/handlers/registry.js +0 -86
- package/dist/esm/contracts/handlers/vhtlc.js +0 -191
- package/dist/esm/contracts/index.js +0 -13
- package/dist/esm/contracts/types.js +0 -1
- package/dist/esm/contracts/vtxoOwnership.js +0 -69
- package/dist/esm/extension/asset/assetGroup.js +0 -224
- package/dist/esm/extension/asset/assetId.js +0 -148
- package/dist/esm/extension/asset/assetInput.js +0 -217
- package/dist/esm/extension/asset/assetOutput.js +0 -169
- package/dist/esm/extension/asset/assetRef.js +0 -144
- package/dist/esm/extension/asset/index.js +0 -8
- package/dist/esm/extension/asset/metadata.js +0 -182
- package/dist/esm/extension/asset/packet.js +0 -110
- package/dist/esm/extension/asset/types.js +0 -19
- package/dist/esm/extension/asset/utils.js +0 -99
- package/dist/esm/extension/index.js +0 -248
- package/dist/esm/extension/packet.js +0 -16
- package/dist/esm/forfeit.js +0 -41
- package/dist/esm/identity/descriptor.js +0 -161
- package/dist/esm/identity/descriptorProvider.js +0 -1
- package/dist/esm/identity/hdCapableIdentity.js +0 -17
- package/dist/esm/identity/index.js +0 -13
- package/dist/esm/identity/seedIdentity.js +0 -469
- package/dist/esm/identity/serialize.js +0 -164
- package/dist/esm/identity/singleKey.js +0 -121
- package/dist/esm/identity/staticDescriptorProvider.js +0 -61
- package/dist/esm/index.js +0 -87
- package/dist/esm/intent/index.js +0 -255
- package/dist/esm/musig2/index.js +0 -3
- package/dist/esm/musig2/keys.js +0 -21
- package/dist/esm/musig2/nonces.js +0 -11
- package/dist/esm/musig2/sign.js +0 -63
- package/dist/esm/networks.js +0 -22
- package/dist/esm/package.json +0 -3
- package/dist/esm/providers/ark.js +0 -572
- package/dist/esm/providers/delegator.js +0 -81
- package/dist/esm/providers/electrum.js +0 -864
- package/dist/esm/providers/errors.js +0 -54
- package/dist/esm/providers/expoArk.js +0 -78
- package/dist/esm/providers/expoIndexer.js +0 -107
- package/dist/esm/providers/expoUtils.js +0 -87
- package/dist/esm/providers/indexer.js +0 -626
- package/dist/esm/providers/onchain.js +0 -258
- package/dist/esm/providers/utils.js +0 -117
- package/dist/esm/repositories/contractRepository.js +0 -1
- package/dist/esm/repositories/inMemory/contractRepository.js +0 -51
- package/dist/esm/repositories/inMemory/walletRepository.js +0 -111
- package/dist/esm/repositories/index.js +0 -10
- package/dist/esm/repositories/indexedDB/contractRepository.js +0 -183
- package/dist/esm/repositories/indexedDB/db.js +0 -4
- package/dist/esm/repositories/indexedDB/manager.js +0 -95
- package/dist/esm/repositories/indexedDB/schema.js +0 -199
- package/dist/esm/repositories/indexedDB/walletRepository.js +0 -470
- package/dist/esm/repositories/indexedDB/websqlAdapter.js +0 -138
- package/dist/esm/repositories/migrations/contractRepositoryImpl.js +0 -121
- package/dist/esm/repositories/migrations/fromStorageAdapter.js +0 -58
- package/dist/esm/repositories/migrations/walletRepositoryImpl.js +0 -180
- package/dist/esm/repositories/realm/contractRepository.js +0 -112
- package/dist/esm/repositories/realm/index.js +0 -3
- package/dist/esm/repositories/realm/schemas.js +0 -153
- package/dist/esm/repositories/realm/types.js +0 -6
- package/dist/esm/repositories/realm/walletRepository.js +0 -301
- package/dist/esm/repositories/scriptFromAddress.js +0 -13
- package/dist/esm/repositories/serialization.js +0 -67
- package/dist/esm/repositories/sqlite/contractRepository.js +0 -131
- package/dist/esm/repositories/sqlite/index.js +0 -2
- package/dist/esm/repositories/sqlite/types.js +0 -1
- package/dist/esm/repositories/sqlite/walletRepository.js +0 -437
- package/dist/esm/repositories/walletRepository.js +0 -1
- package/dist/esm/script/address.js +0 -104
- package/dist/esm/script/base.js +0 -179
- package/dist/esm/script/default.js +0 -54
- package/dist/esm/script/delegate.js +0 -50
- package/dist/esm/script/tapscript.js +0 -615
- package/dist/esm/script/vhtlc.js +0 -167
- package/dist/esm/storage/asyncStorage.js +0 -46
- package/dist/esm/storage/fileSystem.js +0 -104
- package/dist/esm/storage/inMemory.js +0 -20
- package/dist/esm/storage/index.js +0 -1
- package/dist/esm/storage/indexedDB.js +0 -97
- package/dist/esm/storage/localStorage.js +0 -47
- package/dist/esm/tree/signingSession.js +0 -191
- package/dist/esm/tree/txTree.js +0 -188
- package/dist/esm/tree/validation.js +0 -101
- package/dist/esm/utils/anchor.js +0 -31
- package/dist/esm/utils/arkTransaction.js +0 -264
- package/dist/esm/utils/bip21.js +0 -123
- package/dist/esm/utils/syncCursors.js +0 -119
- package/dist/esm/utils/timelock.js +0 -22
- package/dist/esm/utils/transaction.js +0 -24
- package/dist/esm/utils/transactionHistory.js +0 -180
- package/dist/esm/utils/txSizeEstimator.js +0 -128
- package/dist/esm/utils/unknownFields.js +0 -169
- package/dist/esm/wallet/asset-manager.js +0 -325
- package/dist/esm/wallet/asset.js +0 -113
- package/dist/esm/wallet/batch.js +0 -180
- package/dist/esm/wallet/delegator.js +0 -303
- package/dist/esm/wallet/expo/background.js +0 -111
- package/dist/esm/wallet/expo/index.js +0 -2
- package/dist/esm/wallet/expo/wallet.js +0 -193
- package/dist/esm/wallet/hdDescriptorProvider.js +0 -184
- package/dist/esm/wallet/index.js +0 -75
- package/dist/esm/wallet/inputSignerRouter.js +0 -94
- package/dist/esm/wallet/onchain.js +0 -285
- package/dist/esm/wallet/ramps.js +0 -212
- package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +0 -946
- package/dist/esm/wallet/serviceWorker/wallet.js +0 -1169
- package/dist/esm/wallet/signingErrors.js +0 -27
- package/dist/esm/wallet/unroll.js +0 -289
- package/dist/esm/wallet/utils.js +0 -103
- package/dist/esm/wallet/validation.js +0 -142
- package/dist/esm/wallet/vtxo-manager.js +0 -1136
- package/dist/esm/wallet/wallet.js +0 -2186
- package/dist/esm/wallet/walletReceiveRotator.js +0 -540
- package/dist/esm/worker/browser/service-worker-manager.js +0 -177
- package/dist/esm/worker/browser/utils.js +0 -63
- package/dist/esm/worker/errors.js +0 -11
- package/dist/esm/worker/expo/asyncStorageTaskQueue.js +0 -74
- package/dist/esm/worker/expo/index.js +0 -4
- package/dist/esm/worker/expo/processors/contractPollProcessor.js +0 -59
- package/dist/esm/worker/expo/processors/index.js +0 -1
- package/dist/esm/worker/expo/taskQueue.js +0 -37
- package/dist/esm/worker/expo/taskRunner.js +0 -69
- package/dist/esm/worker/messageBus.js +0 -470
- package/dist/types/adapters/asyncStorage.d.ts +0 -2
- package/dist/types/adapters/expo.d.ts +0 -4
- package/dist/types/adapters/fileSystem.d.ts +0 -2
- package/dist/types/adapters/indexedDB.d.ts +0 -2
- package/dist/types/adapters/localStorage.d.ts +0 -2
- package/dist/types/arkfee/celenv.d.ts +0 -25
- package/dist/types/arkfee/estimator.d.ts +0 -49
- package/dist/types/arkfee/index.d.ts +0 -2
- package/dist/types/arkfee/types.d.ts +0 -38
- package/dist/types/arknote/index.d.ts +0 -84
- package/dist/types/bip322/index.d.ts +0 -55
- package/dist/types/contracts/arkcontract.d.ts +0 -99
- package/dist/types/contracts/contractManager.d.ts +0 -411
- package/dist/types/contracts/contractWatcher.d.ts +0 -217
- package/dist/types/contracts/handlers/default.d.ts +0 -19
- package/dist/types/contracts/handlers/delegate.d.ts +0 -21
- package/dist/types/contracts/handlers/helpers.d.ts +0 -19
- package/dist/types/contracts/handlers/index.d.ts +0 -7
- package/dist/types/contracts/handlers/registry.d.ts +0 -65
- package/dist/types/contracts/handlers/vhtlc.d.ts +0 -32
- package/dist/types/contracts/index.d.ts +0 -14
- package/dist/types/contracts/types.d.ts +0 -250
- package/dist/types/contracts/vtxoOwnership.d.ts +0 -33
- package/dist/types/extension/asset/assetGroup.d.ts +0 -119
- package/dist/types/extension/asset/assetId.d.ts +0 -83
- package/dist/types/extension/asset/assetInput.d.ts +0 -64
- package/dist/types/extension/asset/assetOutput.d.ts +0 -54
- package/dist/types/extension/asset/assetRef.d.ts +0 -91
- package/dist/types/extension/asset/index.d.ts +0 -8
- package/dist/types/extension/asset/metadata.d.ts +0 -52
- package/dist/types/extension/asset/packet.d.ts +0 -41
- package/dist/types/extension/asset/types.d.ts +0 -16
- package/dist/types/extension/asset/utils.d.ts +0 -21
- package/dist/types/extension/index.d.ts +0 -56
- package/dist/types/extension/packet.d.ts +0 -21
- package/dist/types/forfeit.d.ts +0 -18
- package/dist/types/identity/descriptor.d.ts +0 -61
- package/dist/types/identity/descriptorProvider.d.ts +0 -42
- package/dist/types/identity/hdCapableIdentity.d.ts +0 -71
- package/dist/types/identity/index.d.ts +0 -57
- package/dist/types/identity/seedIdentity.d.ts +0 -270
- package/dist/types/identity/serialize.d.ts +0 -96
- package/dist/types/identity/singleKey.d.ts +0 -62
- package/dist/types/identity/staticDescriptorProvider.d.ts +0 -18
- package/dist/types/index.d.ts +0 -59
- package/dist/types/intent/index.d.ts +0 -86
- package/dist/types/musig2/index.d.ts +0 -4
- package/dist/types/musig2/keys.d.ts +0 -9
- package/dist/types/musig2/nonces.d.ts +0 -14
- package/dist/types/musig2/sign.d.ts +0 -27
- package/dist/types/networks.d.ts +0 -16
- package/dist/types/providers/ark.d.ts +0 -369
- package/dist/types/providers/delegator.d.ts +0 -82
- package/dist/types/providers/electrum.d.ts +0 -312
- package/dist/types/providers/errors.d.ts +0 -13
- package/dist/types/providers/expoArk.d.ts +0 -22
- package/dist/types/providers/expoIndexer.d.ts +0 -18
- package/dist/types/providers/expoUtils.d.ts +0 -18
- package/dist/types/providers/indexer.d.ts +0 -301
- package/dist/types/providers/onchain.d.ts +0 -148
- package/dist/types/providers/utils.d.ts +0 -12
- package/dist/types/repositories/contractRepository.d.ts +0 -32
- package/dist/types/repositories/inMemory/contractRepository.d.ts +0 -17
- package/dist/types/repositories/inMemory/walletRepository.d.ts +0 -29
- package/dist/types/repositories/index.d.ts +0 -9
- package/dist/types/repositories/indexedDB/contractRepository.d.ts +0 -21
- package/dist/types/repositories/indexedDB/db.d.ts +0 -4
- package/dist/types/repositories/indexedDB/manager.d.ts +0 -25
- package/dist/types/repositories/indexedDB/schema.d.ts +0 -9
- package/dist/types/repositories/indexedDB/walletRepository.d.ts +0 -28
- package/dist/types/repositories/indexedDB/websqlAdapter.d.ts +0 -49
- package/dist/types/repositories/migrations/contractRepositoryImpl.d.ts +0 -24
- package/dist/types/repositories/migrations/fromStorageAdapter.d.ts +0 -19
- package/dist/types/repositories/migrations/walletRepositoryImpl.d.ts +0 -27
- package/dist/types/repositories/realm/contractRepository.d.ts +0 -24
- package/dist/types/repositories/realm/index.d.ts +0 -4
- package/dist/types/repositories/realm/types.d.ts +0 -16
- package/dist/types/repositories/realm/walletRepository.d.ts +0 -34
- package/dist/types/repositories/scriptFromAddress.d.ts +0 -9
- package/dist/types/repositories/serialization.d.ts +0 -65
- package/dist/types/repositories/sqlite/contractRepository.d.ts +0 -33
- package/dist/types/repositories/sqlite/index.d.ts +0 -3
- package/dist/types/repositories/sqlite/types.d.ts +0 -18
- package/dist/types/repositories/walletRepository.d.ts +0 -72
- package/dist/types/script/address.d.ts +0 -67
- package/dist/types/script/base.d.ts +0 -105
- package/dist/types/script/default.d.ts +0 -44
- package/dist/types/script/delegate.d.ts +0 -40
- package/dist/types/script/tapscript.d.ts +0 -169
- package/dist/types/script/vhtlc.d.ts +0 -66
- package/dist/types/tree/signingSession.d.ts +0 -37
- package/dist/types/tree/txTree.d.ts +0 -28
- package/dist/types/tree/validation.d.ts +0 -15
- package/dist/types/utils/anchor.d.ts +0 -19
- package/dist/types/utils/arkTransaction.d.ts +0 -49
- package/dist/types/utils/bip21.d.ts +0 -38
- package/dist/types/utils/syncCursors.d.ts +0 -60
- package/dist/types/utils/timelock.d.ts +0 -9
- package/dist/types/utils/transaction.d.ts +0 -13
- package/dist/types/utils/transactionHistory.d.ts +0 -15
- package/dist/types/utils/txSizeEstimator.d.ts +0 -40
- package/dist/types/utils/unknownFields.d.ts +0 -83
- package/dist/types/wallet/asset-manager.d.ts +0 -69
- package/dist/types/wallet/asset.d.ts +0 -21
- package/dist/types/wallet/batch.d.ts +0 -107
- package/dist/types/wallet/delegator.d.ts +0 -48
- package/dist/types/wallet/expo/background.d.ts +0 -66
- package/dist/types/wallet/expo/index.d.ts +0 -4
- package/dist/types/wallet/hdDescriptorProvider.d.ts +0 -114
- package/dist/types/wallet/index.d.ts +0 -789
- package/dist/types/wallet/inputSignerRouter.d.ts +0 -35
- package/dist/types/wallet/onchain.d.ts +0 -109
- package/dist/types/wallet/ramps.d.ts +0 -64
- package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +0 -543
- package/dist/types/wallet/serviceWorker/wallet.d.ts +0 -248
- package/dist/types/wallet/signingErrors.d.ts +0 -19
- package/dist/types/wallet/unroll.d.ts +0 -114
- package/dist/types/wallet/utils.d.ts +0 -36
- package/dist/types/wallet/validation.d.ts +0 -24
- package/dist/types/wallet/vtxo-manager.d.ts +0 -476
- package/dist/types/wallet/wallet.d.ts +0 -409
- package/dist/types/wallet/walletReceiveRotator.d.ts +0 -306
- package/dist/types/worker/browser/service-worker-manager.d.ts +0 -32
- package/dist/types/worker/browser/utils.d.ts +0 -17
- package/dist/types/worker/errors.d.ts +0 -7
- package/dist/types/worker/expo/index.d.ts +0 -7
- package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +0 -19
- package/dist/types/worker/expo/processors/index.d.ts +0 -1
- package/dist/types/worker/expo/taskQueue.d.ts +0 -50
- package/dist/types/worker/expo/taskRunner.d.ts +0 -66
- package/dist/types/worker/messageBus.d.ts +0 -189
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/transaction.ts","../src/utils/unknownFields.ts","../src/providers/errors.ts","../src/intent/index.ts","../src/providers/utils.ts","../src/providers/ark.ts","../src/extension/asset/index.ts","../src/extension/asset/types.ts","../src/extension/asset/utils.ts","../src/extension/asset/assetId.ts","../src/extension/asset/assetRef.ts","../src/extension/asset/assetInput.ts","../src/extension/asset/assetOutput.ts","../src/extension/asset/metadata.ts","../src/extension/asset/assetGroup.ts","../src/extension/asset/packet.ts","../src/providers/indexer.ts"],"names":["BtcSignerTransaction","ArkPsbtFieldKey","Intent","hex","SettlementEventType","AssetInputType","AssetRefType","schnorr","IndexerTxType","ChainTxType","Response"],"mappings":"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","file":"chunk-ZBUDLTBO.js","sourcesContent":["import { Transaction as BtcSignerTransaction } from \"@scure/btc-signer\";\nimport { TxOpts } from \"@scure/btc-signer/transaction.js\";\nimport { Bytes } from \"@scure/btc-signer/utils.js\";\n\n/**\n * Transaction is a wrapper around the @scure/btc-signer Transaction class.\n * It adds the Arkade protocol specific options to the transaction.\n */\nexport class Transaction extends BtcSignerTransaction {\n static ARK_TX_OPTS: TxOpts = {\n allowUnknown: true,\n allowUnknownOutputs: true,\n allowUnknownInputs: true,\n };\n\n constructor(opts?: TxOpts) {\n super(withArkOpts(opts));\n }\n\n static fromPSBT(psbt_: Bytes, opts?: TxOpts): Transaction {\n return BtcSignerTransaction.fromPSBT(psbt_, withArkOpts(opts));\n }\n\n static fromRaw(raw: Bytes, opts?: TxOpts): Transaction {\n return BtcSignerTransaction.fromRaw(raw, withArkOpts(opts));\n }\n}\n\nfunction withArkOpts(opts?: TxOpts): TxOpts {\n return { ...Transaction.ARK_TX_OPTS, ...opts };\n}\n","import { RawWitness, ScriptNum, Transaction } from \"@scure/btc-signer\";\nimport { TransactionInputUpdate } from \"@scure/btc-signer/psbt.js\";\nimport { hex } from \"@scure/base\";\nimport { sequenceToTimelock } from \"./timelock\";\n\n/**\n * ArkPsbtFieldKey are the available key names for the Arkade PSBT custom fields.\n */\nexport enum ArkPsbtFieldKey {\n VtxoTaprootTree = \"taptree\",\n VtxoTreeExpiry = \"expiry\",\n Cosigner = \"cosigner\",\n ConditionWitness = \"condition\",\n}\n\n/**\n * ArkPsbtFieldKeyType is the key type of the Arkade PSBT custom field.\n * Every Arkade PSBT field has key type 222.\n */\nexport const ArkPsbtFieldKeyType = 222;\n\n/**\n * ArkPsbtFieldCoder is the coder for the Arkade PSBT custom fields.\n * Each type has its own coder.\n */\nexport interface ArkPsbtFieldCoder<T> {\n key: ArkPsbtFieldKey;\n encode: (value: T) => NonNullable<TransactionInputUpdate[\"unknown\"]>[number];\n decode: (value: NonNullable<TransactionInputUpdate[\"unknown\"]>[number]) => T | null;\n}\n\n/**\n * setArkPsbtField appends a new unknown field to the input at inputIndex\n *\n * @example\n * ```typescript\n * setArkPsbtField(tx, 0, VtxoTaprootTree, myTaprootTree);\n * setArkPsbtField(tx, 0, VtxoTreeExpiry, myVtxoTreeExpiry);\n * ```\n */\nexport function setArkPsbtField<T>(\n tx: Transaction,\n inputIndex: number,\n coder: ArkPsbtFieldCoder<T>,\n value: T,\n): void {\n tx.updateInput(inputIndex, {\n unknown: [...(tx.getInput(inputIndex)?.unknown ?? []), coder.encode(value)],\n });\n}\n\n/**\n * getArkPsbtFields returns all the values of the given coder for the input at inputIndex\n * Multiple fields of the same type can exist in a single input.\n *\n * @example\n * ```typescript\n * const vtxoTaprootTreeFields = getArkPsbtFields(tx, 0, VtxoTaprootTree);\n * console.log(`input has ${vtxoTaprootTreeFields.length} vtxoTaprootTree fields`);\n */\nexport function getArkPsbtFields<T>(\n tx: Transaction,\n inputIndex: number,\n coder: ArkPsbtFieldCoder<T>,\n): T[] {\n const unknown = tx.getInput(inputIndex)?.unknown ?? [];\n\n const fields: T[] = [];\n for (const u of unknown) {\n const v = coder.decode(u);\n if (v) fields.push(v);\n }\n return fields;\n}\n\n/**\n * VtxoTaprootTree is set to pass all spending leaves of the vtxo input\n *\n * @example\n * ```typescript\n * const vtxoTaprootTree = VtxoTaprootTree.encode(myTaprootTree);\n */\nexport const VtxoTaprootTree: ArkPsbtFieldCoder<Uint8Array> = {\n key: ArkPsbtFieldKey.VtxoTaprootTree,\n encode: (value) => [\n {\n type: ArkPsbtFieldKeyType,\n key: encodedPsbtFieldKey[ArkPsbtFieldKey.VtxoTaprootTree],\n },\n value,\n ],\n decode: (value) =>\n nullIfCatch(() => {\n if (!checkKeyIncludes(value[0], ArkPsbtFieldKey.VtxoTaprootTree)) return null;\n return value[1];\n }),\n};\n\n/**\n * ConditionWitness is set to pass the witness data used to finalize the conditionMultisigClosure\n *\n * @example\n * ```typescript\n * const conditionWitness = ConditionWitness.encode(myConditionWitness);\n */\nexport const ConditionWitness: ArkPsbtFieldCoder<Uint8Array[]> = {\n key: ArkPsbtFieldKey.ConditionWitness,\n encode: (value) => [\n {\n type: ArkPsbtFieldKeyType,\n key: encodedPsbtFieldKey[ArkPsbtFieldKey.ConditionWitness],\n },\n RawWitness.encode(value),\n ],\n decode: (value) =>\n nullIfCatch(() => {\n if (!checkKeyIncludes(value[0], ArkPsbtFieldKey.ConditionWitness)) return null;\n return RawWitness.decode(value[1]);\n }),\n};\n\n/**\n * CosignerPublicKey is set on every TxGraph transactions to identify the musig2 public keys\n *\n * @example\n * ```typescript\n * const cosignerPublicKey = CosignerPublicKey.encode(myCosignerPublicKey);\n */\nexport const CosignerPublicKey: ArkPsbtFieldCoder<{\n index: number;\n key: Uint8Array;\n}> = {\n key: ArkPsbtFieldKey.Cosigner,\n encode: (value) => [\n {\n type: ArkPsbtFieldKeyType,\n key: new Uint8Array([...encodedPsbtFieldKey[ArkPsbtFieldKey.Cosigner], value.index]),\n },\n value.key,\n ],\n decode: (unknown) =>\n nullIfCatch(() => {\n if (!checkKeyIncludes(unknown[0], ArkPsbtFieldKey.Cosigner)) return null;\n return {\n index: unknown[0].key[unknown[0].key.length - 1],\n key: unknown[1],\n };\n }),\n};\n\n/**\n * VtxoTreeExpiry is set to pass the expiry time of the input\n *\n * @example\n * ```typescript\n * const vtxoTreeExpiry = VtxoTreeExpiry.encode(myVtxoTreeExpiry);\n */\nexport const VtxoTreeExpiry: ArkPsbtFieldCoder<{\n type: \"blocks\" | \"seconds\";\n value: bigint;\n}> = {\n key: ArkPsbtFieldKey.VtxoTreeExpiry,\n encode: (value) => [\n {\n type: ArkPsbtFieldKeyType,\n key: encodedPsbtFieldKey[ArkPsbtFieldKey.VtxoTreeExpiry],\n },\n ScriptNum(6, true).encode(value.value === 0n ? 0n : value.value),\n ],\n decode: (unknown) =>\n nullIfCatch(() => {\n if (!checkKeyIncludes(unknown[0], ArkPsbtFieldKey.VtxoTreeExpiry)) return null;\n const v = ScriptNum(6, true).decode(unknown[1]);\n if (!v) return null;\n return sequenceToTimelock(Number(v));\n }),\n};\n\nconst encodedPsbtFieldKey: Record<string, Uint8Array> = Object.fromEntries(\n Object.values(ArkPsbtFieldKey).map((key) => [key, new TextEncoder().encode(key)]),\n);\n\nconst nullIfCatch = <T>(fn: () => T): T | null => {\n try {\n return fn();\n } catch (err) {\n return null;\n }\n};\n\nfunction checkKeyIncludes(\n key: { type: number; key: Uint8Array },\n arkPsbtFieldKey: ArkPsbtFieldKey,\n): boolean {\n const expected = hex.encode(encodedPsbtFieldKey[arkPsbtFieldKey]);\n return hex.encode(new Uint8Array([key.type, ...key.key])).includes(expected);\n}\n","export class ArkError extends Error {\n constructor(\n readonly code: number,\n readonly message: string,\n readonly name: string,\n readonly metadata?: Record<string, string>,\n ) {\n super(message);\n }\n}\n\n/**\n * Try to convert an error to an ArkError class, returning undefined if the error is not an ArkError\n * @param error - The error to parse\n * @returns The parsed ArkError, or undefined if the error is not an ArkError\n */\nexport function maybeArkError(error: any): ArkError | undefined {\n try {\n if (!(error instanceof Error)) return undefined;\n const decoded = JSON.parse(error.message);\n\n if (!(\"details\" in decoded)) return undefined;\n if (!Array.isArray(decoded.details)) return undefined;\n\n // search for a valid details object with the correct type\n for (const details of decoded.details) {\n if (!(\"@type\" in details)) continue;\n const type = details[\"@type\"];\n if (type !== \"type.googleapis.com/ark.v1.ErrorDetails\") continue;\n\n if (!(\"code\" in details)) continue;\n\n const code = details.code;\n\n if (!(\"message\" in details)) continue;\n const message = details.message;\n\n if (!(\"name\" in details)) continue;\n const name = details.name;\n\n let metadata: Record<string, string> | undefined;\n if (\"metadata\" in details && isMetadata(details.metadata)) {\n metadata = details.metadata;\n }\n\n return new ArkError(code, message, name, metadata);\n }\n return undefined;\n } catch (e) {\n return undefined;\n }\n}\n\nfunction isMetadata(value: any): value is Record<string, string> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { OP, Script, SigHash } from \"@scure/btc-signer\";\nimport { TransactionInput, TransactionOutput } from \"@scure/btc-signer/psbt.js\";\nimport { schnorr } from \"@noble/curves/secp256k1.js\";\nimport { Bytes } from \"@scure/btc-signer/utils.js\";\nimport { Transaction } from \"../utils/transaction\";\nimport { ConditionWitness, VtxoTaprootTree } from \"../utils/unknownFields\";\nimport { hex } from \"@scure/base\";\nimport { getSequence, VtxoScript } from \"../script/base\";\nimport { ExtendedCoin } from \"../wallet\";\n\n/**\n * Intent proof implementation for Bitcoin message signing.\n *\n * Intent proof defines a standard for signing Bitcoin messages as well as proving\n * ownership of outputs.\n *\n * This namespace provides utilities for creating and validating Intent proof.\n *\n * It is greatly inspired by BIP322.\n * @see https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki\n *\n * @example\n * ```typescript\n * // Create a Intent proof\n * const proof = Intent.create(\n * \"Hello Bitcoin!\",\n * [input],\n * [output]\n * );\n *\n * // Sign the proof\n * const signedProof = await identity.sign(proof);\n *\n */\nexport namespace Intent {\n // Intent proof is a special invalid psbt containing the inputs to prove ownership\n // signing the proof means signing the psbt as a regular transaction\n export type Proof = Transaction;\n\n /**\n * Creates a new Intent proof unsigned transaction.\n *\n * This function constructs a special transaction that can be signed to prove\n * ownership of onchain and virtual outputs. The proof includes the message to be\n * signed and the inputs/outputs that demonstrate ownership.\n *\n * @param message - The Intent message to be signed, either raw string of Message object\n * @param ins - Array of transaction inputs to prove ownership of\n * @param outputs - Optional array of transaction outputs\n * @returns An unsigned Intent proof transaction\n */\n export function create(\n message: string | Message,\n ins: (TransactionInput | ExtendedCoin)[],\n outputs: TransactionOutput[] = [],\n ): Proof {\n if (typeof message !== \"string\") {\n message = encodeMessage(message);\n }\n\n if (ins.length == 0) throw new Error(\"intent proof requires at least one input\");\n const inputs = ins.map(prepareCoinAsIntentProofInput);\n if (!validateInputs(inputs)) throw new Error(\"invalid inputs\");\n if (!validateOutputs(outputs)) throw new Error(\"invalid outputs\");\n\n // Create the initial transaction to spend.\n const toSpend = craftToSpendTx(message, inputs[0].witnessUtxo.script);\n\n // Create the transaction to sign.\n return craftToSignTx(toSpend, inputs, outputs);\n }\n\n /**\n * Compute the fee paid by an intent proof transaction.\n *\n * @param proof - Intent proof transaction\n * @returns The fee in satoshis\n */\n export function fee(proof: Proof): number {\n let sumOfInputs = 0n;\n for (let i = 0; i < proof.inputsLength; i++) {\n const input = proof.getInput(i);\n if (input.witnessUtxo === undefined)\n throw new Error(\"intent proof input requires witness utxo\");\n sumOfInputs += input.witnessUtxo.amount;\n }\n\n let sumOfOutputs = 0n;\n for (let i = 0; i < proof.outputsLength; i++) {\n const output = proof.getOutput(i);\n if (output.amount === undefined) throw new Error(\"intent proof output requires amount\");\n sumOfOutputs += output.amount;\n }\n\n if (sumOfOutputs > sumOfInputs) {\n throw new Error(\n `intent proof output amount is greater than input amount: ${sumOfOutputs} > ${sumOfInputs}`,\n );\n }\n\n return Number(sumOfInputs - sumOfOutputs);\n }\n\n export type RegisterMessage = {\n type: \"register\";\n onchain_output_indexes: number[];\n valid_at: number;\n expire_at: number;\n cosigners_public_keys: string[];\n };\n\n export type DeleteMessage = {\n type: \"delete\";\n expire_at: number;\n };\n\n export type GetPendingTxMessage = {\n type: \"get-pending-tx\";\n expire_at: number;\n };\n export type Message = RegisterMessage | DeleteMessage | GetPendingTxMessage;\n\n /**\n * Serialize an intent message to the canonical JSON string used for signing.\n *\n * @param message - Intent message payload\n * @returns Canonical string form of the message\n */\n export function encodeMessage(message: Message): string {\n switch (message.type) {\n case \"register\":\n return JSON.stringify({\n type: \"register\",\n onchain_output_indexes: message.onchain_output_indexes,\n valid_at: message.valid_at,\n expire_at: message.expire_at,\n cosigners_public_keys: message.cosigners_public_keys,\n });\n case \"delete\":\n return JSON.stringify({\n type: \"delete\",\n expire_at: message.expire_at,\n });\n case \"get-pending-tx\":\n return JSON.stringify({\n type: \"get-pending-tx\",\n expire_at: message.expire_at,\n });\n }\n }\n}\n\nexport const OP_RETURN_EMPTY_PKSCRIPT = new Uint8Array([OP.RETURN]);\nconst ZERO_32 = new Uint8Array(32).fill(0);\nconst MAX_INDEX = 0xffffffff;\nexport const TAG_INTENT_PROOF = \"ark-intent-proof-message\";\n\ntype ValidatedTxInput = TransactionInput & {\n witnessUtxo: { script: Uint8Array; amount: bigint };\n index: number;\n txid: Bytes;\n};\n\ntype ValidatedTxOutput = TransactionOutput & {\n amount: bigint;\n script: Uint8Array;\n};\n\nfunction validateInput(input: TransactionInput): input is ValidatedTxInput {\n if (input.index === undefined) throw new Error(\"intent proof input requires index\");\n if (input.txid === undefined) throw new Error(\"intent proof input requires txid\");\n if (input.witnessUtxo === undefined)\n throw new Error(\"intent proof input requires witness utxo\");\n return true;\n}\n\nfunction validateInputs(inputs: TransactionInput[]): inputs is ValidatedTxInput[] {\n inputs.forEach(validateInput);\n return true;\n}\n\nfunction validateOutput(output: TransactionOutput): output is ValidatedTxOutput {\n if (output.amount === undefined) throw new Error(\"intent proof output requires amount\");\n if (output.script === undefined) throw new Error(\"intent proof output requires script\");\n return true;\n}\n\nfunction validateOutputs(outputs: TransactionOutput[]): outputs is ValidatedTxOutput[] {\n outputs.forEach(validateOutput);\n return true;\n}\n\n/**\n * Creates the \"to_spend\" transaction used by both intent proofs and BIP-322.\n *\n * The message is hashed with the given tagged-hash tag before being placed\n * into the scriptSig as `OP_0 <hash>`.\n *\n * @param message - The message to embed\n * @param pkScript - The scriptPubKey of the signer's address\n * @param tag - Tagged-hash tag (defaults to the Arkade intent proof tag)\n */\nexport function craftToSpendTx(\n message: string,\n pkScript: Uint8Array,\n tag: string = TAG_INTENT_PROOF,\n): Transaction {\n const messageHash = hashMessage(message, tag);\n const tx = new Transaction({\n version: 0,\n });\n\n // add input with zero hash and max index\n tx.addInput({\n txid: ZERO_32, // zero hash\n index: MAX_INDEX,\n sequence: 0,\n });\n\n // add output with zero value and provided pkScript\n tx.addOutput({\n amount: 0n,\n script: pkScript,\n });\n\n tx.updateInput(0, {\n finalScriptSig: Script.encode([\"OP_0\", messageHash]),\n });\n\n return tx;\n}\n\n// craftToSignTx creates the transaction that will be signed for the proof\nfunction craftToSignTx(\n toSpend: Transaction,\n inputs: ValidatedTxInput[],\n outputs: ValidatedTxOutput[],\n): Transaction {\n const firstInput = inputs[0];\n\n // Proof tx is never broadcast onchain — toSpend references a zero-hash\n // outpoint (see BIP-322). The tx exists only as a sighash commitment\n // the server verifies signatures against; nLockTime and nSequence carry\n // no consensus meaning here, they only need to match between signer and\n // verifier. Use lockTime = 0 (BIP-322 convention) and leave each input's\n // nSequence untouched.\n const tx = new Transaction({\n version: 2,\n lockTime: 0,\n });\n\n // add the first \"toSpend\" input\n tx.addInput({\n ...firstInput,\n txid: toSpend.id,\n index: 0,\n witnessUtxo: {\n script: firstInput.witnessUtxo.script,\n amount: 0n,\n },\n sighashType: SigHash.ALL,\n });\n\n // add other inputs\n for (const [i, input] of inputs.entries()) {\n tx.addInput({\n ...input,\n sighashType: SigHash.ALL,\n });\n\n if (input.unknown?.length) {\n tx.updateInput(i + 1, {\n unknown: input.unknown,\n });\n }\n }\n\n // add the special OP_RETURN output if no outputs are provided\n if (outputs.length === 0) {\n outputs = [\n {\n amount: 0n,\n script: OP_RETURN_EMPTY_PKSCRIPT,\n },\n ];\n }\n\n for (const output of outputs) {\n tx.addOutput({\n amount: output.amount,\n script: output.script,\n });\n }\n\n return tx;\n}\n\nfunction hashMessage(message: string, tag: string = TAG_INTENT_PROOF): Uint8Array {\n return schnorr.utils.taggedHash(tag, new TextEncoder().encode(message));\n}\n\nfunction prepareCoinAsIntentProofInput(coin: ExtendedCoin | TransactionInput): TransactionInput {\n if (!(\"tapTree\" in coin)) {\n return coin;\n }\n const vtxoScript = VtxoScript.decode(coin.tapTree);\n const sequence = getSequence(coin.intentTapLeafScript);\n\n const unknown = [VtxoTaprootTree.encode(coin.tapTree)];\n if (coin.extraWitness) {\n unknown.push(ConditionWitness.encode(coin.extraWitness));\n }\n\n return {\n txid: hex.decode(coin.txid),\n index: coin.vout,\n witnessUtxo: {\n amount: BigInt(coin.value),\n script: vtxoScript.pkScript,\n },\n sequence,\n tapLeafScript: [coin.intentTapLeafScript],\n unknown,\n };\n}\n","export type ManagedEventSourceIterator = AsyncGenerator<MessageEvent, void, unknown> & {\n close(): void;\n};\n\nfunction createAbortError(): Error {\n const error = new Error(\"EventSource closed\");\n error.name = \"AbortError\";\n return error;\n}\n\n/**\n * Creates a close-aware EventSource async iterator.\n *\n * Listeners attach eagerly so events are buffered before the first next() call.\n * close() closes the EventSource, removes listeners, and wakes any pending\n * next() even when the browser does not emit an error from EventSource.close().\n */\nexport function eventSourceIterator(eventSource: EventSource): ManagedEventSourceIterator {\n const messageQueue: MessageEvent[] = [];\n const errorQueue: Error[] = [];\n let messageResolve: ((value: MessageEvent) => void) | null = null;\n let errorResolve: ((error: Error) => void) | null = null;\n let closed = false;\n let cleanedUp = false;\n\n const cleanup = () => {\n if (cleanedUp) return;\n cleanedUp = true;\n eventSource.removeEventListener(\"message\", messageHandler);\n eventSource.removeEventListener(\"error\", errorHandler);\n };\n\n const close = () => {\n if (closed) return;\n closed = true;\n messageQueue.length = 0;\n errorQueue.length = 0;\n eventSource.close();\n cleanup();\n\n if (errorResolve) {\n const reject = errorResolve;\n messageResolve = null;\n errorResolve = null;\n reject(createAbortError());\n }\n };\n\n const messageHandler = (event: MessageEvent) => {\n if (closed) return;\n if (messageResolve) {\n const resolve = messageResolve;\n messageResolve = null;\n errorResolve = null;\n resolve(event);\n } else {\n messageQueue.push(event);\n }\n };\n\n const errorHandler = () => {\n if (closed) return;\n const error = new Error(\"EventSource error\");\n error.name = \"EventSourceError\";\n if (errorResolve) {\n const reject = errorResolve;\n messageResolve = null;\n errorResolve = null;\n reject(error);\n } else {\n errorQueue.push(error);\n }\n };\n\n // Attach listeners immediately so events are buffered\n // even before the caller starts iterating\n eventSource.addEventListener(\"message\", messageHandler);\n eventSource.addEventListener(\"error\", errorHandler);\n\n const gen = (async function* () {\n try {\n while (!closed) {\n // if we have queued messages, yield the first one, remove it from the queue\n if (messageQueue.length > 0) {\n yield messageQueue.shift()!;\n continue;\n }\n\n // if we have queued errors, throw the first one, remove it from the queue\n if (errorQueue.length > 0) {\n const error = errorQueue.shift()!;\n throw error;\n }\n\n // wait for the next message or error\n const result = await new Promise<MessageEvent>((resolve, reject) => {\n messageResolve = resolve;\n errorResolve = reject;\n }).finally(() => {\n messageResolve = null;\n errorResolve = null;\n });\n\n if (!closed && result) {\n yield result;\n }\n }\n } finally {\n closed = true;\n cleanup();\n eventSource.close();\n }\n })();\n\n const origReturn = gen.return.bind(gen);\n const managed = gen as ManagedEventSourceIterator;\n managed.close = close;\n managed.return = (value?: void | PromiseLike<void>) => {\n close();\n return origReturn(value);\n };\n\n return managed;\n}\n\nexport function isEventSourceError(error: unknown): error is Error {\n return error instanceof Error && error.name === \"EventSourceError\";\n}\n","import { TxTreeNode } from \"../tree/txTree\";\nimport { TreeNonces, TreePartialSigs } from \"../tree/signingSession\";\nimport { hex } from \"@scure/base\";\nimport { Vtxo } from \"./indexer\";\nimport { eventSourceIterator, isEventSourceError } from \"./utils\";\nimport { maybeArkError } from \"./errors\";\nimport type { IntentFeeConfig } from \"../arkfee\";\nimport { Intent } from \"../intent\";\n\n/** Output requested during settlement or transaction submission. */\nexport type Output = {\n /** Destination address, either onchain or Arkade (offchain). */\n address: string;\n\n /** Amount to send in satoshis. */\n amount: bigint;\n};\n\nexport enum SettlementEventType {\n BatchStarted = \"batch_started\",\n BatchFinalization = \"batch_finalization\",\n BatchFinalized = \"batch_finalized\",\n BatchFailed = \"batch_failed\",\n TreeSigningStarted = \"tree_signing_started\",\n TreeNonces = \"tree_nonces\",\n TreeTx = \"tree_tx\",\n TreeSignature = \"tree_signature\",\n StreamStarted = \"stream_started\",\n}\n\nexport type BatchFinalizationEvent = {\n type: SettlementEventType.BatchFinalization;\n id: string;\n commitmentTx: string;\n};\n\nexport type BatchFinalizedEvent = {\n type: SettlementEventType.BatchFinalized;\n id: string;\n commitmentTxid: string;\n};\n\nexport type BatchFailedEvent = {\n type: SettlementEventType.BatchFailed;\n id: string;\n reason: string;\n};\n\nexport type TreeSigningStartedEvent = {\n type: SettlementEventType.TreeSigningStarted;\n id: string;\n cosignersPublicKeys: string[];\n unsignedCommitmentTx: string;\n};\n\nexport type TreeNoncesEvent = {\n type: SettlementEventType.TreeNonces;\n id: string;\n topic: string[];\n txid: string;\n /** Musig2 public nonces keyed by cosigner public key. */\n nonces: TreeNonces;\n};\n\nexport type BatchStartedEvent = {\n type: SettlementEventType.BatchStarted;\n id: string;\n intentIdHashes: string[];\n batchExpiry: bigint;\n};\n\nexport type TreeTxEvent = {\n type: SettlementEventType.TreeTx;\n id: string;\n topic: string[];\n batchIndex: number;\n chunk: TxTreeNode;\n};\n\nexport type TreeSignatureEvent = {\n type: SettlementEventType.TreeSignature;\n id: string;\n topic: string[];\n batchIndex: number;\n txid: string;\n signature: string;\n};\n\nexport type StreamStartedEvent = {\n type: SettlementEventType.StreamStarted;\n id: string;\n};\n\nexport type SettlementEvent =\n | BatchFinalizationEvent\n | BatchFinalizedEvent\n | BatchFailedEvent\n | TreeSigningStartedEvent\n | TreeNoncesEvent\n | BatchStartedEvent\n | TreeTxEvent\n | TreeSignatureEvent\n | StreamStartedEvent;\n\nexport interface ScheduledSession {\n duration: bigint;\n fees: FeeInfo;\n nextEndTime: bigint;\n nextStartTime: bigint;\n period: bigint;\n}\n\nexport interface FeeInfo {\n intentFee: IntentFeeConfig;\n txFeeRate: string;\n}\n\nexport interface PendingTx {\n arkTxid: string;\n finalArkTx: string;\n signedCheckpointTxs: string[];\n}\n\nexport interface DeprecatedSigner {\n cutoffDate: bigint;\n pubkey: string;\n}\n\nexport type ServiceStatus = Record<string, string>;\n\nexport interface ArkInfo {\n boardingExitDelay: bigint;\n checkpointTapscript: string;\n deprecatedSigners: DeprecatedSigner[];\n digest: string;\n dust: bigint;\n fees: FeeInfo;\n forfeitAddress: string;\n forfeitPubkey: string;\n network: string;\n scheduledSession?: ScheduledSession;\n serviceStatus: ServiceStatus;\n sessionDuration: bigint;\n signerPubkey: string;\n unilateralExitDelay: bigint;\n /**\n * Maximum boarding input amount.\n *\n * @remarks\n * `-1` means unlimited, while `0` disables boarding.\n */\n utxoMaxAmount: bigint;\n utxoMinAmount: bigint;\n version: string;\n /**\n * Maximum virtual output amount.\n *\n * @remarks\n * `-1` means unlimited.\n */\n vtxoMaxAmount: bigint;\n vtxoMinAmount: bigint;\n}\n\n/** Signed intent payload sent to the Arkade server. */\nexport interface SignedIntent<T extends Intent.Message> {\n /** Base64-encoded signed proof transaction. */\n proof: string;\n\n /** Intent message payload associated with the proof. */\n message: T;\n}\n\n/** Transaction notification emitted by the Arkade server stream. */\nexport interface TxNotification {\n /** Transaction id. */\n txid: string;\n\n /** Raw transaction payload. */\n tx: string;\n\n /** Virtual outputs spent by the transaction. */\n spentVtxos: Vtxo[];\n\n /** Virtual outputs made spendable by the transaction. */\n spendableVtxos: Vtxo[];\n\n /** Optional checkpoint transactions associated with the notification. */\n checkpointTxs?: Record<string, { txid: string; tx: string }>;\n}\n\nexport interface ArkProvider {\n /** Fetch Arkade server configuration and fee settings. */\n getInfo(): Promise<ArkInfo>;\n\n /** Submit a signed Arkade transaction and its checkpoint transactions. */\n submitTx(\n signedArkTx: string,\n checkpointTxs: string[],\n ): Promise<{\n arkTxid: string;\n finalArkTx: string;\n signedCheckpointTxs: string[];\n }>;\n\n /** Finalize a previously submitted Arkade transaction. */\n finalizeTx(arkTxid: string, finalCheckpointTxs: string[]): Promise<void>;\n\n /** Register a signed intent with the Arkade server. */\n registerIntent(intent: SignedIntent<Intent.RegisterMessage>): Promise<string>;\n\n /** Delete a previously registered intent. */\n deleteIntent(intent: SignedIntent<Intent.DeleteMessage>): Promise<void>;\n\n /** Confirm an already registered intent id. */\n confirmRegistration(intentId: string): Promise<void>;\n\n /** Submit musig2 tree nonces for a batch signing session. */\n submitTreeNonces(batchId: string, pubkey: string, nonces: TreeNonces): Promise<void>;\n\n /** Submit musig2 partial signatures for a batch signing session. */\n submitTreeSignatures(\n batchId: string,\n pubkey: string,\n signatures: TreePartialSigs,\n ): Promise<void>;\n\n /** Submit signed forfeit transactions for cooperative settlement. */\n submitSignedForfeitTxs(signedForfeitTxs: string[], signedCommitmentTx?: string): Promise<void>;\n\n /** Open the settlement event stream for the given topics. */\n getEventStream(signal: AbortSignal, topics: string[]): AsyncIterableIterator<SettlementEvent>;\n\n /** Stream transaction notifications emitted by the Arkade server. */\n getTransactionsStream(signal: AbortSignal): AsyncIterableIterator<{\n commitmentTx?: TxNotification;\n arkTx?: TxNotification;\n }>;\n\n /** Fetch pending transactions for a signed get-pending-tx intent. */\n getPendingTxs(intent: SignedIntent<Intent.GetPendingTxMessage>): Promise<PendingTx[]>;\n}\n\n/**\n * REST-based Arkade provider implementation.\n *\n * @see https://buf.build/arkade-os/arkd/docs/main:ark.v1#ark.v1.ArkService\n * @example\n * ```typescript\n * const provider = new RestArkProvider('https://arkade.computer');\n * const info = await provider.getInfo();\n * ```\n */\nexport class RestArkProvider implements ArkProvider {\n constructor(public serverUrl: string) {}\n\n async getInfo(): Promise<ArkInfo> {\n const url = `${this.serverUrl}/v1/info`;\n const response = await fetch(url);\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to get server info: ${response.statusText}`);\n }\n const fromServer = await response.json();\n return {\n boardingExitDelay: BigInt(fromServer.boardingExitDelay ?? 0),\n checkpointTapscript: fromServer.checkpointTapscript ?? \"\",\n deprecatedSigners:\n fromServer.deprecatedSigners?.map((signer: any) => ({\n cutoffDate: BigInt(signer.cutoffDate ?? 0),\n pubkey: signer.pubkey ?? \"\",\n })) ?? [],\n digest: fromServer.digest ?? \"\",\n dust: BigInt(fromServer.dust ?? 0),\n fees: {\n intentFee: fromServer.fees?.intentFee ?? {},\n txFeeRate: fromServer?.fees?.txFeeRate ?? \"\",\n },\n forfeitAddress: fromServer.forfeitAddress ?? \"\",\n forfeitPubkey: fromServer.forfeitPubkey ?? \"\",\n network: fromServer.network ?? \"\",\n scheduledSession:\n \"scheduledSession\" in fromServer && fromServer.scheduledSession != null\n ? {\n duration: BigInt(fromServer.scheduledSession.duration ?? 0),\n nextStartTime: BigInt(fromServer.scheduledSession.nextStartTime ?? 0),\n nextEndTime: BigInt(fromServer.scheduledSession.nextEndTime ?? 0),\n period: BigInt(fromServer.scheduledSession.period ?? 0),\n fees: fromServer.scheduledSession.fees ?? {},\n }\n : undefined,\n serviceStatus: fromServer.serviceStatus ?? {},\n sessionDuration: BigInt(fromServer.sessionDuration ?? 0),\n signerPubkey: fromServer.signerPubkey ?? \"\",\n unilateralExitDelay: BigInt(fromServer.unilateralExitDelay ?? 0),\n utxoMaxAmount: BigInt(fromServer.utxoMaxAmount ?? -1),\n utxoMinAmount: BigInt(fromServer.utxoMinAmount ?? 0),\n version: fromServer.version ?? \"\",\n vtxoMaxAmount: BigInt(fromServer.vtxoMaxAmount ?? -1),\n vtxoMinAmount: BigInt(fromServer.vtxoMinAmount ?? 0),\n };\n }\n\n async submitTx(\n signedArkTx: string,\n checkpointTxs: string[],\n ): Promise<{\n arkTxid: string;\n finalArkTx: string;\n signedCheckpointTxs: string[];\n }> {\n const url = `${this.serverUrl}/v1/tx/submit`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n signedArkTx,\n checkpointTxs,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to submit virtual transaction: ${errorText}`);\n }\n\n const data = await response.json();\n return {\n arkTxid: data.arkTxid,\n finalArkTx: data.finalArkTx,\n signedCheckpointTxs: data.signedCheckpointTxs,\n };\n }\n\n async finalizeTx(arkTxid: string, finalCheckpointTxs: string[]): Promise<void> {\n const url = `${this.serverUrl}/v1/tx/finalize`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n arkTxid,\n finalCheckpointTxs,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to finalize offchain transaction: ${errorText}`);\n }\n }\n\n async registerIntent(intent: SignedIntent<Intent.RegisterMessage>): Promise<string> {\n const url = `${this.serverUrl}/v1/batch/registerIntent`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n intent: {\n proof: intent.proof,\n message: Intent.encodeMessage(intent.message),\n },\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to register intent: ${errorText}`);\n }\n\n const data = await response.json();\n return data.intentId;\n }\n\n async deleteIntent(intent: SignedIntent<Intent.DeleteMessage>): Promise<void> {\n const url = `${this.serverUrl}/v1/batch/deleteIntent`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n intent: {\n proof: intent.proof,\n message: Intent.encodeMessage(intent.message),\n },\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to delete intent: ${errorText}`);\n }\n }\n\n async confirmRegistration(intentId: string): Promise<void> {\n const url = `${this.serverUrl}/v1/batch/ack`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n intentId,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to confirm registration: ${errorText}`);\n }\n }\n\n async submitTreeNonces(batchId: string, pubkey: string, nonces: TreeNonces): Promise<void> {\n const url = `${this.serverUrl}/v1/batch/tree/submitNonces`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n batchId,\n pubkey,\n treeNonces: encodeMusig2Nonces(nonces),\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to submit tree nonces: ${errorText}`);\n }\n }\n\n async submitTreeSignatures(\n batchId: string,\n pubkey: string,\n signatures: TreePartialSigs,\n ): Promise<void> {\n const url = `${this.serverUrl}/v1/batch/tree/submitSignatures`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n batchId,\n pubkey,\n treeSignatures: encodeMusig2Signatures(signatures),\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to submit tree signatures: ${errorText}`);\n }\n }\n\n async submitSignedForfeitTxs(\n signedForfeitTxs: string[],\n signedCommitmentTx?: string,\n ): Promise<void> {\n const url = `${this.serverUrl}/v1/batch/submitForfeitTxs`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n signedForfeitTxs: signedForfeitTxs,\n signedCommitmentTx: signedCommitmentTx,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to submit forfeit transactions: ${response.statusText}`);\n }\n }\n\n getEventStream(signal: AbortSignal, topics: string[]): AsyncIterableIterator<SettlementEvent> {\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 // The EventSource is allocated inside the generator body so that\n // abandoning the returned iterator before iteration starts does not\n // leak the underlying SSE connection. `return()` is overridden below\n // so that closing the generator also closes the connection even when\n // the body is currently suspended at an await point.\n let iterator: ReturnType<typeof eventSourceIterator> | null = null;\n const closeIterator = () => iterator?.close();\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const gen = (async function* () {\n const abortHandler = closeIterator;\n signal?.addEventListener(\"abort\", abortHandler);\n\n try {\n while (!signal?.aborted) {\n const currentIterator = eventSourceIterator(new EventSource(url + queryParams));\n iterator = currentIterator;\n\n try {\n for await (const event of currentIterator) {\n if (signal?.aborted) break;\n\n try {\n const data = JSON.parse(event.data);\n const settlementEvent = self.parseSettlementEvent(data);\n if (settlementEvent) {\n yield settlementEvent;\n }\n } catch (err) {\n console.error(\"Failed to parse event:\", err);\n throw err;\n }\n }\n } catch (error) {\n if (\n signal?.aborted ||\n (error instanceof Error && error.name === \"AbortError\")\n ) {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n if (isEventSourceError(error)) {\n throw error;\n }\n\n console.error(\"Event stream error:\", error);\n throw error;\n } finally {\n currentIterator.close();\n iterator = null;\n }\n }\n } finally {\n signal?.removeEventListener(\"abort\", abortHandler);\n closeIterator();\n }\n })();\n\n const origReturn = gen.return.bind(gen);\n gen.return = (value) => {\n closeIterator();\n return origReturn(value);\n };\n\n return gen;\n }\n\n getTransactionsStream(signal: AbortSignal): AsyncIterableIterator<{\n commitmentTx?: TxNotification;\n arkTx?: TxNotification;\n }> {\n const url = `${this.serverUrl}/v1/txs`;\n let iterator: ReturnType<typeof eventSourceIterator> | null = null;\n const closeIterator = () => iterator?.close();\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const gen = (async function* () {\n const abortHandler = closeIterator;\n signal?.addEventListener(\"abort\", abortHandler);\n\n try {\n while (!signal?.aborted) {\n try {\n const currentIterator = eventSourceIterator(new EventSource(url));\n iterator = currentIterator;\n\n for await (const event of currentIterator) {\n if (signal?.aborted) break;\n\n try {\n const data = JSON.parse(event.data);\n const txNotification = self.parseTransactionNotification(data);\n if (txNotification) {\n yield txNotification;\n }\n } catch (err) {\n console.error(\"Failed to parse transaction notification:\", err);\n throw err;\n }\n }\n } catch (error) {\n if (\n signal?.aborted ||\n (error instanceof Error && error.name === \"AbortError\")\n ) {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n if (isEventSourceError(error)) {\n throw error;\n }\n\n console.error(\"Transaction stream error:\", error);\n throw error;\n } finally {\n closeIterator();\n iterator = null;\n }\n }\n } finally {\n signal?.removeEventListener(\"abort\", abortHandler);\n closeIterator();\n }\n })();\n\n const origReturn = gen.return.bind(gen);\n gen.return = (value) => {\n closeIterator();\n return origReturn(value);\n };\n\n return gen;\n }\n\n async getPendingTxs(intent: SignedIntent<Intent.GetPendingTxMessage>): Promise<PendingTx[]> {\n const url = `${this.serverUrl}/v1/tx/pending`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n intent: {\n proof: intent.proof,\n message: Intent.encodeMessage(intent.message),\n },\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n handleError(errorText, `Failed to get pending transactions: ${errorText}`);\n }\n\n const data = await response.json();\n return data.pendingTxs;\n }\n\n protected parseSettlementEvent(\n data: ProtoTypes.GetEventStreamResponse,\n ): SettlementEvent | null {\n // Check for BatchStarted event\n if (data.batchStarted) {\n return {\n type: SettlementEventType.BatchStarted,\n id: data.batchStarted.id,\n intentIdHashes: data.batchStarted.intentIdHashes,\n batchExpiry: BigInt(data.batchStarted.batchExpiry),\n };\n }\n\n // Check for BatchFinalization event\n if (data.batchFinalization) {\n return {\n type: SettlementEventType.BatchFinalization,\n id: data.batchFinalization.id,\n commitmentTx: data.batchFinalization.commitmentTx,\n };\n }\n\n // Check for BatchFinalized event\n if (data.batchFinalized) {\n return {\n type: SettlementEventType.BatchFinalized,\n id: data.batchFinalized.id,\n commitmentTxid: data.batchFinalized.commitmentTxid,\n };\n }\n\n // Check for BatchFailed event\n if (data.batchFailed) {\n return {\n type: SettlementEventType.BatchFailed,\n id: data.batchFailed.id,\n reason: data.batchFailed.reason,\n };\n }\n\n // Check for TreeSigningStarted event\n if (data.treeSigningStarted) {\n return {\n type: SettlementEventType.TreeSigningStarted,\n id: data.treeSigningStarted.id,\n cosignersPublicKeys: data.treeSigningStarted.cosignersPubkeys,\n unsignedCommitmentTx: data.treeSigningStarted.unsignedCommitmentTx,\n };\n }\n\n // Check for TreeNoncesAggregated event\n if (data.treeNoncesAggregated) {\n // skip treeNoncesAggregated event, deprecated\n return null;\n }\n\n if (data.treeNonces) {\n return {\n type: SettlementEventType.TreeNonces,\n id: data.treeNonces.id,\n topic: data.treeNonces.topic,\n txid: data.treeNonces.txid,\n nonces: decodeMusig2Nonces(data.treeNonces.nonces), // pubkey -> public nonce\n };\n }\n\n // Check for TreeTx event\n if (data.treeTx) {\n const children = Object.fromEntries(\n Object.entries(data.treeTx.children).map(([outputIndex, txid]) => {\n return [parseInt(outputIndex), txid];\n }),\n );\n\n return {\n type: SettlementEventType.TreeTx,\n id: data.treeTx.id,\n topic: data.treeTx.topic,\n batchIndex: data.treeTx.batchIndex,\n chunk: {\n txid: data.treeTx.txid,\n tx: data.treeTx.tx,\n children,\n },\n };\n }\n\n if (data.treeSignature) {\n return {\n type: SettlementEventType.TreeSignature,\n id: data.treeSignature.id,\n topic: data.treeSignature.topic,\n batchIndex: data.treeSignature.batchIndex,\n txid: data.treeSignature.txid,\n signature: data.treeSignature.signature,\n };\n }\n\n if (data.streamStarted) {\n return {\n type: SettlementEventType.StreamStarted,\n id: data.streamStarted.id,\n };\n }\n\n // Skip heartbeat events\n if (data.heartbeat) {\n return null;\n }\n\n console.warn(\"Unknown event type:\", data);\n return null;\n }\n\n protected parseTransactionNotification(\n data: ProtoTypes.GetTransactionsStreamResponse,\n ): { commitmentTx?: TxNotification; arkTx?: TxNotification } | null {\n if (data.commitmentTx) {\n return {\n commitmentTx: {\n txid: data.commitmentTx.txid,\n tx: data.commitmentTx.tx,\n spentVtxos: data.commitmentTx.spentVtxos.map(mapVtxo),\n spendableVtxos: data.commitmentTx.spendableVtxos.map(mapVtxo),\n checkpointTxs: data.commitmentTx.checkpointTxs,\n },\n };\n }\n\n if (data.arkTx) {\n return {\n arkTx: {\n txid: data.arkTx.txid,\n tx: data.arkTx.tx,\n spentVtxos: data.arkTx.spentVtxos.map(mapVtxo),\n spendableVtxos: data.arkTx.spendableVtxos.map(mapVtxo),\n checkpointTxs: data.arkTx.checkpointTxs,\n },\n };\n }\n\n // Skip heartbeat events\n if (data.heartbeat) {\n return null;\n }\n\n console.warn(\"Unknown transaction notification type:\", data);\n return null;\n }\n}\n\nfunction encodeMusig2Nonces(nonces: TreeNonces): Record<string, string> {\n const noncesObject: Record<string, string> = {};\n for (const [txid, nonce] of nonces) {\n noncesObject[txid] = hex.encode(nonce.pubNonce);\n }\n return noncesObject;\n}\n\nfunction encodeMusig2Signatures(signatures: TreePartialSigs): Record<string, string> {\n const sigObject: Record<string, string> = {};\n for (const [txid, sig] of signatures) {\n sigObject[txid] = hex.encode(sig.encode());\n }\n return sigObject;\n}\n\nfunction decodeMusig2Nonces(noncesObject: Record<string, string>): TreeNonces {\n return new Map(\n Object.entries(noncesObject).map(([txid, nonce]) => {\n if (typeof nonce !== \"string\") {\n throw new Error(\"invalid nonce\");\n }\n return [txid, { pubNonce: hex.decode(nonce) }];\n }),\n );\n}\n\n// ProtoTypes namespace defines unexported types representing the raw data received from the server\nnamespace ProtoTypes {\n interface BatchStartedEvent {\n id: string;\n intentIdHashes: string[];\n batchExpiry: number;\n }\n\n interface BatchFailed {\n id: string;\n reason: string;\n }\n\n export interface BatchFinalizationEvent {\n id: string;\n commitmentTx: string;\n }\n\n interface BatchFinalizedEvent {\n id: string;\n commitmentTxid: string;\n }\n\n interface TreeSigningStartedEvent {\n id: string;\n cosignersPubkeys: string[];\n unsignedCommitmentTx: string;\n }\n\n interface TreeNoncesAggregatedEvent {\n id: string;\n treeNonces: Record<string, string>;\n }\n\n interface TreeNoncesEvent {\n id: string;\n topic: string[];\n txid: string;\n nonces: Record<string, string>;\n }\n\n interface TreeTxEvent {\n id: string;\n topic: string[];\n batchIndex: number;\n txid: string;\n tx: string;\n children: Record<string, string>;\n }\n\n interface TreeSignatureEvent {\n id: string;\n topic: string[];\n batchIndex: number;\n txid: string;\n signature: string;\n }\n\n interface StreamStartedEvent {\n id: string;\n }\n\n interface Heartbeat {\n // Empty interface for heartbeat events\n }\n\n export interface VtxoData {\n outpoint: {\n txid: string;\n vout: number;\n };\n amount: string;\n script: string;\n createdAt: string;\n expiresAt: string | null;\n commitmentTxids: string[];\n isPreconfirmed: boolean;\n isSwept: boolean;\n isUnrolled: boolean;\n isSpent: boolean;\n spentBy: string;\n settledBy?: string;\n arkTxid?: string;\n }\n\n export interface GetEventStreamResponse {\n batchStarted?: BatchStartedEvent;\n batchFailed?: BatchFailed;\n batchFinalization?: BatchFinalizationEvent;\n batchFinalized?: BatchFinalizedEvent;\n treeSigningStarted?: TreeSigningStartedEvent;\n treeNoncesAggregated?: TreeNoncesAggregatedEvent;\n treeNonces?: TreeNoncesEvent;\n treeTx?: TreeTxEvent;\n treeSignature?: TreeSignatureEvent;\n streamStarted?: StreamStartedEvent;\n heartbeat?: Heartbeat;\n }\n\n export interface GetTransactionsStreamResponse {\n commitmentTx?: {\n txid: string;\n tx: string;\n spentVtxos: VtxoData[];\n spendableVtxos: VtxoData[];\n checkpointTxs?: Record<string, { txid: string; tx: string }>;\n };\n arkTx?: {\n txid: string;\n tx: string;\n spentVtxos: VtxoData[];\n spendableVtxos: VtxoData[];\n checkpointTxs?: Record<string, { txid: string; tx: string }>;\n };\n heartbeat?: Heartbeat;\n }\n\n // Legacy types for backward compatibility\n export interface EventData {\n batchStarted?: BatchStartedEvent;\n batchFailed?: BatchFailed;\n batchFinalization?: BatchFinalizationEvent;\n batchFinalized?: BatchFinalizedEvent;\n treeSigningStarted?: TreeSigningStartedEvent;\n treeNoncesAggregated?: TreeNoncesAggregatedEvent;\n treeTx?: TreeTxEvent;\n treeSignature?: TreeSignatureEvent;\n }\n\n export interface TransactionData {\n commitmentTx?: {\n txid: string;\n tx: string;\n spentVtxos: VtxoData[];\n spendableVtxos: VtxoData[];\n checkpointTxs?: Record<string, { txid: string; tx: string }>;\n };\n arkTx?: {\n txid: string;\n tx: string;\n spentVtxos: VtxoData[];\n spendableVtxos: VtxoData[];\n checkpointTxs?: Record<string, { txid: string; tx: string }>;\n };\n }\n}\n\nexport function isFetchTimeoutError(err: any): boolean {\n const checkError = (error: any) => {\n if (!(error instanceof Error)) return false;\n\n // TODO: get something more robust than this\n const isCloudflare524 = error.name === \"TypeError\" && error.message === \"Failed to fetch\";\n\n return (\n isCloudflare524 ||\n error.name === \"HeadersTimeoutError\" ||\n error.name === \"BodyTimeoutError\" ||\n (error as any).code === \"UND_ERR_HEADERS_TIMEOUT\" ||\n (error as any).code === \"UND_ERR_BODY_TIMEOUT\"\n );\n };\n\n return checkError(err) || checkError((err as any).cause);\n}\n\nfunction mapVtxo(vtxo: ProtoTypes.VtxoData): Vtxo {\n return {\n outpoint: {\n txid: vtxo.outpoint.txid,\n vout: vtxo.outpoint.vout,\n },\n amount: vtxo.amount,\n script: vtxo.script,\n createdAt: vtxo.createdAt,\n expiresAt: vtxo.expiresAt,\n commitmentTxids: vtxo.commitmentTxids,\n isPreconfirmed: vtxo.isPreconfirmed,\n isSwept: vtxo.isSwept,\n isUnrolled: vtxo.isUnrolled,\n isSpent: vtxo.isSpent,\n spentBy: vtxo.spentBy,\n settledBy: vtxo.settledBy,\n arkTxid: vtxo.arkTxid,\n };\n}\n\nfunction handleError(errorText: string, defaultMessage: string): never {\n const error = new Error(errorText);\n const arkError = maybeArkError(error);\n throw arkError ?? new Error(defaultMessage);\n}\n","export { AssetInputType, AssetRefType } from \"./types\";\n\nexport { AssetId } from \"./assetId\";\nexport { AssetRef } from \"./assetRef\";\nexport { AssetInput, AssetInputs } from \"./assetInput\";\nexport { AssetOutput, AssetOutputs } from \"./assetOutput\";\nexport { Metadata, MetadataList } from \"./metadata\";\nexport { AssetGroup } from \"./assetGroup\";\nexport { Packet } from \"./packet\";\n","export const TX_HASH_SIZE = 32;\nexport const ASSET_ID_SIZE = 34;\nexport const ASSET_VERSION = 0x01;\n\nexport enum AssetInputType {\n Unspecified = 0,\n Local = 1,\n Intent = 2,\n}\n\nexport enum AssetRefType {\n Unspecified = 0,\n ByID = 1,\n ByGroup = 2,\n}\n\n// Presence byte masks for AssetGroup\nexport const MASK_ASSET_ID = 0x01;\nexport const MASK_CONTROL_ASSET = 0x02;\nexport const MASK_METADATA = 0x04;\n","export class BufferWriter {\n private buffer: number[] = [];\n\n write(data: Uint8Array): void {\n for (const byte of data) {\n this.buffer.push(byte);\n }\n }\n\n writeByte(byte: number): void {\n this.buffer.push(byte & 0xff);\n }\n\n writeUint16LE(value: number): void {\n const buf = new Uint8Array(2);\n new DataView(buf.buffer).setUint16(0, value, true); // true = little endian\n this.write(buf);\n }\n\n writeVarUint(value: bigint | number): void {\n if (typeof value === \"number\") {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(\"writeVarUint: value must be a non-negative integer\");\n }\n } else if (value < 0n) {\n throw new RangeError(\"writeVarUint: value must be a non-negative integer\");\n }\n const val = typeof value === \"number\" ? BigInt(value) : value;\n const bytes: number[] = [];\n let remaining = val;\n\n do {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n if (remaining > 0n) {\n byte |= 0x80;\n }\n bytes.push(byte);\n } while (remaining > 0n);\n\n this.write(new Uint8Array(bytes));\n }\n\n writeVarSlice(data: Uint8Array): void {\n this.writeVarUint(data.length);\n this.write(data);\n }\n\n toBytes(): Uint8Array {\n return new Uint8Array(this.buffer);\n }\n}\n\nexport class BufferReader {\n private view: DataView;\n private offset: number = 0;\n\n constructor(data: Uint8Array) {\n this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n remaining(): number {\n return this.view.byteLength - this.offset;\n }\n\n readByte(): number {\n if (this.offset >= this.view.byteLength) {\n throw new Error(\"unexpected end of buffer\");\n }\n return this.view.getUint8(this.offset++);\n }\n\n readSlice(size: number): Uint8Array {\n if (this.offset + size > this.view.byteLength) {\n throw new Error(\"unexpected end of buffer\");\n }\n const result = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset, size);\n this.offset += size;\n return result;\n }\n\n readUint16LE(): number {\n if (this.offset + 2 > this.view.byteLength) {\n throw new Error(\"unexpected end of buffer\");\n }\n const value = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return value;\n }\n\n readVarUint(): bigint {\n let result = 0n;\n let shift = 0n;\n let byte: number;\n\n do {\n if (this.offset >= this.view.byteLength) {\n throw new Error(\"unexpected end of buffer\");\n }\n byte = this.view.getUint8(this.offset++);\n result |= BigInt(byte & 0x7f) << shift;\n shift += 7n;\n } while (byte & 0x80);\n\n return result;\n }\n\n readVarSlice(): Uint8Array {\n const length = Number(this.readVarUint());\n return this.readSlice(length);\n }\n}\n\nexport function isZeroBytes(bytes: Uint8Array): boolean {\n return bytes.every((byte) => byte === 0);\n}\n","import { hex } from \"@scure/base\";\nimport { TX_HASH_SIZE, ASSET_ID_SIZE } from \"./types\";\nimport { BufferReader, BufferWriter, isZeroBytes } from \"./utils\";\n\n/**\n * AssetId identifies a specific asset.\n *\n * @remarks\n * Asset ids are derived from the genesis transaction id plus the asset group index.\n *\n * @see AssetRef\n *\n * @example\n * ```typescript\n * const assetId = AssetId.create('00'.repeat(32), 0)\n * const encoded = assetId.toString()\n * const decoded = AssetId.fromString(encoded)\n * ```\n */\nexport class AssetId {\n private constructor(\n readonly txid: Uint8Array,\n readonly groupIndex: number,\n ) {}\n\n /**\n * Create an asset id from a genesis transaction id and group index.\n *\n * @param txid - Hex-encoded genesis transaction id\n * @param groupIndex - Asset group index within the genesis transaction\n * @returns A validated asset id\n * @throws Error if the txid is missing, malformed, or not 32 bytes long\n * @see fromString\n */\n static create(txid: string, groupIndex: number): AssetId {\n if (!txid) {\n throw new Error(\"missing txid\");\n }\n\n let buf: Uint8Array;\n try {\n buf = hex.decode(txid);\n } catch {\n throw new Error(\"invalid txid format, must be hex\");\n }\n\n if (buf.length !== TX_HASH_SIZE) {\n throw new Error(\n `invalid txid length: got ${buf.length} bytes, want ${TX_HASH_SIZE} bytes`,\n );\n }\n\n const assetId = new AssetId(buf, groupIndex);\n assetId.validate();\n return assetId;\n }\n\n /**\n * Decode an asset id from its hex string representation.\n *\n * @param s - Hex-encoded asset id\n * @returns Decoded asset id\n * @throws Error if the string is not valid hex or does not encode a valid asset id\n * @see toString\n */\n static fromString(s: string): AssetId {\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid asset id format, must be hex\");\n }\n return AssetId.fromBytes(buf);\n }\n\n /**\n * Decode an asset id from its serialized bytes.\n *\n * @param buf - Serialized asset id bytes\n * @returns Decoded asset id\n * @throws Error if the buffer length is invalid\n */\n static fromBytes(buf: Uint8Array): AssetId {\n if (!buf || buf.length === 0) {\n throw new Error(\"missing asset id\");\n }\n if (buf.length !== ASSET_ID_SIZE) {\n throw new Error(\n `invalid asset id length: got ${buf.length} bytes, want ${ASSET_ID_SIZE} bytes`,\n );\n }\n const reader = new BufferReader(buf);\n return AssetId.fromReader(reader);\n }\n\n /**\n * Serialize the asset id to raw bytes.\n *\n * @returns Serialized asset id bytes\n * @see fromBytes\n */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /**\n * Encode the asset id to a hex string.\n *\n * @returns Hex-encoded asset id\n * @see fromString\n */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /**\n * Validate the asset id fields.\n *\n * @throws Error if the txid is empty or the group index is out of range\n */\n validate(): void {\n if (isZeroBytes(this.txid)) {\n throw new Error(\"empty txid\");\n }\n if (!Number.isInteger(this.groupIndex) || this.groupIndex < 0 || this.groupIndex > 0xffff) {\n throw new Error(`invalid group index: ${this.groupIndex}, must be in range [0, 65535]`);\n }\n }\n\n /**\n * Decode an asset id from a binary reader.\n *\n * @param reader - Reader positioned at an asset id\n * @returns Decoded asset id\n * @throws Error if the reader does not contain enough bytes\n */\n static fromReader(reader: BufferReader): AssetId {\n if (reader.remaining() < ASSET_ID_SIZE) {\n throw new Error(\n `invalid asset id length: got ${reader.remaining()}, want ${ASSET_ID_SIZE}`,\n );\n }\n\n const txid = reader.readSlice(TX_HASH_SIZE);\n const index = reader.readUint16LE();\n\n const assetId = new AssetId(txid, index);\n assetId.validate();\n return assetId;\n }\n\n /**\n * Serialize the asset id into an existing binary writer.\n *\n * @param writer - Writer to append the asset id to\n * @see serialize\n */\n serializeTo(writer: BufferWriter): void {\n writer.write(this.txid);\n writer.writeUint16LE(this.groupIndex);\n }\n}\n","import { hex } from \"@scure/base\";\nimport { AssetRefType } from \"./types\";\nimport { AssetId } from \"./assetId\";\nimport { BufferReader, BufferWriter } from \"./utils\";\n\ntype AssetRefByID = {\n type: AssetRefType.ByID;\n assetId: AssetId;\n};\ntype AssetRefByGroup = {\n type: AssetRefType.ByGroup;\n groupIndex: number;\n};\n\n/**\n * Reference to either an explicit asset id or another asset group in the same packet.\n *\n * @see AssetId\n *\n * @example\n * ```typescript\n * const refById = AssetRef.fromId(assetId)\n * const refByGroup = AssetRef.fromGroupIndex(0)\n * ```\n */\nexport class AssetRef {\n private constructor(readonly ref: AssetRefByID | AssetRefByGroup) {}\n\n /** Reference type discriminator. */\n get type(): AssetRefType {\n return this.ref.type;\n }\n\n /**\n * Create an asset reference that points to a specific asset id.\n *\n * @param assetId - Asset id referenced by this pointer\n * @returns Asset reference by id\n * @see fromGroupIndex\n */\n static fromId(assetId: AssetId): AssetRef {\n return new AssetRef({ type: AssetRefType.ByID, assetId });\n }\n\n /**\n * Create an asset reference that points to another asset group by index.\n *\n * @param groupIndex - Zero-based asset group index in the packet\n * @returns Asset reference by group index\n * @see fromId\n */\n static fromGroupIndex(groupIndex: number): AssetRef {\n return new AssetRef({ type: AssetRefType.ByGroup, groupIndex });\n }\n\n /**\n * Decode an asset reference from its hex string form.\n *\n * @param s - Hex-encoded asset reference\n * @returns Decoded asset reference\n * @throws Error if the string is not valid hex or does not encode a valid asset reference\n * @see toString\n */\n static fromString(s: string): AssetRef {\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid asset ref format, must be hex\");\n }\n return AssetRef.fromBytes(buf);\n }\n\n /**\n * Decode an asset reference from its serialized bytes.\n *\n * @param buf - Serialized asset reference bytes\n * @returns Decoded asset reference\n * @throws Error if the buffer is empty or malformed\n */\n static fromBytes(buf: Uint8Array): AssetRef {\n if (!buf || buf.length === 0) {\n throw new Error(\"missing asset ref\");\n }\n const reader = new BufferReader(buf);\n return AssetRef.fromReader(reader);\n }\n\n /**\n * Serialize the asset reference to raw bytes.\n *\n * @returns Serialized asset reference bytes\n * @see fromBytes\n */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /**\n * Encode the asset reference to a hex string.\n *\n * @returns Hex-encoded asset reference\n * @see fromString\n */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /**\n * Decode an asset reference from a binary reader.\n *\n * @param reader - Reader positioned at an asset reference\n * @returns Decoded asset reference\n * @throws Error if the type is unknown or the reader does not contain enough bytes\n */\n static fromReader(reader: BufferReader): AssetRef {\n const type = reader.readByte() as AssetRefType;\n\n let ref: AssetRef;\n switch (type) {\n case AssetRefType.ByID: {\n const assetId = AssetId.fromReader(reader);\n ref = new AssetRef({ type: AssetRefType.ByID, assetId });\n break;\n }\n case AssetRefType.ByGroup: {\n if (reader.remaining() < 2) {\n throw new Error(\"invalid asset ref length\");\n }\n const groupIndex = reader.readUint16LE();\n ref = new AssetRef({ type: AssetRefType.ByGroup, groupIndex });\n break;\n }\n case AssetRefType.Unspecified:\n throw new Error(\"asset ref type unspecified\");\n default:\n throw new Error(`asset ref type unknown ${type}`);\n }\n\n return ref;\n }\n\n /**\n * Serialize the asset reference into an existing binary writer.\n *\n * @param writer - Writer to append the asset reference to\n * @see serialize\n */\n serializeTo(writer: BufferWriter): void {\n writer.writeByte(this.ref.type);\n\n switch (this.ref.type) {\n case AssetRefType.ByID:\n this.ref.assetId.serializeTo(writer);\n break;\n case AssetRefType.ByGroup:\n writer.writeUint16LE(this.ref.groupIndex);\n break;\n }\n }\n}\n","import { hex } from \"@scure/base\";\nimport { AssetInputType, TX_HASH_SIZE } from \"./types\";\nimport { BufferReader, BufferWriter, isZeroBytes } from \"./utils\";\n\ntype AssetInputLocal = {\n type: AssetInputType.Local;\n vin: number;\n amount: bigint;\n};\n\ntype AssetInputIntent = Pick<AssetInputLocal, \"vin\" | \"amount\"> & {\n type: AssetInputType.Intent;\n txid: Uint8Array;\n};\n\n/**\n * AssetInput represents an input of an asset group.\n * a local input references a real transaction input and specify the amount in satoshis.\n * an intent input references an external intent transaction. It is created by the server to handle batch leaf transaction.\n */\nexport class AssetInput {\n private constructor(readonly input: AssetInputLocal | AssetInputIntent) {}\n\n /** Gets the transaction input index for an asset input, e.g. 0 */\n get vin(): number {\n return this.input.vin;\n }\n\n /** Gets the amount for an input (in most cases, 330 sats) */\n get amount(): bigint {\n return this.input.amount;\n }\n\n /** Create a local asset input that points at a transaction input index. */\n static create(vin: number, amount: bigint | number): AssetInput {\n const input = new AssetInput({\n type: AssetInputType.Local,\n vin,\n amount: typeof amount === \"number\" ? BigInt(amount) : amount,\n });\n input.validate();\n return input;\n }\n\n /** Create an intent-backed asset input referencing an external intent transaction. */\n static createIntent(txid: string, vin: number, amount: bigint | number): AssetInput {\n if (!txid || txid.length === 0) {\n throw new Error(\"missing input intent txid\");\n }\n\n let buf: Uint8Array;\n try {\n buf = hex.decode(txid);\n } catch {\n throw new Error(\"invalid input intent txid format, must be hex\");\n }\n\n if (buf.length !== TX_HASH_SIZE) {\n throw new Error(\"invalid input intent txid length\");\n }\n\n const input = new AssetInput({\n type: AssetInputType.Intent,\n txid: buf,\n vin,\n amount: typeof amount === \"number\" ? BigInt(amount) : amount,\n });\n input.validate();\n return input;\n }\n\n /** Decode an asset input from its hex string form. */\n static fromString(s: string): AssetInput {\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid format, must be hex\");\n }\n return AssetInput.fromBytes(buf);\n }\n\n /** Decode an asset input from its serialized bytes. */\n static fromBytes(buf: Uint8Array): AssetInput {\n const reader = new BufferReader(buf);\n return AssetInput.fromReader(reader);\n }\n\n /** Serialize the asset input to raw bytes. */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /** Encode the asset input to a hex string. */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /** Validate the asset input fields. */\n validate(): void {\n switch (this.input.type) {\n case AssetInputType.Local:\n break;\n case AssetInputType.Intent:\n if (isZeroBytes(this.input.txid)) {\n throw new Error(\"missing input intent txid\");\n }\n break;\n }\n }\n\n /** Decode an asset input from a buffer reader. */\n static fromReader(reader: BufferReader): AssetInput {\n const type = reader.readByte() as AssetInputType;\n\n let input: AssetInput;\n switch (type) {\n case AssetInputType.Local: {\n const vin = reader.readUint16LE();\n const amount = reader.readVarUint();\n input = new AssetInput({\n type: AssetInputType.Local,\n vin,\n amount,\n });\n break;\n }\n case AssetInputType.Intent: {\n if (reader.remaining() < TX_HASH_SIZE) {\n throw new Error(\"invalid input intent txid length\");\n }\n const txid = reader.readSlice(TX_HASH_SIZE);\n const vin = reader.readUint16LE();\n const amount = reader.readVarUint();\n input = new AssetInput({\n type: AssetInputType.Intent,\n txid: new Uint8Array(txid),\n vin,\n amount,\n });\n break;\n }\n case AssetInputType.Unspecified:\n throw new Error(\"asset input type unspecified\");\n default:\n throw new Error(`asset input type ${type} unknown`);\n }\n\n input.validate();\n return input;\n }\n\n /** Serialize the asset input into an existing buffer writer. */\n serializeTo(writer: BufferWriter): void {\n writer.writeByte(this.input.type);\n if (this.input.type === AssetInputType.Intent) {\n writer.write(this.input.txid);\n }\n writer.writeUint16LE(this.input.vin);\n writer.writeVarUint(this.input.amount);\n }\n}\n\n/**\n * AssetInputs represents a list of asset inputs.\n */\nexport class AssetInputs {\n private constructor(readonly inputs: AssetInput[]) {}\n\n /** Create a validated list of asset inputs. */\n static create(inputs: AssetInput[]): AssetInputs {\n const list = new AssetInputs(inputs);\n list.validate();\n return list;\n }\n\n /** Decode an asset input list from its hex string form. */\n static fromString(s: string): AssetInputs {\n if (!s || s.length === 0) {\n throw new Error(\"missing asset inputs\");\n }\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid asset inputs format, must be hex\");\n }\n const reader = new BufferReader(buf);\n return AssetInputs.fromReader(reader);\n }\n\n /** Serialize the asset input list to raw bytes. */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /** Encode the asset input list to a hex string. */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /** Validate the asset input list. */\n validate(): void {\n const seen = new Set<number>();\n let listType = AssetInputType.Unspecified;\n\n for (const assetInput of this.inputs) {\n assetInput.validate();\n\n if (listType === AssetInputType.Unspecified) {\n listType = assetInput.input.type;\n } else if (listType !== assetInput.input.type) {\n throw new Error(\"all inputs must be of the same type\");\n }\n\n // verify the same input vin is not duplicated\n if (assetInput.input.type === AssetInputType.Local) {\n if (seen.has(assetInput.input.vin)) {\n throw new Error(`duplicated input vin ${assetInput.input.vin}`);\n }\n seen.add(assetInput.input.vin);\n continue;\n }\n }\n }\n\n /** Decode an asset input list from a buffer reader. */\n static fromReader(reader: BufferReader): AssetInputs {\n const count = Number(reader.readVarUint());\n const inputs: AssetInput[] = [];\n for (let i = 0; i < count; i++) {\n inputs.push(AssetInput.fromReader(reader));\n }\n return AssetInputs.create(inputs);\n }\n\n /** Serialize the asset input list into an existing buffer writer. */\n serializeTo(writer: BufferWriter): void {\n writer.writeVarUint(this.inputs.length);\n for (const input of this.inputs) {\n input.serializeTo(writer);\n }\n }\n}\n","import { hex } from \"@scure/base\";\nimport { BufferReader, BufferWriter } from \"./utils\";\n\n/**\n * AssetOutput references a real transaction output and specify the amount in satoshis.\n * it must be present in an AssetGroup.\n *\n * @param vout - the output index in the transaction\n * @param amount - asset amount in satoshis\n */\nexport class AssetOutput {\n // 0x01 means local output, there is only 1 local output type currently\n // however we serialize it for future upgrades\n static readonly TYPE_LOCAL = 0x01;\n\n private constructor(\n readonly vout: number,\n readonly amount: bigint,\n ) {}\n\n /** Create a local asset output referencing a transaction output index. */\n static create(vout: number, amount: bigint | number): AssetOutput {\n const output = new AssetOutput(vout, typeof amount === \"number\" ? BigInt(amount) : amount);\n output.validate();\n return output;\n }\n\n /** Decode an asset output from its hex string form. */\n static fromString(s: string): AssetOutput {\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid asset output format, must be hex\");\n }\n return AssetOutput.fromBytes(buf);\n }\n\n /** Decode an asset output from its serialized bytes. */\n static fromBytes(buf: Uint8Array): AssetOutput {\n if (!buf || buf.length === 0) {\n throw new Error(\"missing asset output\");\n }\n const reader = new BufferReader(buf);\n const output = AssetOutput.fromReader(reader);\n output.validate();\n return output;\n }\n\n /** Serialize the asset output to raw bytes. */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /** Encode the asset output to a hex string. */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /** Validate the asset output fields. */\n validate(): void {\n if (!Number.isInteger(this.vout) || this.vout < 0 || this.vout > 0xffff) {\n throw new Error(\"asset output vout must be an integer in range [0, 65535]\");\n }\n if (this.amount <= 0n) {\n throw new Error(\"asset output amount must be greater than 0\");\n }\n }\n\n /** Decode an asset output from a buffer reader. */\n static fromReader(reader: BufferReader): AssetOutput {\n if (reader.remaining() < 2) {\n throw new Error(\"invalid asset output vout length\");\n }\n const type = reader.readByte();\n if (type !== AssetOutput.TYPE_LOCAL) {\n if (type === 0x00) {\n throw new Error(\"output type unspecified\");\n }\n throw new Error(\"unknown asset output type\");\n }\n\n let vout: number;\n try {\n vout = reader.readUint16LE();\n } catch {\n throw new Error(\"invalid asset output vout length\");\n }\n\n const amount = reader.readVarUint();\n return new AssetOutput(vout, amount);\n }\n\n /** Serialize the asset output into an existing buffer writer. */\n serializeTo(writer: BufferWriter): void {\n writer.writeByte(0x01);\n writer.writeUint16LE(this.vout);\n writer.writeVarUint(this.amount);\n }\n}\n\n/**\n * AssetOutputs is a list of AssetOutput references.\n * it must be present in an AssetGroup.\n *\n * @param outputs - the list of asset outputs\n */\nexport class AssetOutputs {\n private constructor(readonly outputs: AssetOutput[]) {}\n\n /** Create a validated list of asset outputs. */\n static create(outputs: AssetOutput[]): AssetOutputs {\n const list = new AssetOutputs(outputs);\n list.validate();\n return list;\n }\n\n /** Decode an asset output list from its hex string form. */\n static fromString(s: string): AssetOutputs {\n if (!s || s.length === 0) {\n throw new Error(\"missing asset outputs\");\n }\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid asset outputs format, must be hex\");\n }\n const reader = new BufferReader(buf);\n return AssetOutputs.fromReader(reader);\n }\n\n /** Serialize the asset output list to raw bytes. */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /** Encode the asset output list to a hex string. */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /** Validate the asset output list. */\n validate(): void {\n const seen = new Set<number>();\n for (const output of this.outputs) {\n output.validate();\n if (seen.has(output.vout)) {\n throw new Error(`duplicated output vout ${output.vout}`);\n }\n seen.add(output.vout);\n }\n }\n\n /** Decode an asset output list from a buffer reader. */\n static fromReader(reader: BufferReader): AssetOutputs {\n const count = Number(reader.readVarUint());\n if (count === 0) {\n return new AssetOutputs([]);\n }\n\n const outputs: AssetOutput[] = [];\n for (let i = 0; i < count; i++) {\n outputs.push(AssetOutput.fromReader(reader));\n }\n const result = new AssetOutputs(outputs);\n result.validate();\n return result;\n }\n\n /** Serialize the asset output list into an existing buffer writer. */\n serializeTo(writer: BufferWriter): void {\n this.validate();\n writer.writeVarUint(this.outputs.length);\n for (const output of this.outputs) {\n output.serializeTo(writer);\n }\n }\n}\n","import { schnorr } from \"@noble/curves/secp256k1.js\";\nimport { hex } from \"@scure/base\";\nimport { Bytes, compareBytes } from \"@scure/btc-signer/utils.js\";\nimport { BufferReader, BufferWriter } from \"./utils\";\n\n/**\n * Metadata represents a key-value pair.\n * @param key - the key\n * @param value - the value\n */\nexport class Metadata {\n private constructor(\n readonly key: Uint8Array,\n readonly value: Uint8Array,\n ) {}\n\n /** Create a metadata entry from raw key and value bytes. */\n static create(key: Bytes, value: Bytes): Metadata {\n const md = new Metadata(key, value);\n md.validate();\n return md;\n }\n\n /** Decode metadata from its hex string form. */\n static fromString(s: string): Metadata {\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid metadata format, must be hex\");\n }\n return Metadata.fromBytes(buf);\n }\n\n /** Decode metadata from its serialized bytes. */\n static fromBytes(buf: Uint8Array): Metadata {\n if (!buf || buf.length === 0) {\n throw new Error(\"missing metadata\");\n }\n const reader = new BufferReader(buf);\n return Metadata.fromReader(reader);\n }\n\n /** Serialize metadata to raw bytes. */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /** Encode metadata to a hex string. */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n get keyString(): string {\n return new TextDecoder().decode(this.key);\n }\n\n get valueString(): string {\n return new TextDecoder().decode(this.value);\n }\n\n /** Validate the metadata key and value. */\n validate(): void {\n if (this.key.length === 0) {\n throw new Error(\"missing metadata key\");\n }\n if (this.value.length === 0) {\n throw new Error(\"missing metadata value\");\n }\n }\n\n /** Decode metadata from a buffer reader. */\n static fromReader(reader: BufferReader): Metadata {\n let key: Uint8Array;\n let value: Uint8Array;\n\n try {\n key = reader.readVarSlice();\n } catch {\n throw new Error(\"invalid metadata length\");\n }\n\n try {\n value = reader.readVarSlice();\n } catch {\n throw new Error(\"invalid metadata length\");\n }\n\n const md = new Metadata(key, value);\n md.validate();\n return md;\n }\n\n /** Serialize metadata into an existing buffer writer. */\n serializeTo(writer: BufferWriter): void {\n writer.writeVarSlice(this.key);\n writer.writeVarSlice(this.value);\n }\n}\n\nexport class MetadataList {\n static readonly ARK_LEAF_TAG = \"ArkadeAssetLeaf\";\n static readonly ARK_BRANCH_TAG = \"ArkadeAssetBranch\";\n static readonly ARK_LEAF_VERSION = 0x00;\n\n constructor(readonly items: Metadata[]) {}\n\n /** Create a metadata list from its hex string form. */\n static fromString(s: string): MetadataList {\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid metadata list format\");\n }\n return MetadataList.fromBytes(buf);\n }\n\n /** Decode a metadata list from its serialized bytes. */\n static fromBytes(buf: Uint8Array): MetadataList {\n if (!buf || buf.length === 0) {\n throw new Error(\"missing metadata list\");\n }\n const reader = new BufferReader(buf);\n return MetadataList.fromReader(reader);\n }\n\n /** Decode a metadata list from a buffer reader. */\n static fromReader(reader: BufferReader): MetadataList {\n const count = Number(reader.readVarUint());\n const items = Array.from({ length: count }, () => Metadata.fromReader(reader));\n return new MetadataList(items);\n }\n\n /** Serialize the metadata list into an existing buffer writer. */\n serializeTo(writer: BufferWriter): void {\n writer.writeVarUint(this.items.length);\n for (const item of this) {\n item.serializeTo(writer);\n }\n }\n\n /** Serialize the metadata list to raw bytes. */\n serialize(): Uint8Array {\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /** Iterate through metadata entries in insertion order. */\n [Symbol.iterator](): Iterator<Metadata> {\n return this.items[Symbol.iterator]();\n }\n\n get length(): number {\n return this.items.length;\n }\n\n /** Compute the tagged Merkle root for the metadata list. */\n hash(): Uint8Array {\n if (this.items.length === 0) throw new Error(\"missing metadata list\");\n const levels = buildMetadataMerkleTree(this.items);\n return levels[levels.length - 1][0]; // the last level is the root\n }\n}\n\nfunction computeMetadataLeafHash(md: Metadata): Uint8Array {\n const writer = new BufferWriter();\n writer.writeByte(MetadataList.ARK_LEAF_VERSION);\n writer.writeVarSlice(md.key);\n writer.writeVarSlice(md.value);\n return schnorr.utils.taggedHash(MetadataList.ARK_LEAF_TAG, writer.toBytes());\n}\n\nfunction computeMetadataBranchHash(a: Uint8Array, b: Uint8Array): Uint8Array {\n const [smaller, larger] = compareBytes(a, b) === -1 ? [a, b] : [b, a];\n return schnorr.utils.taggedHash(MetadataList.ARK_BRANCH_TAG, smaller, larger);\n}\n\nfunction buildMetadataMerkleTree(leaves: Metadata[]): Uint8Array[][] {\n if (leaves.length === 0) return [];\n const leafHashes = leaves.map(computeMetadataLeafHash);\n const levels: Uint8Array[][] = [leafHashes];\n\n let current = leafHashes;\n while (current.length > 1) {\n const next: Uint8Array[] = [];\n for (let i = 0; i < current.length; i += 2) {\n if (i + 1 < current.length) {\n next.push(computeMetadataBranchHash(current[i], current[i + 1]));\n } else {\n next.push(current[i]);\n }\n }\n levels.push(next);\n current = next;\n }\n\n return levels;\n}\n","import { hex } from \"@scure/base\";\nimport { AssetInputType, MASK_ASSET_ID, MASK_CONTROL_ASSET, MASK_METADATA } from \"./types\";\nimport { AssetId } from \"./assetId\";\nimport { AssetRef } from \"./assetRef\";\nimport { AssetInput, AssetInputs } from \"./assetInput\";\nimport { AssetOutput, AssetOutputs } from \"./assetOutput\";\nimport { Metadata, MetadataList } from \"./metadata\";\nimport { BufferReader, BufferWriter } from \"./utils\";\n\n/**\n * An asset group contains inputs, outputs, and all data related to a given asset id.\n *\n * @see Packet\n * @see AssetId\n * @see AssetRef\n *\n * @example\n * ```typescript\n * const group = AssetGroup.create(\n * null, // asset ID: null for new issuance\n * null, // control asset ID: null when reissuance not needed\n * [], // asset inputs: empty for new issuance\n * [AssetOutput.create(0, 1000)], // asset outputs: 1000 units at vout index 0\n * [] // metadata: can be empty\n * )\n * ```\n */\nexport class AssetGroup {\n private readonly metadataList: MetadataList;\n\n /** @see create */\n constructor(\n readonly assetId: AssetId | null,\n readonly controlAsset: AssetRef | null,\n readonly inputs: AssetInput[],\n readonly outputs: AssetOutput[],\n metadata: Metadata[],\n ) {\n this.metadataList = new MetadataList(metadata);\n }\n\n /**\n * Create and validate an asset group.\n *\n * @param assetId - Asset id for this group, or `null` for fresh issuance\n * @param controlAsset - Optional control asset reference for (re) issuance\n * @param inputs - Asset inputs in the group\n * @param outputs - Asset outputs in the group\n * @param metadata - Metadata entries associated with the group\n * @returns A validated asset group\n * @throws Error if the group fails validation\n * @see validate\n */\n static create(\n assetId: AssetId | null,\n controlAsset: AssetRef | null,\n inputs: AssetInput[],\n outputs: AssetOutput[],\n metadata: Metadata[],\n ): AssetGroup {\n const ag = new AssetGroup(assetId, controlAsset, inputs, outputs, metadata);\n ag.validate();\n return ag;\n }\n\n /**\n * Decode an asset group from its hex string form.\n *\n * @param s - Hex-encoded asset group\n * @returns Decoded asset group\n * @throws Error if the string is not valid hex or does not encode a valid asset group\n * @see toString\n */\n static fromString(s: string): AssetGroup {\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid format, must be hex\");\n }\n return AssetGroup.fromBytes(buf);\n }\n\n /**\n * Decode an asset group from its serialized bytes.\n *\n * @param buf - Serialized asset group bytes\n * @returns Decoded asset group\n * @throws Error if the buffer is empty or malformed\n */\n static fromBytes(buf: Uint8Array): AssetGroup {\n if (!buf || buf.length === 0) {\n throw new Error(\"missing asset group\");\n }\n const reader = new BufferReader(buf);\n return AssetGroup.fromReader(reader);\n }\n\n /**\n * Return true when the group represents an issuance.\n *\n * @returns `true` when the group has no asset id\n */\n isIssuance(): boolean {\n return this.assetId === null;\n }\n\n /**\n * Return true when the group represents a reissuance.\n *\n * @returns `true` when the group has an asset id and outputs exceed local inputs\n * @remarks\n * Only local inputs contribute to the comparison; intent-backed inputs contribute `0` here.\n */\n isReissuance(): boolean {\n const sumReducer = (s: bigint, { amount }: { amount: bigint }) => s + amount;\n const sumOutputs = this.outputs.reduce(sumReducer, 0n);\n const sumInputs = this.inputs\n .map((i) => ({\n amount: i.input.type === AssetInputType.Local ? i.input.amount : 0n,\n }))\n .reduce(sumReducer, 0n);\n return !this.isIssuance() && sumInputs < sumOutputs;\n }\n\n /**\n * Serialize the asset group to raw bytes.\n *\n * @returns Serialized asset group bytes\n * @see fromBytes\n */\n serialize(): Uint8Array {\n this.validate();\n const writer = new BufferWriter();\n this.serializeTo(writer);\n return writer.toBytes();\n }\n\n /**\n * Validate the asset group and its child structures.\n *\n * @throws Error if the group is empty or violates issuance invariants\n */\n validate(): void {\n if (this.inputs.length === 0 && this.outputs.length === 0) {\n throw new Error(\"empty asset group\");\n }\n if (this.isIssuance()) {\n if (this.inputs.length !== 0) {\n throw new Error(\"issuance must have no inputs\");\n }\n } else {\n if (this.controlAsset !== null) {\n throw new Error(\"only issuance can have a control asset\");\n }\n }\n }\n\n /**\n * Convert the group into its batch-leaf representation for the given intent txid.\n *\n * @param intentTxid - Intent transaction id used to build the leaf input reference\n * @returns Batch-leaf asset group\n * @see AssetInput.createIntent\n */\n toBatchLeafAssetGroup(intentTxid: Uint8Array): AssetGroup {\n const leafInput = AssetInput.createIntent(hex.encode(intentTxid), 0, 0);\n return new AssetGroup(\n this.assetId,\n this.controlAsset,\n [leafInput],\n this.outputs,\n this.metadataList.items,\n );\n }\n\n /**\n * Encode the asset group to a hex string.\n *\n * @returns Hex-encoded asset group\n * @see fromString\n */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /**\n * Decode an asset group from a binary reader.\n *\n * @param reader - Reader positioned at an asset group\n * @returns Decoded asset group\n * @throws Error if the encoded group is malformed\n */\n static fromReader(reader: BufferReader): AssetGroup {\n const presence = reader.readByte();\n\n let assetId: AssetId | null = null;\n let controlAsset: AssetRef | null = null;\n let metadata: Metadata[] = [];\n\n if (presence & MASK_ASSET_ID) {\n assetId = AssetId.fromReader(reader);\n }\n\n if (presence & MASK_CONTROL_ASSET) {\n controlAsset = AssetRef.fromReader(reader);\n }\n\n if (presence & MASK_METADATA) {\n metadata = MetadataList.fromReader(reader).items;\n }\n\n const inputs = AssetInputs.fromReader(reader);\n const outputs = AssetOutputs.fromReader(reader);\n\n const ag = new AssetGroup(assetId, controlAsset, inputs.inputs, outputs.outputs, metadata);\n ag.validate();\n return ag;\n }\n\n /**\n * Serialize the asset group into an existing binary writer.\n *\n * @param writer - Writer to append the asset group to\n */\n serializeTo(writer: BufferWriter): void {\n let presence = 0;\n if (this.assetId !== null) {\n presence |= MASK_ASSET_ID;\n }\n if (this.controlAsset !== null) {\n presence |= MASK_CONTROL_ASSET;\n }\n if (this.metadataList.length > 0) {\n presence |= MASK_METADATA;\n }\n writer.writeByte(presence);\n\n if (presence & MASK_ASSET_ID) {\n this.assetId!.serializeTo(writer);\n }\n\n if (presence & MASK_CONTROL_ASSET) {\n this.controlAsset!.serializeTo(writer);\n }\n\n if (presence & MASK_METADATA) {\n this.metadataList.serializeTo(writer);\n }\n\n writer.writeVarUint(this.inputs.length);\n for (const input of this.inputs) {\n input.serializeTo(writer);\n }\n\n writer.writeVarUint(this.outputs.length);\n for (const output of this.outputs) {\n output.serializeTo(writer);\n }\n }\n}\n","import { hex } from \"@scure/base\";\nimport type { ExtensionPacket } from \"../packet\";\nimport { AssetRefType } from \"./types\";\nimport { AssetGroup } from \"./assetGroup\";\nimport { BufferReader, BufferWriter } from \"./utils\";\n\n/**\n * Packet represents a collection of asset groups.\n * It encodes/decodes as raw bytes only — OP_RETURN framing is handled by the Extension module.\n */\nexport class Packet implements ExtensionPacket {\n /** PACKET_TYPE is the 1-byte TLV type tag used in the Extension envelope. */\n static readonly PACKET_TYPE = 0;\n\n private constructor(readonly groups: AssetGroup[]) {}\n\n /** Create a validated asset packet from a list of asset groups. */\n static create(groups: AssetGroup[]): Packet {\n const p = new Packet(groups);\n p.validate();\n return p;\n }\n\n /**\n * fromBytes parses a Packet from raw bytes.\n */\n static fromBytes(buf: Uint8Array): Packet {\n return Packet.fromReader(new BufferReader(buf));\n }\n\n /**\n * fromString parses a Packet from a raw hex string (not an OP_RETURN script).\n */\n static fromString(s: string): Packet {\n if (!s) {\n throw new Error(\"missing packet data\");\n }\n let buf: Uint8Array;\n try {\n buf = hex.decode(s);\n } catch {\n throw new Error(\"invalid packet format, must be hex\");\n }\n return Packet.fromBytes(buf);\n }\n\n /**\n * type returns the TLV packet type tag. Implements ExtensionPacket interface.\n */\n type(): number {\n return Packet.PACKET_TYPE;\n }\n\n /** Convert the packet into the batch-leaf form for a specific intent transaction id. */\n leafTxPacket(intentTxid: Uint8Array): Packet {\n const leafGroups = this.groups.map((group) => group.toBatchLeafAssetGroup(intentTxid));\n return new Packet(leafGroups);\n }\n\n /**\n * serialize encodes the packet as raw bytes (varint group count + group data).\n * Does NOT include OP_RETURN, Arkade magic bytes (`ARK`), or TLV type/length; those are\n * added by the Extension module.\n */\n serialize(): Uint8Array {\n if (this.groups.length === 0) {\n return new Uint8Array(0);\n }\n const writer = new BufferWriter();\n writer.writeVarUint(this.groups.length);\n for (const group of this.groups) {\n group.serializeTo(writer);\n }\n return writer.toBytes();\n }\n\n /**\n * toString returns the hex-encoded raw packet bytes.\n */\n toString(): string {\n return hex.encode(this.serialize());\n }\n\n /** Validate packet structure and cross-group references. */\n validate(): void {\n if (this.groups.length === 0) {\n throw new Error(\"missing assets\");\n }\n\n const seenAssetIds = new Set<string>();\n for (const group of this.groups) {\n if (group.assetId !== null) {\n const key = group.assetId.toString();\n if (seenAssetIds.has(key)) {\n throw new Error(`duplicate asset group for asset ${key}`);\n }\n seenAssetIds.add(key);\n }\n\n if (\n group.controlAsset !== null &&\n group.controlAsset.ref.type === AssetRefType.ByGroup &&\n group.controlAsset.ref.groupIndex >= this.groups.length\n ) {\n throw new Error(\n `invalid control asset group index, ${group.controlAsset.ref.groupIndex} out of range [0, ${this.groups.length - 1}]`,\n );\n }\n }\n }\n\n private static fromReader(reader: BufferReader): Packet {\n const count = Number(reader.readVarUint());\n const groups: AssetGroup[] = [];\n\n for (let i = 0; i < count; i++) {\n groups.push(AssetGroup.fromReader(reader));\n }\n\n if (reader.remaining() > 0) {\n throw new Error(\n `invalid packet length, left ${reader.remaining()} unknown bytes to read`,\n );\n }\n\n const packet = new Packet(groups);\n packet.validate();\n return packet;\n }\n}\n","import { hex } from \"@scure/base\";\nimport { AssetDetails, AssetMetadata, Outpoint, VirtualCoin } from \"../wallet\";\nimport { isFetchTimeoutError } from \"./ark\";\nimport { eventSourceIterator, isEventSourceError } from \"./utils\";\nimport { MetadataList } from \"../extension/asset\";\n\nexport type PaginationOptions = {\n pageIndex?: number;\n pageSize?: number;\n};\n\nexport enum IndexerTxType {\n INDEXER_TX_TYPE_UNSPECIFIED = 0,\n INDEXER_TX_TYPE_RECEIVED = 1,\n INDEXER_TX_TYPE_SENT = 2,\n}\n\nexport enum ChainTxType {\n UNSPECIFIED = \"INDEXER_CHAINED_TX_TYPE_UNSPECIFIED\",\n COMMITMENT = \"INDEXER_CHAINED_TX_TYPE_COMMITMENT\",\n ARK = \"INDEXER_CHAINED_TX_TYPE_ARK\",\n TREE = \"INDEXER_CHAINED_TX_TYPE_TREE\",\n CHECKPOINT = \"INDEXER_CHAINED_TX_TYPE_CHECKPOINT\",\n}\n\nexport interface PageResponse {\n /** Current page index **/\n current: number;\n\n /** Next page index **/\n next: number;\n\n /** Total pages given the page-size used in the query **/\n total: number;\n}\n\nexport interface BatchInfo {\n totalOutputAmount: string;\n totalOutputVtxos: number;\n expiresAt: string;\n swept: boolean;\n}\n\nexport interface ChainTx {\n txid: string;\n expiresAt: string;\n type: ChainTxType;\n\n /** IDs of the transactions in the chain used as input of the current transaction. */\n spends: string[];\n}\n\nexport interface CommitmentTx {\n startedAt: string;\n endedAt: string;\n batches: { [key: string]: BatchInfo };\n totalInputAmount: string;\n totalInputVtxos: number;\n totalOutputAmount: string;\n totalOutputVtxos: number;\n}\n\nexport interface Tx {\n txid: string;\n children: Record<number, string>;\n}\n\nexport interface TxHistoryRecord {\n commitmentTxid?: string;\n virtualTxid?: string;\n type: IndexerTxType;\n amount: string;\n createdAt: string;\n isSettled: boolean;\n settledBy: string;\n}\n\nexport interface VtxoAsset {\n assetId: string;\n amount: string;\n}\n\nexport interface Vtxo {\n outpoint: Outpoint;\n createdAt: string;\n expiresAt: string | null;\n amount: string;\n script: string;\n isPreconfirmed: boolean;\n isSwept: boolean;\n isUnrolled: boolean;\n isSpent: boolean;\n spentBy: string | null;\n commitmentTxids: string[];\n settledBy?: string;\n arkTxid?: string;\n assets?: VtxoAsset[];\n}\n\nexport interface VtxoChain {\n chain: ChainTx[];\n page?: PageResponse;\n}\n\nexport interface SubscriptionResponse {\n txid?: string;\n scripts: string[];\n newVtxos: VirtualCoin[];\n spentVtxos: VirtualCoin[];\n sweptVtxos: VirtualCoin[];\n tx?: string;\n checkpointTxs?: Record<string, { txid: string; tx: string }>;\n}\n\nexport interface SubscriptionHeartbeat {\n type: \"heartbeat\";\n}\n\nexport interface SubscriptionEvent extends SubscriptionResponse {\n type: \"event\";\n}\n\n/**\n * Filters accepted by `IndexerProvider.getVtxos`.\n *\n * @remarks\n * Exactly one of `scripts` or `outpoints` must be supplied.\n *\n * @see IndexerProvider.getVtxos\n */\nexport type GetVtxosOptions = PaginationOptions & {\n /** Only return spendable virtual outputs. */\n spendableOnly?: boolean;\n /** Only return spent virtual outputs. */\n spentOnly?: boolean;\n /** Only return recoverable virtual outputs. */\n recoverableOnly?: boolean;\n /** Only return pending/preconfirmed virtual outputs. */\n pendingOnly?: boolean;\n /** Only return virtual outputs created after this timestamp. */\n after?: number;\n /** Only return virtual outputs created before this timestamp. */\n before?: number;\n} & (\n | {\n /** Scripts to search for matching virtual outputs. */\n scripts: string[];\n outpoints?: never;\n }\n | {\n /** Explicit outpoints to fetch. */\n outpoints: Outpoint[];\n scripts?: never;\n }\n );\n\nexport interface IndexerProvider {\n /**\n * Fetch the virtual output tree for a batch outpoint.\n *\n * @param batchOutpoint - Batch outpoint whose tree should be fetched\n * @param opts - Optional pagination settings\n * @returns virtual output tree nodes and optional pagination state\n */\n getVtxoTree(\n batchOutpoint: Outpoint,\n opts?: PaginationOptions,\n ): Promise<{ vtxoTree: Tx[]; page?: PageResponse }>;\n\n /**\n * Fetch the leaf outpoints for a batch virtual output tree.\n *\n * @param batchOutpoint - Batch outpoint whose leaf outpoints should be fetched\n * @param opts - Optional pagination settings\n * @returns Leaf outpoints and optional pagination state\n */\n getVtxoTreeLeaves(\n batchOutpoint: Outpoint,\n opts?: PaginationOptions,\n ): Promise<{ leaves: Outpoint[]; page?: PageResponse }>;\n\n /**\n * Fetch sweep transactions that spent a batch.\n *\n * @param batchOutpoint - Batch outpoint to inspect\n * @returns Sweep transaction ids\n */\n getBatchSweepTransactions(batchOutpoint: Outpoint): Promise<{ sweptBy: string[] }>;\n\n /**\n * Fetch a commitment transaction by txid.\n *\n * @param txid - Commitment transaction id\n * @returns Commitment transaction details\n */\n getCommitmentTx(txid: string): Promise<CommitmentTx>;\n\n /**\n * Fetch connector transactions for a commitment transaction.\n *\n * @param txid - Commitment transaction id\n * @param opts - Optional pagination settings\n * @returns Connector transactions and optional pagination state\n */\n getCommitmentTxConnectors(\n txid: string,\n opts?: PaginationOptions,\n ): Promise<{ connectors: Tx[]; page?: PageResponse }>;\n\n /**\n * Fetch forfeit transaction ids for a commitment transaction.\n *\n * @param txid - Commitment transaction id\n * @param opts - Optional pagination settings\n * @returns Forfeit transaction ids and optional pagination state\n */\n getCommitmentTxForfeitTxs(\n txid: string,\n opts?: PaginationOptions,\n ): Promise<{ txids: string[]; page?: PageResponse }>;\n\n /**\n * Open a streamed subscription for a previously created subscription id.\n *\n * @param subscriptionId - Subscription identifier returned by `subscribeForScripts`\n * @param abortSignal - Signal used to terminate the stream\n * @returns Async iterator of subscription responses\n */\n getSubscription(\n subscriptionId: string,\n abortSignal: AbortSignal,\n ): AsyncIterableIterator<SubscriptionResponse>;\n\n /**\n * Fetch raw virtual transactions by txid.\n *\n * @param txids - Virtual transaction ids to fetch\n * @param opts - Optional pagination settings\n * @returns Raw virtual transactions and optional pagination state\n */\n getVirtualTxs(\n txids: string[],\n opts?: PaginationOptions,\n ): Promise<{ txs: string[]; page?: PageResponse }>;\n\n /**\n * Fetch the ancestry chain for a virtual output.\n *\n * @param vtxoOutpoint - Virtual output outpoint to inspect\n * @param opts - Optional pagination settings\n * @returns Chain data and optional pagination state\n */\n getVtxoChain(vtxoOutpoint: Outpoint, opts?: PaginationOptions): Promise<VtxoChain>;\n\n /**\n * Fetch virtual outputs by script set or outpoints.\n *\n * @param opts - Virtual output filters and pagination settings\n * @returns Virtual outputs and optional pagination state\n */\n getVtxos(opts?: GetVtxosOptions): Promise<{ vtxos: VirtualCoin[]; page?: PageResponse }>;\n\n /**\n * Fetch metadata for a specific asset id.\n *\n * @param assetId - Asset identifier\n * @returns Asset details\n */\n getAssetDetails(assetId: string): Promise<AssetDetails>;\n\n /**\n * Create or extend a subscription for a set of scripts.\n *\n * @param scripts - Scripts to monitor\n * @param subscriptionId - Existing subscription id to extend\n * @returns Subscription id\n */\n subscribeForScripts(scripts: string[], subscriptionId?: string): Promise<string>;\n\n /**\n * Remove some or all scripts from an existing subscription.\n *\n * @param subscriptionId - Subscription identifier to update\n * @param scripts - Scripts to remove, or omit to remove all\n */\n unsubscribeForScripts(subscriptionId: string, scripts?: string[]): Promise<void>;\n}\n\n/**\n * REST-based indexer provider implementation.\n * @see https://buf.build/arkade-os/arkd/docs/main:ark.v1#ark.v1.IndexerService\n * @example\n * ```typescript\n * const provider = new RestIndexerProvider('https://arkade.computer');\n * const commitmentTx = await provider.getCommitmentTx(\"6686af8f3be3517880821f62e6c3d749b9d6713736a1d8e229a55daa659446b2\");\n * ```\n */\nexport class RestIndexerProvider implements IndexerProvider {\n constructor(public serverUrl: string) {}\n\n async getVtxoTree(\n batchOutpoint: Outpoint,\n opts?: PaginationOptions,\n ): Promise<{ vtxoTree: Tx[]; page?: PageResponse }> {\n let url = `${this.serverUrl}/v1/indexer/batch/${batchOutpoint.txid}/${batchOutpoint.vout}/tree`;\n const params = new URLSearchParams();\n if (opts) {\n if (opts.pageIndex !== undefined)\n params.append(\"page.index\", opts.pageIndex.toString());\n if (opts.pageSize !== undefined) params.append(\"page.size\", opts.pageSize.toString());\n }\n if (params.toString()) {\n url += \"?\" + params.toString();\n }\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch vtxo tree: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isVtxoTreeResponse(data)) {\n throw new Error(\"Invalid vtxo tree data received\");\n }\n\n data.vtxoTree.forEach((tx) => {\n tx.children = Object.fromEntries(\n Object.entries(tx.children).map(([key, value]) => [Number(key), value]),\n );\n });\n return data;\n }\n\n async getVtxoTreeLeaves(\n batchOutpoint: Outpoint,\n opts?: PaginationOptions,\n ): Promise<{ leaves: Outpoint[]; page?: PageResponse }> {\n let url = `${this.serverUrl}/v1/indexer/batch/${batchOutpoint.txid}/${batchOutpoint.vout}/tree/leaves`;\n const params = new URLSearchParams();\n if (opts) {\n if (opts.pageIndex !== undefined)\n params.append(\"page.index\", opts.pageIndex.toString());\n if (opts.pageSize !== undefined) params.append(\"page.size\", opts.pageSize.toString());\n }\n if (params.toString()) {\n url += \"?\" + params.toString();\n }\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch vtxo tree leaves: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isVtxoTreeLeavesResponse(data)) {\n throw new Error(\"Invalid vtxos tree leaves data received\");\n }\n return data;\n }\n\n async getBatchSweepTransactions(batchOutpoint: Outpoint): Promise<{ sweptBy: string[] }> {\n const url = `${this.serverUrl}/v1/indexer/batch/${batchOutpoint.txid}/${batchOutpoint.vout}/sweepTxs`;\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch batch sweep transactions: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isBatchSweepTransactionsResponse(data)) {\n throw new Error(\"Invalid batch sweep transactions data received\");\n }\n return data;\n }\n\n async getCommitmentTx(txid: string): Promise<CommitmentTx> {\n const url = `${this.serverUrl}/v1/indexer/commitmentTx/${txid}`;\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch commitment tx: ${res.statusText}`);\n }\n const data = await res.json();\n\n if (!Response.isCommitmentTx(data)) {\n throw new Error(\"Invalid commitment tx data received\");\n }\n return data;\n }\n\n async getCommitmentTxConnectors(\n txid: string,\n opts?: PaginationOptions,\n ): Promise<{ connectors: Tx[]; page?: PageResponse }> {\n let url = `${this.serverUrl}/v1/indexer/commitmentTx/${txid}/connectors`;\n const params = new URLSearchParams();\n if (opts) {\n if (opts.pageIndex !== undefined)\n params.append(\"page.index\", opts.pageIndex.toString());\n if (opts.pageSize !== undefined) params.append(\"page.size\", opts.pageSize.toString());\n }\n if (params.toString()) {\n url += \"?\" + params.toString();\n }\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch commitment tx connectors: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isConnectorsResponse(data)) {\n throw new Error(\"Invalid commitment tx connectors data received\");\n }\n\n data.connectors.forEach((tx) => {\n tx.children = Object.fromEntries(\n Object.entries(tx.children).map(([key, value]) => [Number(key), value]),\n );\n });\n return data;\n }\n\n async getCommitmentTxForfeitTxs(\n txid: string,\n opts?: PaginationOptions,\n ): Promise<{ txids: string[]; page?: PageResponse }> {\n let url = `${this.serverUrl}/v1/indexer/commitmentTx/${txid}/forfeitTxs`;\n const params = new URLSearchParams();\n if (opts) {\n if (opts.pageIndex !== undefined)\n params.append(\"page.index\", opts.pageIndex.toString());\n if (opts.pageSize !== undefined) params.append(\"page.size\", opts.pageSize.toString());\n }\n if (params.toString()) {\n url += \"?\" + params.toString();\n }\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch commitment tx forfeitTxs: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isForfeitTxsResponse(data)) {\n throw new Error(\"Invalid commitment tx forfeitTxs data received\");\n }\n return data;\n }\n\n getSubscription(\n subscriptionId: string,\n abortSignal: AbortSignal,\n ): AsyncIterableIterator<SubscriptionResponse> {\n const url = `${this.serverUrl}/v1/indexer/script/subscription/${subscriptionId}`;\n let iterator: ReturnType<typeof eventSourceIterator> | null = null;\n const closeIterator = () => iterator?.close();\n\n const gen = (async function* () {\n const abortHandler = closeIterator;\n abortSignal?.addEventListener(\"abort\", abortHandler);\n\n try {\n while (!abortSignal?.aborted) {\n try {\n const currentIterator = eventSourceIterator(new EventSource(url));\n iterator = currentIterator;\n\n for await (const event of currentIterator) {\n if (abortSignal?.aborted) break;\n\n try {\n const data = JSON.parse(event.data);\n if (data.event) {\n yield {\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 } catch (err) {\n console.error(\"Failed to parse subscription event:\", err);\n throw err;\n }\n }\n } catch (error) {\n if (\n abortSignal?.aborted ||\n (error instanceof Error && error.name === \"AbortError\")\n ) {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n if (isEventSourceError(error)) {\n throw error;\n }\n\n console.error(\"Subscription error:\", error);\n throw error;\n } finally {\n closeIterator();\n iterator = null;\n }\n }\n } finally {\n abortSignal?.removeEventListener(\"abort\", abortHandler);\n closeIterator();\n }\n })();\n\n const origReturn = gen.return.bind(gen);\n gen.return = (value) => {\n closeIterator();\n return origReturn(value);\n };\n\n return gen;\n }\n\n async getVirtualTxs(\n txids: string[],\n opts?: PaginationOptions,\n ): Promise<{ txs: string[]; page?: PageResponse }> {\n let url = `${this.serverUrl}/v1/indexer/virtualTx/${txids.join(\",\")}`;\n const params = new URLSearchParams();\n if (opts) {\n if (opts.pageIndex !== undefined)\n params.append(\"page.index\", opts.pageIndex.toString());\n if (opts.pageSize !== undefined) params.append(\"page.size\", opts.pageSize.toString());\n }\n if (params.toString()) {\n url += \"?\" + params.toString();\n }\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch virtual txs: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isVirtualTxsResponse(data)) {\n throw new Error(\"Invalid virtual txs data received\");\n }\n return data;\n }\n\n async getVtxoChain(vtxoOutpoint: Outpoint, opts?: PaginationOptions): Promise<VtxoChain> {\n let url = `${this.serverUrl}/v1/indexer/vtxo/${vtxoOutpoint.txid}/${vtxoOutpoint.vout}/chain`;\n const params = new URLSearchParams();\n if (opts) {\n if (opts.pageIndex !== undefined)\n params.append(\"page.index\", opts.pageIndex.toString());\n if (opts.pageSize !== undefined) params.append(\"page.size\", opts.pageSize.toString());\n }\n if (params.toString()) {\n url += \"?\" + params.toString();\n }\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch vtxo chain: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isVtxoChainResponse(data)) {\n throw new Error(\"Invalid vtxo chain data received\");\n }\n return data;\n }\n\n async getVtxos(opts?: GetVtxosOptions): Promise<{ vtxos: VirtualCoin[]; page?: PageResponse }> {\n const hasScripts = (opts?.scripts?.length ?? 0) > 0;\n const hasOutpoints = (opts?.outpoints?.length ?? 0) > 0;\n\n // scripts and outpoints are mutually exclusive\n if (hasScripts && hasOutpoints) {\n throw new Error(\"scripts and outpoints are mutually exclusive options\");\n }\n\n if (!hasScripts && !hasOutpoints) {\n throw new Error(\"Either scripts or outpoints must be provided\");\n }\n\n const filterCount = [opts?.spendableOnly, opts?.spentOnly, opts?.recoverableOnly].filter(\n Boolean,\n ).length;\n if (filterCount > 1) {\n throw new Error(\n \"spendableOnly, spentOnly, and recoverableOnly are mutually exclusive options\",\n );\n }\n\n if (\n opts?.after !== undefined &&\n opts?.before !== undefined &&\n opts.after !== 0 &&\n opts.before !== 0 &&\n opts.before <= opts.after\n ) {\n throw new Error(\"before must be greater than after\");\n }\n\n let url = `${this.serverUrl}/v1/indexer/vtxos`;\n const params = new URLSearchParams();\n\n // Handle scripts with multi collection format\n if (hasScripts) {\n opts!.scripts!.forEach((script) => {\n params.append(\"scripts\", script);\n });\n }\n\n // Handle outpoints with multi collection format\n if (hasOutpoints) {\n opts!.outpoints!.forEach((outpoint) => {\n params.append(\"outpoints\", `${outpoint.txid}:${outpoint.vout}`);\n });\n }\n\n if (opts) {\n if (opts.spendableOnly !== undefined)\n params.append(\"spendableOnly\", opts.spendableOnly.toString());\n if (opts.spentOnly !== undefined) params.append(\"spentOnly\", opts.spentOnly.toString());\n if (opts.recoverableOnly !== undefined)\n params.append(\"recoverableOnly\", opts.recoverableOnly.toString());\n if (opts.pendingOnly !== undefined)\n params.append(\"pendingOnly\", opts.pendingOnly.toString());\n if (opts.after !== undefined) params.append(\"after\", opts.after.toString());\n if (opts.before !== undefined) params.append(\"before\", opts.before.toString());\n if (opts.pageIndex !== undefined)\n params.append(\"page.index\", opts.pageIndex.toString());\n if (opts.pageSize !== undefined) params.append(\"page.size\", opts.pageSize.toString());\n }\n if (params.toString()) {\n url += \"?\" + params.toString();\n }\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch vtxos: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isVtxosResponse(data)) {\n throw new Error(\"Invalid vtxos data received\");\n }\n return {\n vtxos: data.vtxos.map(convertVtxo),\n page: data.page,\n };\n }\n\n async getAssetDetails(assetId: string): Promise<AssetDetails> {\n const url = `${this.serverUrl}/v1/indexer/asset/${encodeURIComponent(assetId)}`;\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch asset details: ${res.statusText}`);\n }\n const data = await res.json();\n if (!Response.isGetAssetResponse(data)) {\n throw new Error(\"Invalid get asset response\");\n }\n const metadata = data.metadata?.length ? parseAssetMetadata(data.metadata) : undefined;\n return {\n assetId: data.assetId ?? assetId,\n supply: BigInt(data.supply ?? 0),\n metadata,\n controlAssetId: data.controlAsset || undefined,\n };\n }\n\n async subscribeForScripts(scripts: string[], subscriptionId?: string): Promise<string> {\n const url = `${this.serverUrl}/v1/indexer/script/subscribe`;\n const res = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify({ scripts, subscriptionId }),\n });\n if (!res.ok) {\n const errorText = await res.text();\n throw new Error(`Failed to subscribe to scripts: ${errorText}`);\n }\n const data = await res.json();\n if (!data.subscriptionId) throw new Error(`Subscription ID not found`);\n return data.subscriptionId;\n }\n\n async unsubscribeForScripts(subscriptionId: string, scripts?: string[]): Promise<void> {\n const url = `${this.serverUrl}/v1/indexer/script/unsubscribe`;\n const res = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify({ subscriptionId, scripts }),\n });\n if (!res.ok) {\n const errorText = await res.text();\n console.warn(`Failed to unsubscribe to scripts: ${errorText}`);\n }\n }\n}\n\ninterface GetAssetResponse {\n assetId: string;\n supply: string;\n controlAsset?: string;\n metadata?: string;\n}\n\nfunction parseAssetMetadata(metadata: string): AssetMetadata {\n const metadataList = MetadataList.fromString(metadata);\n const out: Record<string, unknown> = {};\n const decoder = new TextDecoder();\n for (const { key, value } of metadataList.items) {\n const keyString = decoder.decode(key);\n switch (keyString) {\n case \"decimals\":\n const n = Number(decoder.decode(value));\n out[keyString] = Number.isFinite(n) ? n : hex.encode(value);\n break;\n case \"name\":\n case \"ticker\":\n case \"icon\":\n out[keyString] = decoder.decode(value);\n break;\n default:\n out[keyString] = hex.encode(value);\n break;\n }\n }\n return out;\n}\n\nfunction convertVtxo(vtxo: Vtxo): VirtualCoin {\n return {\n txid: vtxo.outpoint.txid,\n vout: vtxo.outpoint.vout,\n value: Number(vtxo.amount),\n status: {\n confirmed: !vtxo.isSwept && !vtxo.isPreconfirmed,\n isLeaf: !vtxo.isPreconfirmed,\n },\n virtualStatus: {\n state: vtxo.isSwept ? \"swept\" : vtxo.isPreconfirmed ? \"preconfirmed\" : \"settled\",\n commitmentTxIds: vtxo.commitmentTxids,\n batchExpiry: vtxo.expiresAt ? Number(vtxo.expiresAt) * 1000 : undefined,\n },\n spentBy: vtxo.spentBy ?? \"\",\n settledBy: vtxo.settledBy,\n arkTxId: vtxo.arkTxid,\n createdAt: new Date(Number(vtxo.createdAt) * 1000),\n isUnrolled: vtxo.isUnrolled,\n isSpent: vtxo.isSpent,\n script: vtxo.script,\n assets: vtxo.assets?.map((a) => ({\n assetId: a.assetId,\n amount: BigInt(a.amount),\n })),\n };\n}\n\n// Unexported namespace for type guards only\nnamespace Response {\n function isBatchInfo(data: any): data is BatchInfo {\n return (\n typeof data === \"object\" &&\n typeof data.totalOutputAmount === \"string\" &&\n typeof data.totalOutputVtxos === \"number\" &&\n typeof data.expiresAt === \"string\" &&\n typeof data.swept === \"boolean\"\n );\n }\n\n function isChain(data: any): data is ChainTx {\n return (\n typeof data === \"object\" &&\n typeof data.txid === \"string\" &&\n typeof data.expiresAt === \"string\" &&\n Object.values(ChainTxType).includes(data.type) &&\n Array.isArray(data.spends) &&\n data.spends.every((spend: any) => typeof spend === \"string\")\n );\n }\n\n export function isCommitmentTx(data: any): data is CommitmentTx {\n return (\n typeof data === \"object\" &&\n typeof data.startedAt === \"string\" &&\n typeof data.endedAt === \"string\" &&\n typeof data.totalInputAmount === \"string\" &&\n typeof data.totalInputVtxos === \"number\" &&\n typeof data.totalOutputAmount === \"string\" &&\n typeof data.totalOutputVtxos === \"number\" &&\n typeof data.batches === \"object\" &&\n Object.values(data.batches).every(isBatchInfo)\n );\n }\n\n export function isOutpoint(data: any): data is Outpoint {\n return (\n typeof data === \"object\" &&\n typeof data.txid === \"string\" &&\n typeof data.vout === \"number\"\n );\n }\n\n export function isOutpointArray(data: any): data is Outpoint[] {\n return Array.isArray(data) && data.every(isOutpoint);\n }\n\n function isTx(data: any): data is Tx {\n return (\n typeof data === \"object\" &&\n typeof data.txid === \"string\" &&\n typeof data.children === \"object\" &&\n Object.values(data.children).every(isTxid) &&\n Object.keys(data.children).every((k) => Number.isInteger(Number(k)))\n );\n }\n\n export function isTxsArray(data: any): data is Tx[] {\n return Array.isArray(data) && data.every(isTx);\n }\n\n function isTxHistoryRecord(data: any): data is TxHistoryRecord {\n return (\n typeof data === \"object\" &&\n typeof data.amount === \"string\" &&\n typeof data.createdAt === \"string\" &&\n typeof data.isSettled === \"boolean\" &&\n typeof data.settledBy === \"string\" &&\n Object.values(IndexerTxType).includes(data.type) &&\n ((!data.commitmentTxid && typeof data.virtualTxid === \"string\") ||\n (typeof data.commitmentTxid === \"string\" && !data.virtualTxid))\n );\n }\n\n export function isTxHistoryRecordArray(data: any): data is TxHistoryRecord[] {\n return Array.isArray(data) && data.every(isTxHistoryRecord);\n }\n\n function isTxid(data: any): data is string {\n return typeof data === \"string\" && data.length === 64;\n }\n\n export function isTxidArray(data: any): data is string[] {\n return Array.isArray(data) && data.every(isTxid);\n }\n\n function isVtxoAsset(data: any): data is VtxoAsset {\n return (\n typeof data === \"object\" &&\n data !== null &&\n typeof data.assetId === \"string\" &&\n typeof data.amount === \"string\"\n );\n }\n\n function isVtxo(data: any): data is Vtxo {\n return (\n typeof data === \"object\" &&\n isOutpoint(data.outpoint) &&\n typeof data.createdAt === \"string\" &&\n (data.expiresAt === null || typeof data.expiresAt === \"string\") &&\n typeof data.amount === \"string\" &&\n typeof data.script === \"string\" &&\n typeof data.isPreconfirmed === \"boolean\" &&\n typeof data.isSwept === \"boolean\" &&\n typeof data.isUnrolled === \"boolean\" &&\n typeof data.isSpent === \"boolean\" &&\n (!data.spentBy || typeof data.spentBy === \"string\") &&\n (!data.settledBy || typeof data.settledBy === \"string\") &&\n (!data.arkTxid || typeof data.arkTxid === \"string\") &&\n Array.isArray(data.commitmentTxids) &&\n data.commitmentTxids.every(isTxid) &&\n (data.assets === undefined ||\n (Array.isArray(data.assets) && data.assets.every(isVtxoAsset)))\n );\n }\n\n function isPageResponse(data: any): data is PageResponse {\n return (\n typeof data === \"object\" &&\n typeof data.current === \"number\" &&\n typeof data.next === \"number\" &&\n typeof data.total === \"number\"\n );\n }\n\n export function isVtxoTreeResponse(data: any): data is { vtxoTree: Tx[]; page?: PageResponse } {\n return (\n typeof data === \"object\" &&\n Array.isArray(data.vtxoTree) &&\n data.vtxoTree.every(isTx) &&\n (!data.page || isPageResponse(data.page))\n );\n }\n\n export function isVtxoTreeLeavesResponse(\n data: any,\n ): data is { leaves: Outpoint[]; page?: PageResponse } {\n return (\n typeof data === \"object\" &&\n Array.isArray(data.leaves) &&\n data.leaves.every(isOutpoint) &&\n (!data.page || isPageResponse(data.page))\n );\n }\n\n export function isConnectorsResponse(\n data: any,\n ): data is { connectors: Tx[]; page?: PageResponse } {\n return (\n typeof data === \"object\" &&\n Array.isArray(data.connectors) &&\n data.connectors.every(isTx) &&\n (!data.page || isPageResponse(data.page))\n );\n }\n\n export function isForfeitTxsResponse(\n data: any,\n ): data is { txids: string[]; page?: PageResponse } {\n return (\n typeof data === \"object\" &&\n Array.isArray(data.txids) &&\n data.txids.every(isTxid) &&\n (!data.page || isPageResponse(data.page))\n );\n }\n\n export function isSweptCommitmentTxResponse(data: any): data is { sweptBy: string[] } {\n return (\n typeof data === \"object\" && Array.isArray(data.sweptBy) && data.sweptBy.every(isTxid)\n );\n }\n\n export function isBatchSweepTransactionsResponse(data: any): data is { sweptBy: string[] } {\n return (\n typeof data === \"object\" && Array.isArray(data.sweptBy) && data.sweptBy.every(isTxid)\n );\n }\n\n export function isVirtualTxsResponse(\n data: any,\n ): data is { txs: string[]; page?: PageResponse } {\n return (\n typeof data === \"object\" &&\n Array.isArray(data.txs) &&\n data.txs.every((tx: any) => typeof tx === \"string\") &&\n (!data.page || isPageResponse(data.page))\n );\n }\n\n export function isVtxoChainResponse(data: any): data is VtxoChain {\n return (\n typeof data === \"object\" &&\n Array.isArray(data.chain) &&\n data.chain.every(isChain) &&\n (!data.page || isPageResponse(data.page))\n );\n }\n\n export function isVtxosResponse(data: any): data is { vtxos: Vtxo[]; page?: PageResponse } {\n return (\n typeof data === \"object\" &&\n Array.isArray(data.vtxos) &&\n data.vtxos.every(isVtxo) &&\n (!data.page || isPageResponse(data.page))\n );\n }\n\n export function isGetAssetResponse(data: any): data is GetAssetResponse {\n return (\n typeof data === \"object\" &&\n data !== null &&\n typeof data.assetId === \"string\" &&\n typeof data.supply === \"string\" &&\n (data.controlAsset === undefined || typeof data.controlAsset === \"string\") &&\n (data.metadata === undefined || typeof data.metadata === \"string\")\n );\n }\n}\n"]}
|