@arkade-os/sdk 0.4.26 → 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 +36 -125
- 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 -629
- 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 -2
- package/dist/cjs/identity/index.js +0 -38
- package/dist/cjs/identity/seedIdentity.js +0 -461
- 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 -200
- 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 -302
- 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 -159
- package/dist/cjs/wallet/index.js +0 -82
- 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 -1173
- package/dist/cjs/wallet/unroll.js +0 -289
- 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 -2049
- 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 -473
- 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 -625
- 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 -1
- package/dist/esm/identity/index.js +0 -12
- package/dist/esm/identity/seedIdentity.js +0 -453
- 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 -297
- 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 -155
- package/dist/esm/wallet/index.js +0 -75
- 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 -1168
- package/dist/esm/wallet/unroll.js +0 -285
- 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 -2041
- 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 -469
- 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 -381
- 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 -233
- 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 -35
- package/dist/types/identity/hdCapableIdentity.d.ts +0 -44
- package/dist/types/identity/index.d.ts +0 -56
- package/dist/types/identity/seedIdentity.d.ts +0 -254
- 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 -93
- package/dist/types/wallet/index.d.ts +0 -755
- 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 -238
- 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 -360
- 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 -188
|
@@ -1,453 +0,0 @@
|
|
|
1
|
-
import { validateMnemonic, mnemonicToSeedSync } from "@scure/bip39";
|
|
2
|
-
import { wordlist } from "@scure/bip39/wordlists/english.js";
|
|
3
|
-
import { pubECDSA, pubSchnorr } from "@scure/btc-signer/utils.js";
|
|
4
|
-
import { SigHash } from "@scure/btc-signer";
|
|
5
|
-
import { hex } from "@scure/base";
|
|
6
|
-
import { TreeSignerSession } from "../tree/signingSession.js";
|
|
7
|
-
import { schnorr, signAsync } from "@noble/secp256k1";
|
|
8
|
-
import { HDKey, expand, networks, scriptExpressions, } from "@bitcoinerlab/descriptors-scure";
|
|
9
|
-
import { descriptorIsOurs, isMainnetDescriptor } from "./descriptor.js";
|
|
10
|
-
const ALL_SIGHASH = Object.values(SigHash).filter((x) => typeof x === "number");
|
|
11
|
-
/**
|
|
12
|
-
* Secret-bearing state for seed-backed identities, held off the public
|
|
13
|
-
* instance surface. Accessed only by the SDK-internal serializer helpers
|
|
14
|
-
* below; application code cannot read these via ordinary field access.
|
|
15
|
-
*
|
|
16
|
-
* Using a module-private WeakMap (rather than `private` / `protected`)
|
|
17
|
-
* matters because TypeScript visibility is a compile-time boundary only:
|
|
18
|
-
* JavaScript consumers could still read public fields. A WeakMap removes
|
|
19
|
-
* that enumeration path entirely.
|
|
20
|
-
*/
|
|
21
|
-
const seedBytes = new WeakMap();
|
|
22
|
-
const mnemonicMeta = new WeakMap();
|
|
23
|
-
/**
|
|
24
|
-
* Seed-based identity derived from a raw seed and an account descriptor
|
|
25
|
-
* *template*.
|
|
26
|
-
*
|
|
27
|
-
* This is the recommended identity type for most applications. It uses
|
|
28
|
-
* standard BIP86 (Taproot) derivation by default; callers that need a
|
|
29
|
-
* different path supply the wildcard template directly.
|
|
30
|
-
*
|
|
31
|
-
* Prefer this (or @see MnemonicIdentity) over `SingleKey` for new
|
|
32
|
-
* integrations — `SingleKey` exists for backward compatibility with
|
|
33
|
-
* raw nsec-style keys.
|
|
34
|
-
*
|
|
35
|
-
* The identity holds the wildcard *template* (e.g.
|
|
36
|
-
* `tr([fp/86'/0'/0']xpub/0/*)`) on its public {@link descriptor}
|
|
37
|
-
* field. HD rotation reads it directly; consumers that need a
|
|
38
|
-
* concrete descriptor at a specific index materialize it themselves
|
|
39
|
-
* (see `HDDescriptorProvider` in the wallet layer).
|
|
40
|
-
*
|
|
41
|
-
* Exposes seed-level primitives (signing, derivation, the template)
|
|
42
|
-
* but is deliberately NOT a `DescriptorProvider`. Wrap it explicitly
|
|
43
|
-
* to get one:
|
|
44
|
-
* - `HDDescriptorProvider` for rotating receive addresses.
|
|
45
|
-
* - {@link StaticDescriptorProvider} for legacy, single-key behaviour.
|
|
46
|
-
*
|
|
47
|
-
* The split prevents a SeedIdentity from being silently used as a
|
|
48
|
-
* concrete descriptor source, which would defeat HD rotation without
|
|
49
|
-
* any compile-time signal that something was wrong.
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```typescript
|
|
53
|
-
* const seed = mnemonicToSeedSync(mnemonic);
|
|
54
|
-
*
|
|
55
|
-
* // Testnet (BIP86 wildcard descriptor m/86'/1'/0'/0/*)
|
|
56
|
-
* const identity = SeedIdentity.fromSeed(seed, { isMainnet: false });
|
|
57
|
-
*
|
|
58
|
-
* // Mainnet (BIP86 wildcard descriptor m/86'/0'/0'/0/*)
|
|
59
|
-
* const identity = SeedIdentity.fromSeed(seed, { isMainnet: true });
|
|
60
|
-
*
|
|
61
|
-
* // Caller-supplied wildcard descriptor (must end in `/*)`).
|
|
62
|
-
* const identity = SeedIdentity.fromSeed(seed, { descriptor });
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export class SeedIdentity {
|
|
66
|
-
/**
|
|
67
|
-
* Constructs a SeedIdentity from a 64-byte seed and either a
|
|
68
|
-
* caller-supplied wildcard descriptor (`{ descriptor }`) or the
|
|
69
|
-
* default BIP86 path at the requested network (`{ isMainnet }`).
|
|
70
|
-
* Prefer the {@link fromSeed} factory for symmetry with
|
|
71
|
-
* {@link MnemonicIdentity.fromMnemonic}.
|
|
72
|
-
*
|
|
73
|
-
* Throws on a non-wildcard descriptor, an xpub mismatch with the
|
|
74
|
-
* seed, or a missing derivation path.
|
|
75
|
-
*/
|
|
76
|
-
constructor(seed, opts = {}) {
|
|
77
|
-
if (seed.length !== 64) {
|
|
78
|
-
throw new Error("Seed must be 64 bytes");
|
|
79
|
-
}
|
|
80
|
-
// Resolve the descriptor: caller-supplied wins; otherwise build
|
|
81
|
-
// the BIP86 default at the requested network via the library.
|
|
82
|
-
let descriptor;
|
|
83
|
-
let network;
|
|
84
|
-
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
85
|
-
descriptor = opts.descriptor;
|
|
86
|
-
network = isMainnetDescriptor(descriptor)
|
|
87
|
-
? networks.bitcoin
|
|
88
|
-
: networks.testnet;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
network =
|
|
92
|
-
(opts.isMainnet ?? true)
|
|
93
|
-
? networks.bitcoin
|
|
94
|
-
: networks.testnet;
|
|
95
|
-
descriptor = scriptExpressions.trBIP32({
|
|
96
|
-
masterNode: HDKey.fromMasterSeed(seed, network.bip32),
|
|
97
|
-
network,
|
|
98
|
-
account: 0,
|
|
99
|
-
change: 0,
|
|
100
|
-
index: "*",
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
// Parse the descriptor, substituting the wildcard at index 0.
|
|
104
|
-
// The library raises "index passed for non-ranged descriptor"
|
|
105
|
-
// if the input isn't a wildcard template, which we re-wrap so
|
|
106
|
-
// the caller sees what they actually got wrong.
|
|
107
|
-
let expansion;
|
|
108
|
-
try {
|
|
109
|
-
expansion = expand({ descriptor, network, index: 0 });
|
|
110
|
-
}
|
|
111
|
-
catch (e) {
|
|
112
|
-
throw new Error(`SeedIdentity requires a wildcard descriptor template (must end in "/*)"); ${e instanceof Error ? e.message : String(e)}`);
|
|
113
|
-
}
|
|
114
|
-
const keyInfo = expansion.expansionMap?.["@0"];
|
|
115
|
-
// Defensive copy: `derivedKey` and `descriptor` are computed eagerly
|
|
116
|
-
// from the bytes we're about to stash, so a later mutation of the
|
|
117
|
-
// caller's buffer must not drift the serialized `seed` out of sync
|
|
118
|
-
// with the live identity state.
|
|
119
|
-
seedBytes.set(this, new Uint8Array(seed));
|
|
120
|
-
this.descriptor = descriptor;
|
|
121
|
-
if (!keyInfo?.originPath) {
|
|
122
|
-
throw new Error("Descriptor must include a key origin path");
|
|
123
|
-
}
|
|
124
|
-
// Verify the xpub in the descriptor matches our seed (validates
|
|
125
|
-
// that the descriptor was generated from this seed; we don't
|
|
126
|
-
// need to keep the xpub around afterwards — `isOurs` re-derives
|
|
127
|
-
// it from `this.descriptor` on demand).
|
|
128
|
-
const masterNode = HDKey.fromMasterSeed(seed, network.bip32);
|
|
129
|
-
const accountNode = masterNode.derive(`m${keyInfo.originPath}`);
|
|
130
|
-
if (accountNode.publicExtendedKey !== keyInfo.bip32?.toBase58()) {
|
|
131
|
-
throw new Error("xpub mismatch: derived key does not match descriptor");
|
|
132
|
-
}
|
|
133
|
-
// Derive the private key for index 0 using the full path
|
|
134
|
-
if (!keyInfo.path) {
|
|
135
|
-
throw new Error("Descriptor must specify a full derivation path");
|
|
136
|
-
}
|
|
137
|
-
const derivedNode = masterNode.derive(keyInfo.path);
|
|
138
|
-
if (!derivedNode.privateKey) {
|
|
139
|
-
throw new Error("Failed to derive private key");
|
|
140
|
-
}
|
|
141
|
-
this.derivedKey = derivedNode.privateKey;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Creates a SeedIdentity from a raw 64-byte seed.
|
|
145
|
-
*
|
|
146
|
-
* Pass `{ isMainnet }` for default BIP86 derivation, or
|
|
147
|
-
* `{ descriptor }` for a caller-supplied account-descriptor
|
|
148
|
-
* template (the option's value must end with `/*)`).
|
|
149
|
-
*
|
|
150
|
-
* @param seed - 64-byte seed (typically from mnemonicToSeedSync)
|
|
151
|
-
* @param opts - Network selection or descriptor template.
|
|
152
|
-
*/
|
|
153
|
-
static fromSeed(seed, opts = {}) {
|
|
154
|
-
return new SeedIdentity(seed, opts);
|
|
155
|
-
}
|
|
156
|
-
async xOnlyPublicKey() {
|
|
157
|
-
return pubSchnorr(this.derivedKey);
|
|
158
|
-
}
|
|
159
|
-
async compressedPublicKey() {
|
|
160
|
-
return pubECDSA(this.derivedKey, true);
|
|
161
|
-
}
|
|
162
|
-
async sign(tx, inputIndexes) {
|
|
163
|
-
return this.signTxWithKey(tx, this.derivedKey, inputIndexes);
|
|
164
|
-
}
|
|
165
|
-
async signMessage(message, signatureType = "schnorr") {
|
|
166
|
-
return this.signMessageWithKey(this.derivedKey, message, signatureType);
|
|
167
|
-
}
|
|
168
|
-
signerSession() {
|
|
169
|
-
return TreeSignerSession.random();
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Converts to a watch-only identity that cannot sign. Carries the
|
|
173
|
-
* template forward, so the readonly side stays HD-capable (can
|
|
174
|
-
* derive descriptors at any index without seed access).
|
|
175
|
-
*/
|
|
176
|
-
async toReadonly() {
|
|
177
|
-
return ReadonlyDescriptorIdentity.fromDescriptor(this.descriptor);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Returns true when `descriptor` is derived from this identity's seed.
|
|
181
|
-
* HD descriptors match by account xpub; bare `tr(pubkey)` descriptors
|
|
182
|
-
* match by raw pubkey. See {@link descriptorIsOurs}.
|
|
183
|
-
*/
|
|
184
|
-
isOurs(descriptor) {
|
|
185
|
-
return descriptorIsOurs(descriptor, this.descriptor, pubSchnorr(this.derivedKey));
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Signs each request with the key derived from its descriptor.
|
|
189
|
-
* Each descriptor must share this identity's seed ({@link isOurs}).
|
|
190
|
-
*/
|
|
191
|
-
async signWithDescriptor(requests) {
|
|
192
|
-
return requests.map((request) => {
|
|
193
|
-
if (!this.isOurs(request.descriptor)) {
|
|
194
|
-
throw new Error(`Descriptor ${request.descriptor} does not belong to this identity`);
|
|
195
|
-
}
|
|
196
|
-
const key = this.derivePrivateKeyForDescriptor(request.descriptor);
|
|
197
|
-
return this.signTxWithKey(request.tx, key, request.inputIndexes);
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Signs a message with the key derived from `descriptor`.
|
|
202
|
-
*/
|
|
203
|
-
async signMessageWithDescriptor(descriptor, message, signatureType = "schnorr") {
|
|
204
|
-
if (!this.isOurs(descriptor)) {
|
|
205
|
-
throw new Error(`Descriptor ${descriptor} does not belong to this identity`);
|
|
206
|
-
}
|
|
207
|
-
const key = this.derivePrivateKeyForDescriptor(descriptor);
|
|
208
|
-
return this.signMessageWithKey(key, message, signatureType);
|
|
209
|
-
}
|
|
210
|
-
// ── internal helpers ─────────────────────────────────────────────
|
|
211
|
-
derivePrivateKeyForDescriptor(descriptor) {
|
|
212
|
-
const network = isMainnetDescriptor(descriptor)
|
|
213
|
-
? networks.bitcoin
|
|
214
|
-
: networks.testnet;
|
|
215
|
-
const expansion = expand({ descriptor, network });
|
|
216
|
-
if (expansion.isRanged) {
|
|
217
|
-
throw new Error("Cannot sign with a wildcard descriptor; derive a concrete index first");
|
|
218
|
-
}
|
|
219
|
-
const keyInfo = expansion.expansionMap?.["@0"];
|
|
220
|
-
if (!keyInfo?.path) {
|
|
221
|
-
throw new Error("Descriptor must specify a full derivation path for signing");
|
|
222
|
-
}
|
|
223
|
-
const seed = seedBytes.get(this);
|
|
224
|
-
if (!seed) {
|
|
225
|
-
throw new Error("Seed bytes not available for descriptor signing");
|
|
226
|
-
}
|
|
227
|
-
const masterNode = HDKey.fromMasterSeed(seed, network.bip32);
|
|
228
|
-
const node = masterNode.derive(keyInfo.path);
|
|
229
|
-
if (!node.privateKey) {
|
|
230
|
-
throw new Error("Failed to derive private key for descriptor");
|
|
231
|
-
}
|
|
232
|
-
return node.privateKey;
|
|
233
|
-
}
|
|
234
|
-
signTxWithKey(tx, key, inputIndexes) {
|
|
235
|
-
const txCpy = tx.clone();
|
|
236
|
-
if (!inputIndexes) {
|
|
237
|
-
try {
|
|
238
|
-
if (!txCpy.sign(key, ALL_SIGHASH)) {
|
|
239
|
-
throw new Error("Failed to sign transaction");
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
catch (e) {
|
|
243
|
-
if (e instanceof Error &&
|
|
244
|
-
e.message.includes("No inputs signed")) {
|
|
245
|
-
// ignore
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
throw e;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
for (const idx of inputIndexes) {
|
|
254
|
-
if (!txCpy.signIdx(key, idx, ALL_SIGHASH)) {
|
|
255
|
-
throw new Error(`Failed to sign input #${idx}`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
return txCpy;
|
|
260
|
-
}
|
|
261
|
-
signMessageWithKey(key, message, signatureType) {
|
|
262
|
-
if (signatureType === "ecdsa")
|
|
263
|
-
return signAsync(message, key, { prehash: false });
|
|
264
|
-
return schnorr.signAsync(message, key);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Mnemonic-based identity derived from a BIP39 phrase.
|
|
269
|
-
*
|
|
270
|
-
* This is the most user-friendly identity type — recommended for wallet
|
|
271
|
-
* applications where users manage their own backup phrase. Extends
|
|
272
|
-
* @see SeedIdentity with mnemonic validation and optional passphrase
|
|
273
|
-
* support.
|
|
274
|
-
*
|
|
275
|
-
* @example
|
|
276
|
-
* ```typescript
|
|
277
|
-
* const identity = MnemonicIdentity.fromMnemonic(
|
|
278
|
-
* 'abandon abandon abandon ...',
|
|
279
|
-
* { isMainnet: true, passphrase: 'secret' }
|
|
280
|
-
* );
|
|
281
|
-
* ```
|
|
282
|
-
*/
|
|
283
|
-
export class MnemonicIdentity extends SeedIdentity {
|
|
284
|
-
constructor(phrase, opts) {
|
|
285
|
-
const { passphrase } = opts;
|
|
286
|
-
super(mnemonicToSeedSync(phrase, passphrase), opts);
|
|
287
|
-
mnemonicMeta.set(this, { mnemonic: phrase, passphrase });
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Creates a MnemonicIdentity from a BIP39 mnemonic phrase.
|
|
291
|
-
*
|
|
292
|
-
* Pass `{ isMainnet }` for default BIP86 derivation, or
|
|
293
|
-
* `{ descriptor }` for a caller-supplied account-descriptor
|
|
294
|
-
* template (the option's value must end with `/*)`).
|
|
295
|
-
*
|
|
296
|
-
* @param phrase - BIP39 mnemonic phrase (12 or 24 words)
|
|
297
|
-
* @param opts - Network selection or descriptor template, plus optional passphrase
|
|
298
|
-
*/
|
|
299
|
-
static fromMnemonic(phrase, opts = {}) {
|
|
300
|
-
if (!validateMnemonic(phrase, wordlist)) {
|
|
301
|
-
throw new Error("Invalid mnemonic");
|
|
302
|
-
}
|
|
303
|
-
return new MnemonicIdentity(phrase, opts);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Watch-only HD identity from a descriptor *template*.
|
|
308
|
-
*
|
|
309
|
-
* Can derive public keys but cannot sign transactions. Use this for
|
|
310
|
-
* watch-only wallets — given just an xpub-based template, the readonly
|
|
311
|
-
* side still rotates through HD indices.
|
|
312
|
-
*
|
|
313
|
-
* Constructed from a wildcard template (e.g.
|
|
314
|
-
* `tr([fp/86'/0'/0']xpub.../0/*)`); the {@link descriptor} field
|
|
315
|
-
* holds it for HD providers to consume.
|
|
316
|
-
*
|
|
317
|
-
* @example
|
|
318
|
-
* ```typescript
|
|
319
|
-
* const ro = ReadonlyDescriptorIdentity.fromDescriptor(
|
|
320
|
-
* "tr([fp/86'/0'/0']xpub.../0/*)"
|
|
321
|
-
* );
|
|
322
|
-
* ro.descriptor;
|
|
323
|
-
* // => "tr([fp/86'/0'/0']xpub.../0/*)" — the template
|
|
324
|
-
* ```
|
|
325
|
-
*/
|
|
326
|
-
export class ReadonlyDescriptorIdentity {
|
|
327
|
-
constructor(descriptor) {
|
|
328
|
-
const network = isMainnetDescriptor(descriptor)
|
|
329
|
-
? networks.bitcoin
|
|
330
|
-
: networks.testnet;
|
|
331
|
-
// Library substitutes the wildcard at index 0 and raises
|
|
332
|
-
// "index passed for non-ranged descriptor" if `descriptor` isn't
|
|
333
|
-
// actually a wildcard template — re-wrap so the caller sees
|
|
334
|
-
// the higher-level invariant they violated.
|
|
335
|
-
let expansion;
|
|
336
|
-
try {
|
|
337
|
-
expansion = expand({ descriptor, network, index: 0 });
|
|
338
|
-
}
|
|
339
|
-
catch (e) {
|
|
340
|
-
throw new Error(`ReadonlyDescriptorIdentity requires a wildcard descriptor template (must end in "/*)"); ${e instanceof Error ? e.message : String(e)}`);
|
|
341
|
-
}
|
|
342
|
-
const keyInfo = expansion.expansionMap?.["@0"];
|
|
343
|
-
if (!keyInfo?.pubkey) {
|
|
344
|
-
throw new Error("Failed to derive public key from descriptor");
|
|
345
|
-
}
|
|
346
|
-
if (!keyInfo.bip32) {
|
|
347
|
-
throw new Error("Cannot determine compressed public key parity from descriptor");
|
|
348
|
-
}
|
|
349
|
-
this.descriptor = descriptor;
|
|
350
|
-
this.indexZero = keyInfo;
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Creates a ReadonlyDescriptorIdentity from an account-descriptor
|
|
354
|
-
* *template* (must end with the BIP-32 wildcard suffix `/*)`).
|
|
355
|
-
*
|
|
356
|
-
* @param descriptor - Wildcard-suffixed Taproot template
|
|
357
|
-
* (`tr([fp/path']xpub.../child/*)`).
|
|
358
|
-
*/
|
|
359
|
-
static fromDescriptor(descriptor) {
|
|
360
|
-
return new ReadonlyDescriptorIdentity(descriptor);
|
|
361
|
-
}
|
|
362
|
-
async xOnlyPublicKey() {
|
|
363
|
-
// Validated non-null in the constructor.
|
|
364
|
-
return this.indexZero.pubkey;
|
|
365
|
-
}
|
|
366
|
-
async compressedPublicKey() {
|
|
367
|
-
const { bip32, keyPath } = this.indexZero;
|
|
368
|
-
// bip32 validated non-null in the constructor; derivePath
|
|
369
|
-
// returns a fresh node so this is a read of the index-0
|
|
370
|
-
// compressed pubkey, not a mutation of the stored one.
|
|
371
|
-
if (keyPath) {
|
|
372
|
-
// Strip leading "/" — the library's derivePath prepends "m/" itself
|
|
373
|
-
return bip32.derivePath(keyPath.replace(/^\//, "")).publicKey;
|
|
374
|
-
}
|
|
375
|
-
return bip32.publicKey;
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Returns true when `descriptor` derives from this identity's xpub.
|
|
379
|
-
* HD descriptors match by account xpub; bare `tr(pubkey)` descriptors
|
|
380
|
-
* fall back to comparing against the index-0 x-only pubkey. See
|
|
381
|
-
* {@link descriptorIsOurs}.
|
|
382
|
-
*/
|
|
383
|
-
isOurs(descriptor) {
|
|
384
|
-
return descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
/**
|
|
388
|
-
* Serialize a seed-backed signing identity into a
|
|
389
|
-
* {@link SerializedSigningIdentity} envelope without exposing the
|
|
390
|
-
* underlying secret material on the public instance surface.
|
|
391
|
-
*
|
|
392
|
-
* Called by {@link serializeSigningIdentity}; application code should
|
|
393
|
-
* prefer that public dispatcher instead of calling this directly. This
|
|
394
|
-
* helper is deliberately kept out of the `src/identity` barrel so it is
|
|
395
|
-
* not part of the package's public export surface.
|
|
396
|
-
*
|
|
397
|
-
* Secret-surface trade-off: the resulting envelope carries master-seed
|
|
398
|
-
* material — the BIP39 mnemonic (+ optional passphrase) for
|
|
399
|
-
* `MnemonicIdentity` or the raw 64-byte seed for `SeedIdentity`. A party
|
|
400
|
-
* that reads this envelope can derive any key under the HD tree, not
|
|
401
|
-
* just the key currently in use. The pre-change `SingleKey` flow only
|
|
402
|
-
* shipped one derived private key and therefore had a smaller blast
|
|
403
|
-
* radius. This is an intentional design trade to preserve class and
|
|
404
|
-
* descriptor identity across the page / service-worker boundary; the
|
|
405
|
-
* page already holds the same material so that it can re-initialize a
|
|
406
|
-
* killed worker. Transport is same-origin `postMessage` only. See the
|
|
407
|
-
* threat-model note in `src/worker/browser/README.md`.
|
|
408
|
-
*
|
|
409
|
-
* @internal
|
|
410
|
-
*/
|
|
411
|
-
export function serializeSeedOwnedSigningIdentity(identity) {
|
|
412
|
-
if (identity instanceof MnemonicIdentity) {
|
|
413
|
-
const meta = mnemonicMeta.get(identity);
|
|
414
|
-
if (!meta) {
|
|
415
|
-
throw new Error("MnemonicIdentity is missing internal secret state; was it constructed via MnemonicIdentity.fromMnemonic()?");
|
|
416
|
-
}
|
|
417
|
-
const envelope = {
|
|
418
|
-
type: "mnemonic",
|
|
419
|
-
mnemonic: meta.mnemonic,
|
|
420
|
-
descriptor: identity.descriptor,
|
|
421
|
-
};
|
|
422
|
-
if (meta.passphrase !== undefined) {
|
|
423
|
-
envelope.passphrase = meta.passphrase;
|
|
424
|
-
}
|
|
425
|
-
return envelope;
|
|
426
|
-
}
|
|
427
|
-
const seed = seedBytes.get(identity);
|
|
428
|
-
if (!seed) {
|
|
429
|
-
throw new Error("SeedIdentity is missing internal secret state; was it constructed via SeedIdentity.fromSeed() or the class constructor?");
|
|
430
|
-
}
|
|
431
|
-
return {
|
|
432
|
-
type: "seed",
|
|
433
|
-
seed: hex.encode(seed),
|
|
434
|
-
descriptor: identity.descriptor,
|
|
435
|
-
};
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Downgrade a seed-backed or descriptor-backed identity into a readonly
|
|
439
|
-
* descriptor envelope. Always produces a descriptor-only shape — secret
|
|
440
|
-
* material never crosses this path, even if the input is a signing
|
|
441
|
-
* identity.
|
|
442
|
-
*
|
|
443
|
-
* Deliberately kept out of the `src/identity` barrel; consumers should go
|
|
444
|
-
* through {@link serializeReadonlyIdentity}.
|
|
445
|
-
*
|
|
446
|
-
* @internal
|
|
447
|
-
*/
|
|
448
|
-
export function serializeSeedOwnedReadonlyIdentity(identity) {
|
|
449
|
-
return {
|
|
450
|
-
type: "readonly-descriptor",
|
|
451
|
-
descriptor: identity.descriptor,
|
|
452
|
-
};
|
|
453
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { hex } from "@scure/base";
|
|
2
|
-
import { SingleKey, ReadonlySingleKey } from "./singleKey.js";
|
|
3
|
-
import { SeedIdentity, MnemonicIdentity, ReadonlyDescriptorIdentity, serializeSeedOwnedSigningIdentity, serializeSeedOwnedReadonlyIdentity, } from "./seedIdentity.js";
|
|
4
|
-
/** Type guard — true for signing envelopes, false for readonly envelopes. */
|
|
5
|
-
export function isSigningSerialized(s) {
|
|
6
|
-
return (s.type === "single-key" || s.type === "seed" || s.type === "mnemonic");
|
|
7
|
-
}
|
|
8
|
-
function hasToHex(identity) {
|
|
9
|
-
return typeof identity.toHex === "function";
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Serialize a signing identity into a structured-clone safe envelope for
|
|
13
|
-
* transport across the service-worker boundary.
|
|
14
|
-
*
|
|
15
|
-
* Supports SDK-owned signing identities directly. For custom identities, a
|
|
16
|
-
* duck-typed `toHex()` fallback preserves compatibility with existing
|
|
17
|
-
* `SingleKey`-like implementations.
|
|
18
|
-
*/
|
|
19
|
-
export function serializeSigningIdentity(identity) {
|
|
20
|
-
// Seed-backed identities (including MnemonicIdentity, which extends
|
|
21
|
-
// SeedIdentity) delegate to the colocated helper so secret material
|
|
22
|
-
// stays behind the WeakMap-backed internal state in seedIdentity.ts.
|
|
23
|
-
if (identity instanceof SeedIdentity) {
|
|
24
|
-
return serializeSeedOwnedSigningIdentity(identity);
|
|
25
|
-
}
|
|
26
|
-
if (identity instanceof SingleKey) {
|
|
27
|
-
return { type: "single-key", privateKey: identity.toHex() };
|
|
28
|
-
}
|
|
29
|
-
if (hasToHex(identity)) {
|
|
30
|
-
return { type: "single-key", privateKey: identity.toHex() };
|
|
31
|
-
}
|
|
32
|
-
throw new Error("Unsupported signing identity: cannot serialize for service-worker transport");
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Serialize a readonly identity into a structured-clone safe envelope.
|
|
36
|
-
*
|
|
37
|
-
* Works for any `ReadonlyIdentity` via `compressedPublicKey()`. When called
|
|
38
|
-
* with a signing identity, produces a readonly envelope (never ships signing
|
|
39
|
-
* material) — callers that need to preserve signing capability across the
|
|
40
|
-
* boundary must use {@link serializeSigningIdentity}.
|
|
41
|
-
*/
|
|
42
|
-
export async function serializeReadonlyIdentity(identity) {
|
|
43
|
-
if (identity instanceof SeedIdentity ||
|
|
44
|
-
identity instanceof ReadonlyDescriptorIdentity) {
|
|
45
|
-
return serializeSeedOwnedReadonlyIdentity(identity);
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
type: "readonly-single-key",
|
|
49
|
-
publicKey: hex.encode(await identity.compressedPublicKey()),
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Rehydrate a serialized identity envelope back into an identity instance.
|
|
54
|
-
* The return type is the union of signing and readonly; use
|
|
55
|
-
* {@link isSigningSerialized} on the envelope before hydration if the caller
|
|
56
|
-
* needs to know which side it ends up on.
|
|
57
|
-
*
|
|
58
|
-
* Envelopes store the wildcard template directly (see
|
|
59
|
-
* `serializeSeedOwnedSigningIdentity` / `serializeSeedOwnedReadonlyIdentity`),
|
|
60
|
-
* so the `descriptor` field is passed straight through to the
|
|
61
|
-
* template-only factories.
|
|
62
|
-
*/
|
|
63
|
-
export function hydrateIdentity(s) {
|
|
64
|
-
switch (s.type) {
|
|
65
|
-
case "single-key":
|
|
66
|
-
return SingleKey.fromHex(s.privateKey);
|
|
67
|
-
case "readonly-single-key":
|
|
68
|
-
return ReadonlySingleKey.fromPublicKey(hex.decode(s.publicKey));
|
|
69
|
-
case "seed":
|
|
70
|
-
return SeedIdentity.fromSeed(hex.decode(s.seed), {
|
|
71
|
-
descriptor: s.descriptor,
|
|
72
|
-
});
|
|
73
|
-
case "mnemonic":
|
|
74
|
-
return MnemonicIdentity.fromMnemonic(s.mnemonic, {
|
|
75
|
-
descriptor: s.descriptor,
|
|
76
|
-
passphrase: s.passphrase,
|
|
77
|
-
});
|
|
78
|
-
case "readonly-descriptor":
|
|
79
|
-
return ReadonlyDescriptorIdentity.fromDescriptor(s.descriptor);
|
|
80
|
-
default:
|
|
81
|
-
// Belt-and-suspenders: `normalizeSerializedIdentity` already
|
|
82
|
-
// rejects unknown `type` values at the wire boundary. Without
|
|
83
|
-
// this throw, an unknown type would fall through and return
|
|
84
|
-
// undefined, which callers would then cast to Identity and
|
|
85
|
-
// crash downstream with an opaque error.
|
|
86
|
-
throw new Error(`Unknown serialized identity type: ${String(s.type)}`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
let warnedLegacyShape = false;
|
|
90
|
-
/**
|
|
91
|
-
* Accept either a modern {@link SerializedIdentity} envelope or a legacy
|
|
92
|
-
* `{ privateKey }` / `{ publicKey }` shape and normalize to a
|
|
93
|
-
* {@link SerializedIdentity}. Emits a one-time deprecation warning when a
|
|
94
|
-
* legacy shape is seen.
|
|
95
|
-
*
|
|
96
|
-
* Intended for the worker-side boundary; new page builds always emit tagged
|
|
97
|
-
* envelopes via {@link serializeSigningIdentity} /
|
|
98
|
-
* {@link serializeReadonlyIdentity}.
|
|
99
|
-
*/
|
|
100
|
-
export function normalizeSerializedIdentity(shape) {
|
|
101
|
-
if ("type" in shape) {
|
|
102
|
-
assertValidSerializedIdentity(shape);
|
|
103
|
-
return shape;
|
|
104
|
-
}
|
|
105
|
-
if (!warnedLegacyShape) {
|
|
106
|
-
warnedLegacyShape = true;
|
|
107
|
-
console.warn("[ts-sdk] Received legacy serialized identity shape " +
|
|
108
|
-
"(privateKey/publicKey). Upgrade the page build to the latest " +
|
|
109
|
-
"@arkade-os/sdk — this compatibility path will be removed in " +
|
|
110
|
-
"the next major.");
|
|
111
|
-
}
|
|
112
|
-
if ("privateKey" in shape && typeof shape.privateKey === "string") {
|
|
113
|
-
return { type: "single-key", privateKey: shape.privateKey };
|
|
114
|
-
}
|
|
115
|
-
if ("publicKey" in shape && typeof shape.publicKey === "string") {
|
|
116
|
-
return { type: "readonly-single-key", publicKey: shape.publicKey };
|
|
117
|
-
}
|
|
118
|
-
throw new Error("Unrecognized serialized identity shape");
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Runtime-validate that a tagged envelope carries the fields its variant
|
|
122
|
-
* requires. The SDK's own serializer produces well-formed envelopes; this
|
|
123
|
-
* guard exists so a malformed message (older SDK version mismatch,
|
|
124
|
-
* hand-built config, etc.) fails loudly at the wire boundary rather than
|
|
125
|
-
* with an opaque `"Cannot read properties of undefined"` deep inside a
|
|
126
|
-
* hydrator.
|
|
127
|
-
*/
|
|
128
|
-
function assertValidSerializedIdentity(s) {
|
|
129
|
-
const kind = s.type;
|
|
130
|
-
const bad = (field, expected) => {
|
|
131
|
-
throw new Error(`Malformed serialized identity ({ type: ${JSON.stringify(kind)} }): ` +
|
|
132
|
-
`missing or invalid "${field}" (expected ${expected})`);
|
|
133
|
-
};
|
|
134
|
-
const asStr = (key) => {
|
|
135
|
-
const v = s[key];
|
|
136
|
-
return typeof v === "string" ? v : bad(key, "string");
|
|
137
|
-
};
|
|
138
|
-
switch (kind) {
|
|
139
|
-
case "single-key":
|
|
140
|
-
asStr("privateKey");
|
|
141
|
-
return;
|
|
142
|
-
case "readonly-single-key":
|
|
143
|
-
asStr("publicKey");
|
|
144
|
-
return;
|
|
145
|
-
case "seed":
|
|
146
|
-
asStr("seed");
|
|
147
|
-
asStr("descriptor");
|
|
148
|
-
return;
|
|
149
|
-
case "mnemonic": {
|
|
150
|
-
asStr("mnemonic");
|
|
151
|
-
asStr("descriptor");
|
|
152
|
-
const passphrase = s.passphrase;
|
|
153
|
-
if (passphrase !== undefined && typeof passphrase !== "string") {
|
|
154
|
-
bad("passphrase", "string | undefined");
|
|
155
|
-
}
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
case "readonly-descriptor":
|
|
159
|
-
asStr("descriptor");
|
|
160
|
-
return;
|
|
161
|
-
default:
|
|
162
|
-
throw new Error(`Unknown serialized identity type: ${String(kind)}`);
|
|
163
|
-
}
|
|
164
|
-
}
|