@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
|
@@ -1,649 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ContractManager = void 0;
|
|
4
|
-
const base_1 = require("@scure/base");
|
|
5
|
-
const contractWatcher_1 = require("./contractWatcher");
|
|
6
|
-
const handlers_1 = require("./handlers");
|
|
7
|
-
const utils_1 = require("../wallet/utils");
|
|
8
|
-
const syncCursors_1 = require("../utils/syncCursors");
|
|
9
|
-
const vtxoOwnership_1 = require("./vtxoOwnership");
|
|
10
|
-
const DEFAULT_PAGE_SIZE = 500;
|
|
11
|
-
/**
|
|
12
|
-
* Central manager for contract lifecycle and operations.
|
|
13
|
-
*
|
|
14
|
-
* Responsibilities:
|
|
15
|
-
* - Create and persist contracts
|
|
16
|
-
* - Query stored contracts (optionally with their virtual outputs)
|
|
17
|
-
* - Provide spendable path selection for a contract
|
|
18
|
-
* - Emit contract-related events (virtual output received/spent, connection reset)
|
|
19
|
-
*
|
|
20
|
-
* Notes:
|
|
21
|
-
* - Implementations typically start watching automatically during initialization
|
|
22
|
-
* (so `onContractEvent()` is just for subscribing).
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* const manager = await ContractManager.create({
|
|
27
|
-
* indexerProvider: wallet.indexerProvider,
|
|
28
|
-
* contractRepository: wallet.contractRepository,
|
|
29
|
-
* });
|
|
30
|
-
*
|
|
31
|
-
* // Create a new VHTLC contract
|
|
32
|
-
* const contract = await manager.createContract({
|
|
33
|
-
* label: "Lightning Receive",
|
|
34
|
-
* type: "vhtlc",
|
|
35
|
-
* params: { sender: "ark1q...", receiver: "ark1q...", ... },
|
|
36
|
-
* script: "5120...",
|
|
37
|
-
* address: "ark1q...",
|
|
38
|
-
* });
|
|
39
|
-
*
|
|
40
|
-
* // Start watching for events
|
|
41
|
-
* const unsubscribe = manager.onContractEvent((event) => {
|
|
42
|
-
* console.log(`${event.type} on ${event.contractScript}`);
|
|
43
|
-
* });
|
|
44
|
-
*
|
|
45
|
-
* // Query contracts together with their current virtual outputs
|
|
46
|
-
* const contractsWithVtxos = await manager.getContractsWithVtxos();
|
|
47
|
-
*
|
|
48
|
-
* // Get balance across all contracts
|
|
49
|
-
* const balances = contractsWithVtxos.flatMap(({vtxos}) => vtxos).reduce((acc, vtxo) => acc + vtxo.value, 0)
|
|
50
|
-
*
|
|
51
|
-
* // Later: unsubscribe from events
|
|
52
|
-
* unsubscribe();
|
|
53
|
-
*
|
|
54
|
-
* // Clean up
|
|
55
|
-
* manager.dispose();
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
class ContractManager {
|
|
59
|
-
constructor(config) {
|
|
60
|
-
this.initialized = false;
|
|
61
|
-
this.eventCallbacks = new Set();
|
|
62
|
-
this.config = config;
|
|
63
|
-
// Create watcher with wallet repository for virtual output caching
|
|
64
|
-
this.watcher = new contractWatcher_1.ContractWatcher({
|
|
65
|
-
indexerProvider: config.indexerProvider,
|
|
66
|
-
walletRepository: config.walletRepository,
|
|
67
|
-
...config.watcherConfig,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Static factory method for creating a new ContractManager.
|
|
72
|
-
* Initialize the manager by loading persisted contracts and starting to watch.
|
|
73
|
-
*
|
|
74
|
-
* After initialization, the manager automatically watches all active contracts
|
|
75
|
-
* and contracts with virtual outputs. Use `onContractEvent()` to register event callbacks.
|
|
76
|
-
*
|
|
77
|
-
* @param config ContractManagerConfig
|
|
78
|
-
*/
|
|
79
|
-
static async create(config) {
|
|
80
|
-
const cm = new ContractManager(config);
|
|
81
|
-
await cm.initialize();
|
|
82
|
-
return cm;
|
|
83
|
-
}
|
|
84
|
-
async initialize() {
|
|
85
|
-
if (this.initialized) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
// Register persisted contracts with the watcher BEFORE the first
|
|
89
|
-
// sync. `addContract` seeds `lastKnownVtxos` from the repo without
|
|
90
|
-
// starting to poll, so it's cheap, and it populates
|
|
91
|
-
// `getWatchedContracts()` so the sync below can scope itself to the
|
|
92
|
-
// real watched set instead of every contract ever persisted.
|
|
93
|
-
const contracts = await this.config.contractRepository.getContracts();
|
|
94
|
-
for (const contract of contracts) {
|
|
95
|
-
await this.watcher.addContract(contract);
|
|
96
|
-
}
|
|
97
|
-
await this.reconcileWatched();
|
|
98
|
-
this.initialized = true;
|
|
99
|
-
// Start watching automatically
|
|
100
|
-
this.stopWatcherFn = await this.watcher.startWatching((event) => {
|
|
101
|
-
this.handleContractEvent(event).catch((error) => {
|
|
102
|
-
console.error("Error handling contract event:", error);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Delta-sync the full watched set and reconcile the pending frontier.
|
|
108
|
-
*
|
|
109
|
-
* Shared recovery path used on initial boot and after a subscription
|
|
110
|
-
* reconnect. `syncContracts({})` scopes to the current watched set
|
|
111
|
-
* (see {@link ContractWatcher.getWatchedContracts}), uses the
|
|
112
|
-
* cursor-derived delta window, and advances the cursor on success.
|
|
113
|
-
* `reconcilePendingFrontier` catches not-yet-finalized virtual
|
|
114
|
-
* outputs that could sit outside any delta window.
|
|
115
|
-
*/
|
|
116
|
-
async reconcileWatched() {
|
|
117
|
-
await this.syncContracts({});
|
|
118
|
-
const watched = this.watcher.getWatchedContracts();
|
|
119
|
-
if (watched.length > 0) {
|
|
120
|
-
await this.reconcilePendingFrontier(watched);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Create and register a new contract.
|
|
125
|
-
*
|
|
126
|
-
* @param params - Contract parameters
|
|
127
|
-
* @returns The created contract
|
|
128
|
-
*/
|
|
129
|
-
async createContract(params) {
|
|
130
|
-
// Validate that a handler exists for this contract type
|
|
131
|
-
const handler = handlers_1.contractHandlers.get(params.type);
|
|
132
|
-
if (!handler) {
|
|
133
|
-
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
134
|
-
}
|
|
135
|
-
// Validate params by attempting to create the script
|
|
136
|
-
// This catches invalid/missing params early
|
|
137
|
-
try {
|
|
138
|
-
const script = handler.createScript(params.params);
|
|
139
|
-
const derivedScript = base_1.hex.encode(script.pkScript);
|
|
140
|
-
// Verify the derived script matches the provided script
|
|
141
|
-
if (derivedScript !== params.script) {
|
|
142
|
-
throw new Error(`Script mismatch: provided script does not match script derived from params. ` +
|
|
143
|
-
`Expected ${derivedScript}, got ${params.script}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
if (error instanceof Error && error.message.includes("mismatch")) {
|
|
148
|
-
throw error;
|
|
149
|
-
}
|
|
150
|
-
throw new Error(`Invalid params for contract type '${params.type}': ${error instanceof Error ? error.message : String(error)}`);
|
|
151
|
-
}
|
|
152
|
-
// Check if contract already exists and verify it's the same type to avoid silent mismatches
|
|
153
|
-
const [existing] = await this.getContracts({ script: params.script });
|
|
154
|
-
if (existing) {
|
|
155
|
-
if (existing.type === params.type)
|
|
156
|
-
return existing;
|
|
157
|
-
throw new Error(`Contract with script ${params.script} already exists with with type ${existing.type}.`);
|
|
158
|
-
}
|
|
159
|
-
const contract = {
|
|
160
|
-
...params,
|
|
161
|
-
createdAt: Date.now(),
|
|
162
|
-
state: params.state || "active",
|
|
163
|
-
};
|
|
164
|
-
// Persist
|
|
165
|
-
await this.config.contractRepository.saveContract(contract);
|
|
166
|
-
// fetch all virtual outputs (including spent/swept) for this contract
|
|
167
|
-
await this.fetchContractVxosFromIndexer([contract]);
|
|
168
|
-
// Add to watcher
|
|
169
|
-
await this.watcher.addContract(contract);
|
|
170
|
-
return contract;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Get contracts with optional filters.
|
|
174
|
-
*
|
|
175
|
-
* @param filter - Optional filter criteria
|
|
176
|
-
* @returns Filtered contracts TODO: filter spent/unspent
|
|
177
|
-
*
|
|
178
|
-
* @example
|
|
179
|
-
* ```typescript
|
|
180
|
-
* // Get all VHTLC contracts
|
|
181
|
-
* const vhtlcs = await manager.getContracts({ type: 'vhtlc' });
|
|
182
|
-
*
|
|
183
|
-
* // Get all active contracts
|
|
184
|
-
* const active = await manager.getContracts({ state: 'active' });
|
|
185
|
-
* ```
|
|
186
|
-
*/
|
|
187
|
-
async getContracts(filter) {
|
|
188
|
-
const dbFilter = this.buildContractsDbFilter(filter ?? {});
|
|
189
|
-
return await this.config.contractRepository.getContracts(dbFilter);
|
|
190
|
-
}
|
|
191
|
-
async getContractsWithVtxos(filter, pageSize) {
|
|
192
|
-
const contracts = await this.getContracts(filter);
|
|
193
|
-
await this.syncContracts({ contracts, pageSize });
|
|
194
|
-
const vtxos = await this.getVtxosForContracts(contracts);
|
|
195
|
-
return contracts.map((contract) => ({
|
|
196
|
-
contract,
|
|
197
|
-
vtxos: vtxos.filter((vtxo) => vtxo.contractScript === contract.script),
|
|
198
|
-
}));
|
|
199
|
-
}
|
|
200
|
-
async annotateVtxos(vtxos) {
|
|
201
|
-
if (vtxos.length === 0)
|
|
202
|
-
return [];
|
|
203
|
-
const scripts = Array.from(new Set(vtxos.map((v) => v.script)));
|
|
204
|
-
const byScript = new Map();
|
|
205
|
-
const contracts = await this.config.contractRepository.getContracts({
|
|
206
|
-
script: scripts,
|
|
207
|
-
});
|
|
208
|
-
for (const contract of contracts) {
|
|
209
|
-
byScript.set(contract.script, contract);
|
|
210
|
-
}
|
|
211
|
-
return vtxos.map((vtxo) => (0, utils_1.extendVirtualCoinForContract)(vtxo, byScript));
|
|
212
|
-
}
|
|
213
|
-
buildContractsDbFilter(filter) {
|
|
214
|
-
return {
|
|
215
|
-
script: filter.script,
|
|
216
|
-
state: filter.state,
|
|
217
|
-
type: filter.type,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Update a contract.
|
|
222
|
-
* Nested fields like `params` and `metadata` are replaced with the provided values.
|
|
223
|
-
* If you need to preserve existing fields, merge them manually.
|
|
224
|
-
*
|
|
225
|
-
* @param script - Contract script
|
|
226
|
-
* @param updates - Fields to update
|
|
227
|
-
*/
|
|
228
|
-
async updateContract(script, updates) {
|
|
229
|
-
const contracts = await this.config.contractRepository.getContracts({
|
|
230
|
-
script,
|
|
231
|
-
});
|
|
232
|
-
const existing = contracts[0];
|
|
233
|
-
if (!existing) {
|
|
234
|
-
throw new Error(`Contract ${script} not found`);
|
|
235
|
-
}
|
|
236
|
-
const updated = {
|
|
237
|
-
...existing,
|
|
238
|
-
...updates,
|
|
239
|
-
};
|
|
240
|
-
await this.config.contractRepository.saveContract(updated);
|
|
241
|
-
await this.watcher.updateContract(updated);
|
|
242
|
-
return updated;
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Update a contract's params.
|
|
246
|
-
* This method preserves existing params by merging the provided values.
|
|
247
|
-
*
|
|
248
|
-
* @param script - Contract script
|
|
249
|
-
* @param updates - The new values to merge with existing params
|
|
250
|
-
*/
|
|
251
|
-
async updateContractParams(script, updates) {
|
|
252
|
-
const contracts = await this.config.contractRepository.getContracts({
|
|
253
|
-
script,
|
|
254
|
-
});
|
|
255
|
-
const existing = contracts[0];
|
|
256
|
-
if (!existing) {
|
|
257
|
-
throw new Error(`Contract ${script} not found`);
|
|
258
|
-
}
|
|
259
|
-
const updated = {
|
|
260
|
-
...existing,
|
|
261
|
-
params: { ...existing.params, ...updates },
|
|
262
|
-
};
|
|
263
|
-
await this.config.contractRepository.saveContract(updated);
|
|
264
|
-
await this.watcher.updateContract(updated);
|
|
265
|
-
return updated;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Set a contract's state.
|
|
269
|
-
*/
|
|
270
|
-
async setContractState(script, state) {
|
|
271
|
-
await this.updateContract(script, { state });
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Delete a contract.
|
|
275
|
-
*
|
|
276
|
-
* @param script - Contract script
|
|
277
|
-
*/
|
|
278
|
-
async deleteContract(script) {
|
|
279
|
-
await this.config.contractRepository.deleteContract(script);
|
|
280
|
-
await this.watcher.removeContract(script);
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Get currently spendable paths for a contract.
|
|
284
|
-
*
|
|
285
|
-
* @param options - Options for getting spendable paths
|
|
286
|
-
*/
|
|
287
|
-
async getSpendablePaths(options) {
|
|
288
|
-
const { contractScript, collaborative = true, walletPubKey, vtxo, } = options;
|
|
289
|
-
const [contract] = await this.getContracts({ script: contractScript });
|
|
290
|
-
if (!contract)
|
|
291
|
-
return [];
|
|
292
|
-
const handler = handlers_1.contractHandlers.get(contract.type);
|
|
293
|
-
if (!handler)
|
|
294
|
-
return [];
|
|
295
|
-
const script = handler.createScript(contract.params);
|
|
296
|
-
const context = {
|
|
297
|
-
collaborative,
|
|
298
|
-
currentTime: Date.now(),
|
|
299
|
-
walletPubKey,
|
|
300
|
-
vtxo,
|
|
301
|
-
};
|
|
302
|
-
return handler.getSpendablePaths(script, contract, context);
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Get every currently valid spending path for a contract.
|
|
306
|
-
*
|
|
307
|
-
* @param options - Options for getting spending paths
|
|
308
|
-
*/
|
|
309
|
-
async getAllSpendingPaths(options) {
|
|
310
|
-
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
311
|
-
const [contract] = await this.getContracts({ script: contractScript });
|
|
312
|
-
if (!contract)
|
|
313
|
-
return [];
|
|
314
|
-
const handler = handlers_1.contractHandlers.get(contract.type);
|
|
315
|
-
if (!handler)
|
|
316
|
-
return [];
|
|
317
|
-
const script = handler.createScript(contract.params);
|
|
318
|
-
const context = {
|
|
319
|
-
collaborative,
|
|
320
|
-
currentTime: Date.now(),
|
|
321
|
-
walletPubKey,
|
|
322
|
-
};
|
|
323
|
-
return handler.getAllSpendingPaths(script, contract, context);
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Register a callback for contract events.
|
|
327
|
-
*
|
|
328
|
-
* The manager automatically watches after `initialize()`. This method
|
|
329
|
-
* allows registering callbacks to receive events.
|
|
330
|
-
*
|
|
331
|
-
* @param callback - Event callback
|
|
332
|
-
* @returns Unsubscribe function to remove this callback
|
|
333
|
-
*
|
|
334
|
-
* @example
|
|
335
|
-
* ```typescript
|
|
336
|
-
* const unsubscribe = manager.onContractEvent((event) => {
|
|
337
|
-
* console.log(`${event.type} on ${event.contractScript}`);
|
|
338
|
-
* });
|
|
339
|
-
*
|
|
340
|
-
* // Later: stop receiving events
|
|
341
|
-
* unsubscribe();
|
|
342
|
-
* ```
|
|
343
|
-
*/
|
|
344
|
-
onContractEvent(callback) {
|
|
345
|
-
this.eventCallbacks.add(callback);
|
|
346
|
-
return () => {
|
|
347
|
-
this.eventCallbacks.delete(callback);
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Force refresh virtual outputs from the indexer.
|
|
352
|
-
*
|
|
353
|
-
* Without options, re-fetches every contract in the watcher's
|
|
354
|
-
* watched set and advances the global cursor.
|
|
355
|
-
*
|
|
356
|
-
* `scripts` narrows the refresh to a specific list (subset query —
|
|
357
|
-
* cursor is not advanced because contracts outside the list may
|
|
358
|
-
* have data we'd skip).
|
|
359
|
-
*
|
|
360
|
-
* `includeInactive: true` (and no `scripts`) widens the refresh to
|
|
361
|
-
* every contract in the repository, including ones marked
|
|
362
|
-
* `inactive` and ones that have dropped out of the watcher's
|
|
363
|
-
* active set. This is a *superset* of the watched set, so the
|
|
364
|
-
* cursor invariant still holds and the cursor advances normally.
|
|
365
|
-
*
|
|
366
|
-
* `after` / `before` apply a caller-supplied time window. The
|
|
367
|
-
* cursor never advances on a windowed query because the window
|
|
368
|
-
* may skip data outside its bounds.
|
|
369
|
-
*/
|
|
370
|
-
async refreshVtxos(opts) {
|
|
371
|
-
const contracts = opts?.scripts
|
|
372
|
-
? await this.getContracts({ script: opts.scripts })
|
|
373
|
-
: undefined;
|
|
374
|
-
// Only forward an explicit window when the caller supplied one. An
|
|
375
|
-
// empty `{ after: undefined, before: undefined }` would short-circuit
|
|
376
|
-
// both the cursor-derived `?after=` query in `syncContracts` (because
|
|
377
|
-
// `??` doesn't fire on a non-nullish object) AND the cursor-advance
|
|
378
|
-
// gate (which requires `options.window === undefined`), turning every
|
|
379
|
-
// `refreshVtxos()` call into an unbounded full re-scan whose cursor
|
|
380
|
-
// never moves forward.
|
|
381
|
-
const hasExplicitWindow = opts?.after !== undefined || opts?.before !== undefined;
|
|
382
|
-
await this.syncContracts({
|
|
383
|
-
contracts,
|
|
384
|
-
// Scope-only widener; never set together with explicit
|
|
385
|
-
// `contracts` because `scripts` already names the exact set.
|
|
386
|
-
includeInactive: contracts ? false : opts?.includeInactive,
|
|
387
|
-
window: hasExplicitWindow
|
|
388
|
-
? { after: opts?.after, before: opts?.before }
|
|
389
|
-
: undefined,
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
async refreshOutpoints(outpoints) {
|
|
393
|
-
if (outpoints.length === 0)
|
|
394
|
-
return;
|
|
395
|
-
const { vtxos } = await this.config.indexerProvider.getVtxos({
|
|
396
|
-
outpoints,
|
|
397
|
-
});
|
|
398
|
-
if (vtxos.length === 0)
|
|
399
|
-
return;
|
|
400
|
-
// Filter to outputs whose script we own. Map them to their owning
|
|
401
|
-
// contract so we can write through to the right per-address entry
|
|
402
|
-
// in the wallet repository.
|
|
403
|
-
const scripts = Array.from(new Set(vtxos.map((v) => v.script)));
|
|
404
|
-
const contracts = await this.config.contractRepository.getContracts({
|
|
405
|
-
script: scripts,
|
|
406
|
-
});
|
|
407
|
-
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
408
|
-
const owned = vtxos.filter((v) => scriptToContract.has(v.script));
|
|
409
|
-
if (owned.length === 0)
|
|
410
|
-
return;
|
|
411
|
-
const annotated = await this.annotateVtxos(owned);
|
|
412
|
-
const byAddress = new Map();
|
|
413
|
-
for (const vtxo of annotated) {
|
|
414
|
-
const contract = scriptToContract.get(vtxo.script);
|
|
415
|
-
if (!contract)
|
|
416
|
-
continue;
|
|
417
|
-
const address = contract.address;
|
|
418
|
-
const arr = byAddress.get(address) ?? [];
|
|
419
|
-
arr.push(vtxo);
|
|
420
|
-
byAddress.set(address, arr);
|
|
421
|
-
}
|
|
422
|
-
for (const [address, addressVtxos] of byAddress) {
|
|
423
|
-
const contract = contracts.find((c) => c.address === address);
|
|
424
|
-
if (contract) {
|
|
425
|
-
await (0, vtxoOwnership_1.saveVtxosForContract)(this.config.walletRepository, contract, addressVtxos);
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
await this.config.walletRepository.saveVtxos(address, addressVtxos);
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Check if currently watching.
|
|
434
|
-
*/
|
|
435
|
-
async isWatching() {
|
|
436
|
-
return this.watcher.isCurrentlyWatching();
|
|
437
|
-
}
|
|
438
|
-
/**
|
|
439
|
-
* Emit an event to all registered callbacks.
|
|
440
|
-
*/
|
|
441
|
-
emitEvent(event) {
|
|
442
|
-
for (const callback of this.eventCallbacks) {
|
|
443
|
-
try {
|
|
444
|
-
callback(event);
|
|
445
|
-
}
|
|
446
|
-
catch (error) {
|
|
447
|
-
console.error("Error in contract event callback:", error);
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
/**
|
|
452
|
-
* Handle events from the watcher.
|
|
453
|
-
*/
|
|
454
|
-
async handleContractEvent(event) {
|
|
455
|
-
switch (event.type) {
|
|
456
|
-
// Delta-sync only the changed virtual outputs for this contract.
|
|
457
|
-
case "vtxo_received":
|
|
458
|
-
case "vtxo_spent":
|
|
459
|
-
await this.syncContracts({ contracts: [event.contract] });
|
|
460
|
-
break;
|
|
461
|
-
case "connection_reset":
|
|
462
|
-
// Same recovery path as boot: delta-sync the watched set
|
|
463
|
-
// and reconcile the pending frontier. `advanceSyncCursor`
|
|
464
|
-
// is monotonic so this never rewinds the cursor.
|
|
465
|
-
await this.reconcileWatched();
|
|
466
|
-
break;
|
|
467
|
-
}
|
|
468
|
-
// Forward to all callbacks
|
|
469
|
-
this.emitEvent(event);
|
|
470
|
-
}
|
|
471
|
-
async getVtxosForContracts(contracts) {
|
|
472
|
-
const res = await Promise.all(contracts.map((contract) => (0, vtxoOwnership_1.getVtxosForContract)(this.config.walletRepository, contract).then((vtxos) => vtxos.map((vtxo) => ({
|
|
473
|
-
...vtxo,
|
|
474
|
-
contractScript: contract.script,
|
|
475
|
-
})))));
|
|
476
|
-
return res.flat();
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Sync virtual outputs for the given contracts against the indexer.
|
|
480
|
-
*
|
|
481
|
-
* When `options.contracts` is omitted the sync covers the full
|
|
482
|
-
* watched set (active contracts plus any inactive contracts still
|
|
483
|
-
* holding cached VTXOs) and the global cursor is advanced on
|
|
484
|
-
* success. Passing an explicit subset leaves the cursor alone so a
|
|
485
|
-
* narrow poll can't hide data that other contracts still need to
|
|
486
|
-
* pick up.
|
|
487
|
-
*/
|
|
488
|
-
async syncContracts(options) {
|
|
489
|
-
const cursor = await (0, syncCursors_1.getSyncCursor)(this.config.walletRepository);
|
|
490
|
-
const window = options.window ?? (0, syncCursors_1.computeSyncWindow)(cursor);
|
|
491
|
-
// Advance the global cursor only on cursor-derived delta syncs
|
|
492
|
-
// whose contract scope covers at least the watcher's watched
|
|
493
|
-
// set. Targeted subset queries (caller-supplied `contracts`) and
|
|
494
|
-
// bounded-window queries must not move the cursor — they may
|
|
495
|
-
// skip data outside their bounds. `includeInactive` (with no
|
|
496
|
-
// `contracts`) widens the scope rather than narrowing it, so it
|
|
497
|
-
// is cursor-safe. `<=` lets the bootstrap case (cursor=0,
|
|
498
|
-
// window.after=0) write the migration marker on first boot.
|
|
499
|
-
const mustUpdateCursor = options.contracts === undefined &&
|
|
500
|
-
options.window === undefined &&
|
|
501
|
-
(window.after ?? 0) <= cursor;
|
|
502
|
-
const contracts = options.contracts ??
|
|
503
|
-
(options.includeInactive
|
|
504
|
-
? await this.config.contractRepository.getContracts({})
|
|
505
|
-
: this.watcher.getWatchedContracts());
|
|
506
|
-
const requestStartedAt = Date.now();
|
|
507
|
-
const result = await this.fetchContractVxosFromIndexer(contracts, options.pageSize, window);
|
|
508
|
-
if (mustUpdateCursor) {
|
|
509
|
-
const cutoff = (0, syncCursors_1.cursorCutoff)(requestStartedAt);
|
|
510
|
-
await (0, syncCursors_1.advanceSyncCursor)(this.config.walletRepository, cutoff);
|
|
511
|
-
}
|
|
512
|
-
return result;
|
|
513
|
-
}
|
|
514
|
-
/**
|
|
515
|
-
* Fetch all pending (unfinalized) virtual outputs and upsert them into the
|
|
516
|
-
* repository. This catches virtual outputs whose state changed outside the delta
|
|
517
|
-
* window (e.g. a spend that hasn't settled yet).
|
|
518
|
-
*/
|
|
519
|
-
async reconcilePendingFrontier(contracts) {
|
|
520
|
-
const scripts = contracts.map((c) => c.script);
|
|
521
|
-
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
522
|
-
const { vtxos } = await this.config.indexerProvider.getVtxos({
|
|
523
|
-
scripts,
|
|
524
|
-
pendingOnly: true,
|
|
525
|
-
});
|
|
526
|
-
// Share the annotation path with external callers so the two entry
|
|
527
|
-
// points can't drift.
|
|
528
|
-
const owned = vtxos.filter((v) => scriptToContract.has(v.script));
|
|
529
|
-
const annotated = await this.annotateVtxos(owned);
|
|
530
|
-
const byContract = new Map();
|
|
531
|
-
for (const vtxo of annotated) {
|
|
532
|
-
const contract = scriptToContract.get(vtxo.script);
|
|
533
|
-
let arr = byContract.get(contract.address);
|
|
534
|
-
if (!arr) {
|
|
535
|
-
arr = [];
|
|
536
|
-
byContract.set(contract.address, arr);
|
|
537
|
-
}
|
|
538
|
-
arr.push({
|
|
539
|
-
...vtxo,
|
|
540
|
-
contractScript: contract.script,
|
|
541
|
-
});
|
|
542
|
-
}
|
|
543
|
-
for (const [addr, contractVtxos] of byContract) {
|
|
544
|
-
// The bucket is keyed by contract address, so the script filter
|
|
545
|
-
// here is the same as the contract's. Skip wrong-script rows
|
|
546
|
-
// rather than crash the reconcile loop.
|
|
547
|
-
const contract = contracts.find((c) => c.address === addr);
|
|
548
|
-
const filtered = (0, vtxoOwnership_1.warnAndFilterVtxosForScript)(contractVtxos, contract.script, "ContractManager.reconcilePendingFrontier");
|
|
549
|
-
if (filtered.length === 0)
|
|
550
|
-
continue;
|
|
551
|
-
await (0, vtxoOwnership_1.saveVtxosForContract)(this.config.walletRepository, contract, filtered);
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
async fetchContractVxosFromIndexer(contracts, pageSize, syncWindow) {
|
|
555
|
-
const fetched = await this.fetchContractVtxosBulk(contracts, pageSize, syncWindow);
|
|
556
|
-
const result = new Map();
|
|
557
|
-
for (const [contractScript, vtxos] of fetched) {
|
|
558
|
-
result.set(contractScript, vtxos);
|
|
559
|
-
const contract = contracts.find((c) => c.script === contractScript);
|
|
560
|
-
if (contract) {
|
|
561
|
-
const filtered = (0, vtxoOwnership_1.warnAndFilterVtxosForScript)(vtxos, contract.script, "ContractManager.fetchContractVxosFromIndexer");
|
|
562
|
-
if (filtered.length === 0)
|
|
563
|
-
continue;
|
|
564
|
-
await (0, vtxoOwnership_1.saveVtxosForContract)(this.config.walletRepository, contract, filtered);
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
return result;
|
|
568
|
-
}
|
|
569
|
-
async fetchContractVtxosBulk(contracts, pageSize = DEFAULT_PAGE_SIZE, syncWindow) {
|
|
570
|
-
if (contracts.length === 0) {
|
|
571
|
-
return new Map();
|
|
572
|
-
}
|
|
573
|
-
// Batch all scripts into a single indexer call per page to minimise
|
|
574
|
-
// round-trips. Results are keyed by script so we can distribute them
|
|
575
|
-
// back to the correct contract afterwards. Always fetches the full
|
|
576
|
-
// history (spent/swept included) so the repo is the source of truth.
|
|
577
|
-
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
578
|
-
const result = new Map(contracts.map((c) => [c.script, []]));
|
|
579
|
-
const scripts = contracts.map((c) => c.script);
|
|
580
|
-
const windowOpts = syncWindow
|
|
581
|
-
? {
|
|
582
|
-
...(syncWindow.after !== undefined && {
|
|
583
|
-
after: syncWindow.after,
|
|
584
|
-
}),
|
|
585
|
-
...(syncWindow.before !== undefined && {
|
|
586
|
-
before: syncWindow.before,
|
|
587
|
-
}),
|
|
588
|
-
}
|
|
589
|
-
: {};
|
|
590
|
-
let pageIndex = 0;
|
|
591
|
-
let hasMore = true;
|
|
592
|
-
while (hasMore) {
|
|
593
|
-
const { vtxos, page } = await this.config.indexerProvider.getVtxos({
|
|
594
|
-
scripts,
|
|
595
|
-
...windowOpts,
|
|
596
|
-
pageIndex,
|
|
597
|
-
pageSize,
|
|
598
|
-
});
|
|
599
|
-
// Match virtual outputs back to their contract via the script field
|
|
600
|
-
// populated by the indexer, then share the annotation path with
|
|
601
|
-
// external callers via annotateVtxos so the two entry points can't
|
|
602
|
-
// drift.
|
|
603
|
-
const owned = vtxos.filter((v) => scriptToContract.has(v.script));
|
|
604
|
-
const annotated = await this.annotateVtxos(owned);
|
|
605
|
-
for (const vtxo of annotated) {
|
|
606
|
-
result.get(vtxo.script).push({
|
|
607
|
-
...vtxo,
|
|
608
|
-
contractScript: vtxo.script,
|
|
609
|
-
});
|
|
610
|
-
}
|
|
611
|
-
hasMore = page ? vtxos.length === pageSize : false;
|
|
612
|
-
pageIndex++;
|
|
613
|
-
if (hasMore)
|
|
614
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
615
|
-
}
|
|
616
|
-
return result;
|
|
617
|
-
}
|
|
618
|
-
/**
|
|
619
|
-
* Dispose of the ContractManager and release all resources.
|
|
620
|
-
*
|
|
621
|
-
* Stops the watcher, clears callbacks, and marks
|
|
622
|
-
* the manager as uninitialized.
|
|
623
|
-
*
|
|
624
|
-
* Implements the disposable pattern for cleanup.
|
|
625
|
-
*/
|
|
626
|
-
dispose() {
|
|
627
|
-
// Stop watching
|
|
628
|
-
this.stopWatcherFn?.();
|
|
629
|
-
this.stopWatcherFn = undefined;
|
|
630
|
-
// Clear callbacks
|
|
631
|
-
this.eventCallbacks.clear();
|
|
632
|
-
// Mark as uninitialized
|
|
633
|
-
this.initialized = false;
|
|
634
|
-
}
|
|
635
|
-
/**
|
|
636
|
-
* Symbol.dispose implementation for using with `using` keyword.
|
|
637
|
-
* @example
|
|
638
|
-
* ```typescript
|
|
639
|
-
* {
|
|
640
|
-
* using manager = await wallet.getContractManager();
|
|
641
|
-
* // ... use manager
|
|
642
|
-
* } // automatically disposed
|
|
643
|
-
* ```
|
|
644
|
-
*/
|
|
645
|
-
[Symbol.dispose]() {
|
|
646
|
-
this.dispose();
|
|
647
|
-
}
|
|
648
|
-
}
|
|
649
|
-
exports.ContractManager = ContractManager;
|