@bsv/wallet-toolbox 2.1.0-beta.3 → 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.
- package/CHANGELOG.md +27 -1
- package/docs/client.md +561 -195
- package/docs/monitor.md +30 -11
- package/docs/services.md +58 -23
- package/docs/storage.md +18 -82
- package/docs/wallet.md +561 -195
- package/out/src/Setup.js +1 -4
- package/out/src/Setup.js.map +1 -1
- package/out/src/WalletPermissionsManager.d.ts +4 -2
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +127 -35
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.flows.test.js +113 -1
- package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +1 -1
- package/out/src/mockchain/MockChainMigrations.js +1 -1
- package/out/src/mockchain/MockChainMigrations.js.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +2 -0
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/services/Services.d.ts +15 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +59 -4
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +4 -0
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +8 -0
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +125 -71
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +8 -0
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +42 -0
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.js +24 -7
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +69 -32
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsIdb.js +17 -3
- package/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsKnex.js +28 -2
- package/out/src/storage/methods/listActionsKnex.js.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.js +83 -50
- package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts +1 -0
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +58 -8
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/remoting/__test/StorageClient.man.test.js +361 -96
- package/out/src/storage/remoting/__test/StorageClient.man.test.js.map +1 -1
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +41 -1
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.js +4 -0
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
- package/out/src/utility/brc114ActionTimeLabels.d.ts +9 -0
- package/out/src/utility/brc114ActionTimeLabels.d.ts.map +1 -0
- package/out/src/utility/brc114ActionTimeLabels.js +51 -0
- package/out/src/utility/brc114ActionTimeLabels.js.map +1 -0
- package/package.json +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts +0 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.d.ts.map +0 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js +0 -102
- 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) | [
|
|
180
|
-
| [MonitorDaemon](#class-monitordaemon) | [
|
|
181
|
-
| [TaskCheckForProofs](#class-taskcheckforproofs) | [
|
|
182
|
-
| [TaskCheckNoSends](#class-taskchecknosends) | [
|
|
183
|
-
| [TaskClock](#class-taskclock) | [
|
|
184
|
-
| [TaskFailAbandoned](#class-taskfailabandoned) | [
|
|
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
|
-
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
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
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
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), [
|
|
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[]>;
|