@bsv/wallet-toolbox 2.1.0-beta.2 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/docs/client.md +561 -195
  3. package/docs/monitor.md +30 -11
  4. package/docs/services.md +58 -23
  5. package/docs/storage.md +18 -82
  6. package/docs/wallet.md +561 -195
  7. package/out/src/Setup.js +1 -4
  8. package/out/src/Setup.js.map +1 -1
  9. package/out/src/Wallet.js +1 -1
  10. package/out/src/Wallet.js.map +1 -1
  11. package/out/src/WalletPermissionsManager.d.ts +4 -2
  12. package/out/src/WalletPermissionsManager.d.ts.map +1 -1
  13. package/out/src/WalletPermissionsManager.js +127 -35
  14. package/out/src/WalletPermissionsManager.js.map +1 -1
  15. package/out/src/__tests/WalletPermissionsManager.flows.test.js +113 -1
  16. package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +1 -1
  17. package/out/src/mockchain/MockChainMigrations.js +4 -4
  18. package/out/src/mockchain/MockChainMigrations.js.map +1 -1
  19. package/out/src/sdk/WalletStorage.interfaces.d.ts +2 -0
  20. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  21. package/out/src/services/Services.d.ts +15 -0
  22. package/out/src/services/Services.d.ts.map +1 -1
  23. package/out/src/services/Services.js +59 -4
  24. package/out/src/services/Services.js.map +1 -1
  25. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +1 -1
  26. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
  27. package/out/src/storage/StorageIdb.d.ts.map +1 -1
  28. package/out/src/storage/StorageIdb.js +4 -0
  29. package/out/src/storage/StorageIdb.js.map +1 -1
  30. package/out/src/storage/StorageKnex.d.ts +8 -0
  31. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  32. package/out/src/storage/StorageKnex.js +125 -71
  33. package/out/src/storage/StorageKnex.js.map +1 -1
  34. package/out/src/storage/StorageProvider.d.ts +8 -0
  35. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  36. package/out/src/storage/StorageProvider.js +42 -0
  37. package/out/src/storage/StorageProvider.js.map +1 -1
  38. package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
  39. package/out/src/storage/methods/ListOutputsSpecOp.js +24 -7
  40. package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
  41. package/out/src/storage/methods/createAction.d.ts.map +1 -1
  42. package/out/src/storage/methods/createAction.js +69 -32
  43. package/out/src/storage/methods/createAction.js.map +1 -1
  44. package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
  45. package/out/src/storage/methods/listActionsIdb.js +17 -3
  46. package/out/src/storage/methods/listActionsIdb.js.map +1 -1
  47. package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
  48. package/out/src/storage/methods/listActionsKnex.js +28 -2
  49. package/out/src/storage/methods/listActionsKnex.js.map +1 -1
  50. package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
  51. package/out/src/storage/methods/listOutputsKnex.js +83 -50
  52. package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
  53. package/out/src/storage/remoting/StorageServer.d.ts +1 -0
  54. package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
  55. package/out/src/storage/remoting/StorageServer.js +58 -8
  56. package/out/src/storage/remoting/StorageServer.js.map +1 -1
  57. package/out/src/storage/remoting/__test/StorageClient.man.test.js +361 -96
  58. package/out/src/storage/remoting/__test/StorageClient.man.test.js.map +1 -1
  59. package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
  60. package/out/src/storage/schema/KnexMigrations.js +41 -1
  61. package/out/src/storage/schema/KnexMigrations.js.map +1 -1
  62. package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
  63. package/out/src/storage/sync/StorageMySQLDojoReader.js +4 -0
  64. package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
  65. package/out/src/utility/brc114ActionTimeLabels.d.ts +9 -0
  66. package/out/src/utility/brc114ActionTimeLabels.d.ts.map +1 -0
  67. package/out/src/utility/brc114ActionTimeLabels.js +51 -0
  68. package/out/src/utility/brc114ActionTimeLabels.js.map +1 -0
  69. package/out/src/utility/utilityHelpers.d.ts +5 -0
  70. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  71. package/out/src/utility/utilityHelpers.js +16 -2
  72. package/out/src/utility/utilityHelpers.js.map +1 -1
  73. package/package.json +3 -3
  74. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts +0 -2
  75. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts.map +0 -1
  76. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js +0 -102
  77. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js.map +0 -1
package/docs/monitor.md CHANGED
@@ -100,7 +100,7 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
100
100
  ```ts
101
101
  export interface MonitorOptions {
102
102
  chain: Chain;
103
- services: Services;
103
+ services: Services | WalletServices;
104
104
  storage: MonitorStorage;
105
105
  chaintracks: ChaintracksClientApi;
106
106
  chaintracksWithEvents?: Chaintracks;
@@ -114,7 +114,7 @@ export interface MonitorOptions {
114
114
  }
115
115
  ```
116
116
 
117
- See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services)
117
+ See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [WalletServices](./client.md#interface-walletservices)
118
118
 
119
119
  ###### Property msecsWaitPerMerkleProofServiceReq
120
120
 
@@ -176,14 +176,14 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
176
176
 
177
177
  | | |
178
178
  | --- | --- |
179
- | [Monitor](#class-monitor) | [TaskPurge](#class-taskpurge) |
180
- | [MonitorDaemon](#class-monitordaemon) | [TaskReorg](#class-taskreorg) |
181
- | [TaskCheckForProofs](#class-taskcheckforproofs) | [TaskReviewStatus](#class-taskreviewstatus) |
182
- | [TaskCheckNoSends](#class-taskchecknosends) | [TaskSendWaiting](#class-tasksendwaiting) |
183
- | [TaskClock](#class-taskclock) | [TaskSyncWhenIdle](#class-tasksyncwhenidle) |
184
- | [TaskFailAbandoned](#class-taskfailabandoned) | [TaskUnFail](#class-taskunfail) |
179
+ | [Monitor](#class-monitor) | [TaskNewHeader](#class-tasknewheader) |
180
+ | [MonitorDaemon](#class-monitordaemon) | [TaskPurge](#class-taskpurge) |
181
+ | [TaskCheckForProofs](#class-taskcheckforproofs) | [TaskReorg](#class-taskreorg) |
182
+ | [TaskCheckNoSends](#class-taskchecknosends) | [TaskReviewStatus](#class-taskreviewstatus) |
183
+ | [TaskClock](#class-taskclock) | [TaskSendWaiting](#class-tasksendwaiting) |
184
+ | [TaskFailAbandoned](#class-taskfailabandoned) | [TaskSyncWhenIdle](#class-tasksyncwhenidle) |
185
+ | [TaskMineBlock](#class-taskmineblock) | [TaskUnFail](#class-taskunfail) |
185
186
  | [TaskMonitorCallHistory](#class-taskmonitorcallhistory) | [WalletMonitorTask](#class-walletmonitortask) |
186
- | [TaskNewHeader](#class-tasknewheader) | |
187
187
 
188
188
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
189
189
 
@@ -198,7 +198,7 @@ and potentially that reorgs update proofs that were already received.
198
198
  export class Monitor {
199
199
  static createDefaultWalletMonitorOptions(chain: Chain, storage: MonitorStorage, services?: Services, chaintracks?: Chaintracks): MonitorOptions
200
200
  options: MonitorOptions;
201
- services: Services;
201
+ services: Services | WalletServices;
202
202
  chain: Chain;
203
203
  storage: MonitorStorage;
204
204
  chaintracks: ChaintracksClientApi;
@@ -249,7 +249,7 @@ export class Monitor {
249
249
  }
250
250
  ```
251
251
 
252
- See also: [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [DeactivedHeader](./monitor.md#interface-deactivedheader), [MonitorOptions](./monitor.md#interface-monitoroptions), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
252
+ See also: [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [DeactivedHeader](./monitor.md#interface-deactivedheader), [MonitorOptions](./monitor.md#interface-monitoroptions), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask), [WalletServices](./client.md#interface-walletservices)
253
253
 
254
254
  ###### Property _otherTasks
255
255
 
@@ -516,6 +516,25 @@ See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.m
516
516
 
517
517
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
518
518
 
519
+ ---
520
+ ##### Class: TaskMineBlock
521
+
522
+ ```ts
523
+ export class TaskMineBlock extends WalletMonitorTask {
524
+ static taskName = "MineBlock";
525
+ static mineNow = false;
526
+ constructor(monitor: Monitor, public triggerMsecs = 10 * Monitor.oneMinute)
527
+ trigger(nowMsecsSinceEpoch: number): {
528
+ run: boolean;
529
+ }
530
+ async runTask(): Promise<string>
531
+ }
532
+ ```
533
+
534
+ See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
535
+
536
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
537
+
519
538
  ---
520
539
  ##### Class: TaskMonitorCallHistory
521
540
 
package/docs/services.md CHANGED
@@ -4465,7 +4465,7 @@ export default class SdkWhatsOnChain implements ChainTracker {
4465
4465
  readonly apiKey: string;
4466
4466
  protected readonly URL: string;
4467
4467
  protected readonly httpClient: HttpClient;
4468
- constructor(network: "main" | "test" | "stn" = "main", config: WhatsOnChainConfig = {})
4468
+ constructor(network: "main" | "test" | "stn" | "teratest" = "main", config: WhatsOnChainConfig = {})
4469
4469
  async isValidRootForHeight(root: string, height: number): Promise<boolean>
4470
4470
  async currentHeight(): Promise<number>
4471
4471
  protected getHttpHeaders(): Record<string, string>
@@ -4477,7 +4477,7 @@ export default class SdkWhatsOnChain implements ChainTracker {
4477
4477
  Constructs an instance of the WhatsOnChain ChainTracker.
4478
4478
 
4479
4479
  ```ts
4480
- constructor(network: "main" | "test" | "stn" = "main", config: WhatsOnChainConfig = {})
4480
+ constructor(network: "main" | "test" | "stn" | "teratest" = "main", config: WhatsOnChainConfig = {})
4481
4481
  ```
4482
4482
 
4483
4483
  Argument Details
@@ -4598,6 +4598,9 @@ export class Services implements WalletServices {
4598
4598
  async getUtxoStatus(output: string, outputFormat?: GetUtxoStatusOutputFormat, outpoint?: string, useNext?: boolean, logger?: WalletLoggerInterface): Promise<GetUtxoStatusResult>
4599
4599
  async getScriptHashHistory(hash: string, useNext?: boolean, logger?: WalletLoggerInterface): Promise<GetScriptHashHistoryResult>
4600
4600
  postBeefMode: "PromiseAll" | "UntilSuccess" = "UntilSuccess";
4601
+ postBeefUntilSuccessSoftTimeoutMs = 5000;
4602
+ postBeefUntilSuccessSoftTimeoutPerKbMs = 50;
4603
+ postBeefUntilSuccessSoftTimeoutMaxMs = 30000;
4601
4604
  async postBeef(beef: Beef, txids: string[], logger?: WalletLoggerInterface): Promise<PostBeefResult[]>
4602
4605
  async getRawTx(txid: string, useNext?: boolean): Promise<GetRawTxResult>
4603
4606
  async invokeChaintracksWithRetry<R>(method: () => Promise<R>): Promise<R>
@@ -4613,6 +4616,32 @@ export class Services implements WalletServices {
4613
4616
 
4614
4617
  See also: [ARC](./services.md#class-arc), [Bitails](./services.md#class-bitails), [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [FiatCurrencyCode](./client.md#type-fiatcurrencycode), [FiatExchangeRates](./client.md#interface-fiatexchangerates), [GetMerklePathResult](./client.md#interface-getmerklepathresult), [GetMerklePathService](./client.md#type-getmerklepathservice), [GetRawTxResult](./client.md#interface-getrawtxresult), [GetRawTxService](./client.md#type-getrawtxservice), [GetScriptHashHistoryResult](./client.md#interface-getscripthashhistoryresult), [GetScriptHashHistoryService](./client.md#type-getscripthashhistoryservice), [GetStatusForTxidsResult](./client.md#interface-getstatusfortxidsresult), [GetStatusForTxidsService](./client.md#type-getstatusfortxidsservice), [GetUtxoStatusOutputFormat](./client.md#type-getutxostatusoutputformat), [GetUtxoStatusResult](./client.md#interface-getutxostatusresult), [GetUtxoStatusService](./client.md#type-getutxostatusservice), [PostBeefResult](./client.md#interface-postbeefresult), [PostBeefService](./client.md#type-postbeefservice), [ServiceCollection](./services.md#class-servicecollection), [ServicesCallHistory](./client.md#type-servicescallhistory), [TableOutput](./storage.md#interface-tableoutput), [UpdateFiatExchangeRateService](./client.md#type-updatefiatexchangerateservice), [WalletServices](./client.md#interface-walletservices), [WalletServicesOptions](./client.md#interface-walletservicesoptions), [WhatsOnChain](./services.md#class-whatsonchain), [getBeefForTxid](./services.md#function-getbeeffortxid), [logger](./client.md#variable-logger)
4615
4618
 
4619
+ ###### Property postBeefUntilSuccessSoftTimeoutMaxMs
4620
+
4621
+ Upper bound for adaptive soft-timeout in `UntilSuccess` mode.
4622
+
4623
+ ```ts
4624
+ postBeefUntilSuccessSoftTimeoutMaxMs = 30000
4625
+ ```
4626
+
4627
+ ###### Property postBeefUntilSuccessSoftTimeoutMs
4628
+
4629
+ Soft timeout used for each provider call in `UntilSuccess` mode.
4630
+ This bounds request latency when a provider hangs before failover.
4631
+
4632
+ ```ts
4633
+ postBeefUntilSuccessSoftTimeoutMs = 5000
4634
+ ```
4635
+
4636
+ ###### Property postBeefUntilSuccessSoftTimeoutPerKbMs
4637
+
4638
+ Additional soft-timeout budget (ms) per KiB of serialized Beef payload.
4639
+ Helps avoid false timeout failover on legitimately large submissions.
4640
+
4641
+ ```ts
4642
+ postBeefUntilSuccessSoftTimeoutPerKbMs = 50
4643
+ ```
4644
+
4616
4645
  ###### Method hashOutputScript
4617
4646
 
4618
4647
  ```ts
@@ -5294,27 +5323,33 @@ Returns the genesis block for the specified chain.
5294
5323
 
5295
5324
  ```ts
5296
5325
  export function genesisHeader(chain: Chain): BlockHeader {
5297
- return chain === "main"
5298
- ? {
5299
- version: 1,
5300
- previousHash: "0000000000000000000000000000000000000000000000000000000000000000",
5301
- merkleRoot: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
5302
- time: 1231006505,
5303
- bits: 486604799,
5304
- nonce: 2083236893,
5305
- height: 0,
5306
- hash: "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
5307
- }
5308
- : {
5309
- version: 1,
5310
- previousHash: "0000000000000000000000000000000000000000000000000000000000000000",
5311
- merkleRoot: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
5312
- time: 1296688602,
5313
- bits: 486604799,
5314
- nonce: 414098458,
5315
- height: 0,
5316
- hash: "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"
5317
- };
5326
+ switch (chain) {
5327
+ case "main":
5328
+ return {
5329
+ version: 1,
5330
+ previousHash: "0000000000000000000000000000000000000000000000000000000000000000",
5331
+ merkleRoot: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
5332
+ time: 1231006505,
5333
+ bits: 486604799,
5334
+ nonce: 2083236893,
5335
+ height: 0,
5336
+ hash: "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
5337
+ };
5338
+ case "test":
5339
+ case "teratest":
5340
+ return {
5341
+ version: 1,
5342
+ previousHash: "0000000000000000000000000000000000000000000000000000000000000000",
5343
+ merkleRoot: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
5344
+ time: 1296688602,
5345
+ bits: 486604799,
5346
+ nonce: 414098458,
5347
+ height: 0,
5348
+ hash: "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"
5349
+ };
5350
+ case "mock":
5351
+ throw new Error(`genesisHeader does not support 'mock' chain. Mock chain generates its own genesis block.`);
5352
+ }
5318
5353
  }
5319
5354
  ```
5320
5355
 
package/docs/storage.md CHANGED
@@ -3570,87 +3570,15 @@ export class StorageKnex extends StorageProvider implements WalletStorageProvide
3570
3570
  log: string;
3571
3571
  }>
3572
3572
  async countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number>
3573
- async allocateChangeInput(userId: number, basketId: number, targetSatoshis: number, exactSatoshis: number | undefined, excludeSending: boolean, transactionId: number): Promise<TableOutput | undefined> {
3574
- const status: TransactionStatus[] = ["completed", "unproven"];
3575
- if (!excludeSending)
3576
- status.push("sending");
3577
- const statusText = status.map(s => `'${s}'`).join(",");
3578
- const r: TableOutput | undefined = await this.knex.transaction(async (trx) => {
3579
- const txStatusCondition = `AND (SELECT status FROM transactions WHERE outputs.transactionId = transactions.transactionId) in (${statusText})`;
3580
- let outputId: number | undefined;
3581
- const setOutputId = async (rawQuery: string): Promise<void> => {
3582
- let oidr = await trx.raw(rawQuery);
3583
- outputId = undefined;
3584
- if (!oidr["outputId"] && oidr.length > 0)
3585
- oidr = oidr[0];
3586
- if (!oidr["outputId"] && oidr.length > 0)
3587
- oidr = oidr[0];
3588
- if (oidr["outputId"])
3589
- outputId = Number(oidr["outputId"]);
3590
- };
3591
- if (exactSatoshis !== undefined) {
3592
- await setOutputId(`
3593
- SELECT outputId
3594
- FROM outputs
3595
- WHERE userId = ${userId}
3596
- AND spendable = 1
3597
- AND basketId = ${basketId}
3598
- ${txStatusCondition}
3599
- AND satoshis = ${exactSatoshis}
3600
- LIMIT 1;
3601
- `);
3602
- }
3603
- if (outputId === undefined) {
3604
- await setOutputId(`
3605
- SELECT outputId
3606
- FROM outputs
3607
- WHERE userId = ${userId}
3608
- AND spendable = 1
3609
- AND basketId = ${basketId}
3610
- ${txStatusCondition}
3611
- AND satoshis - ${targetSatoshis} = (
3612
- SELECT MIN(satoshis - ${targetSatoshis})
3613
- FROM outputs
3614
- WHERE userId = ${userId}
3615
- AND spendable = 1
3616
- AND basketId = ${basketId}
3617
- ${txStatusCondition}
3618
- AND satoshis - ${targetSatoshis} >= 0
3619
- )
3620
- LIMIT 1;
3621
- `);
3622
- }
3623
- if (outputId === undefined) {
3624
- await setOutputId(`
3625
- SELECT outputId
3626
- FROM outputs
3627
- WHERE userId = ${userId}
3628
- AND spendable = 1
3629
- AND basketId = ${basketId}
3630
- ${txStatusCondition}
3631
- AND satoshis - ${targetSatoshis} = (
3632
- SELECT MAX(satoshis - ${targetSatoshis})
3633
- FROM outputs
3634
- WHERE userId = ${userId}
3635
- AND spendable = 1
3636
- AND basketId = ${basketId}
3637
- ${txStatusCondition}
3638
- AND satoshis - ${targetSatoshis} < 0
3639
- )
3640
- LIMIT 1;
3641
- `);
3642
- }
3643
- if (outputId === undefined)
3644
- return undefined;
3645
- await this.updateOutput(outputId, {
3646
- spendable: false,
3647
- spentBy: transactionId
3648
- }, trx);
3649
- const r = verifyTruthy(await this.findOutputById(outputId, trx));
3650
- return r;
3651
- });
3652
- return r;
3653
- }
3573
+ override async findOutputsByIds(outputIds: number[], trx?: TrxToken): Promise<Record<number, TableOutput>>
3574
+ override async findOutputsByOutpoints(userId: number, outpoints: Array<{
3575
+ txid: string;
3576
+ vout: number;
3577
+ }>, trx?: TrxToken): Promise<Record<string, TableOutput>>
3578
+ override async findOrInsertOutputBasketsBulk(userId: number, names: string[], trx?: TrxToken): Promise<Record<string, TableOutputBasket>>
3579
+ override async findOrInsertOutputTagsBulk(userId: number, tags: string[], trx?: TrxToken): Promise<Record<string, TableOutputTag>>
3580
+ override async sumSpendableSatoshisInBasket(userId: number, basketId: number, excludeSending: boolean, trx?: TrxToken): Promise<number>
3581
+ async allocateChangeInput(userId: number, basketId: number, targetSatoshis: number, exactSatoshis: number | undefined, excludeSending: boolean, transactionId: number): Promise<TableOutput | undefined>
3654
3582
  validateEntity<T extends EntityTimeStamp>(entity: T, dateFields?: string[], booleanFields?: string[]): T
3655
3583
  validateEntities<T extends EntityTimeStamp>(entities: T[], dateFields?: string[], booleanFields?: string[]): T[]
3656
3584
  async adminStats(adminIdentityKey: string): Promise<AdminStatsResult> {
@@ -3815,7 +3743,7 @@ select
3815
3743
  }
3816
3744
  ```
3817
3745
 
3818
- See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [DBType](./storage.md#type-dbtype), [EntityTimeStamp](./client.md#interface-entitytimestamp), [FindCertificateFieldsArgs](./client.md#interface-findcertificatefieldsargs), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindCommissionsArgs](./client.md#interface-findcommissionsargs), [FindForUserSincePagedArgs](./client.md#interface-findforusersincepagedargs), [FindMonitorEventsArgs](./client.md#interface-findmonitoreventsargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindOutputTagsArgs](./client.md#interface-findoutputtagsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [FindPartialSincePagedArgs](./client.md#interface-findpartialsincepagedargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindSyncStatesArgs](./client.md#interface-findsyncstatesargs), [FindTransactionsArgs](./client.md#interface-findtransactionsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [FindTxLabelsArgs](./client.md#interface-findtxlabelsargs), [FindUsersArgs](./client.md#interface-findusersargs), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [ServicesCallHistory](./client.md#type-servicescallhistory), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSettings](./storage.md#interface-tablesettings), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [TransactionStatus](./client.md#type-transactionstatus), [TrxToken](./client.md#interface-trxtoken), [WERR_NOT_IMPLEMENTED](./client.md#class-werr_not_implemented), [WalletStorageProvider](./client.md#interface-walletstorageprovider), [listActions](./storage.md#function-listactions), [listOutputs](./storage.md#function-listoutputs), [purgeData](./storage.md#function-purgedata), [reviewStatus](./storage.md#function-reviewstatus), [verifyOneOrNone](./client.md#function-verifyoneornone), [verifyTruthy](./client.md#function-verifytruthy)
3746
+ See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [DBType](./storage.md#type-dbtype), [EntityTimeStamp](./client.md#interface-entitytimestamp), [FindCertificateFieldsArgs](./client.md#interface-findcertificatefieldsargs), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindCommissionsArgs](./client.md#interface-findcommissionsargs), [FindForUserSincePagedArgs](./client.md#interface-findforusersincepagedargs), [FindMonitorEventsArgs](./client.md#interface-findmonitoreventsargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindOutputTagsArgs](./client.md#interface-findoutputtagsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [FindPartialSincePagedArgs](./client.md#interface-findpartialsincepagedargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindSyncStatesArgs](./client.md#interface-findsyncstatesargs), [FindTransactionsArgs](./client.md#interface-findtransactionsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [FindTxLabelsArgs](./client.md#interface-findtxlabelsargs), [FindUsersArgs](./client.md#interface-findusersargs), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [ServicesCallHistory](./client.md#type-servicescallhistory), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSettings](./storage.md#interface-tablesettings), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [TrxToken](./client.md#interface-trxtoken), [WERR_NOT_IMPLEMENTED](./client.md#class-werr_not_implemented), [WalletStorageProvider](./client.md#interface-walletstorageprovider), [listActions](./storage.md#function-listactions), [listOutputs](./storage.md#function-listoutputs), [purgeData](./storage.md#function-purgedata), [reviewStatus](./storage.md#function-reviewstatus), [verifyOneOrNone](./client.md#function-verifyoneornone)
3819
3747
 
3820
3748
  ###### Method allocateChangeInput
3821
3749
 
@@ -3937,6 +3865,14 @@ export abstract class StorageProvider extends StorageReaderWriter implements Wal
3937
3865
  abstract listActions(auth: AuthId, args: Validation.ValidListActionsArgs): Promise<ListActionsResult>;
3938
3866
  abstract listOutputs(auth: AuthId, args: Validation.ValidListOutputsArgs): Promise<ListOutputsResult>;
3939
3867
  abstract countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number>;
3868
+ async findOutputsByIds(outputIds: number[], trx?: TrxToken): Promise<Record<number, TableOutput>>
3869
+ async findOutputsByOutpoints(userId: number, outpoints: Array<{
3870
+ txid: string;
3871
+ vout: number;
3872
+ }>, trx?: TrxToken): Promise<Record<string, TableOutput>>
3873
+ async findOrInsertOutputBasketsBulk(userId: number, names: string[], trx?: TrxToken): Promise<Record<string, TableOutputBasket>>
3874
+ async findOrInsertOutputTagsBulk(userId: number, tags: string[], trx?: TrxToken): Promise<Record<string, TableOutputTag>>
3875
+ async sumSpendableSatoshisInBasket(userId: number, basketId: number, excludeSending: boolean, trx?: TrxToken): Promise<number>
3940
3876
  abstract findCertificatesAuth(auth: AuthId, args: FindCertificatesArgs): Promise<TableCertificateX[]>;
3941
3877
  abstract findOutputBasketsAuth(auth: AuthId, args: FindOutputBasketsArgs): Promise<TableOutputBasket[]>;
3942
3878
  abstract findOutputsAuth(auth: AuthId, args: FindOutputsArgs): Promise<TableOutput[]>;