@1sat/wallet 0.0.3 → 0.0.5
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/dist/OneSatWallet.d.ts +222 -0
- package/dist/OneSatWallet.d.ts.map +1 -0
- package/dist/OneSatWallet.js +754 -0
- package/dist/OneSatWallet.js.map +1 -0
- package/dist/address-sync/AddressManager.d.ts +86 -0
- package/dist/address-sync/AddressManager.d.ts.map +1 -0
- package/dist/address-sync/AddressManager.js +108 -0
- package/dist/address-sync/AddressManager.js.map +1 -0
- package/dist/address-sync/AddressSyncManager.d.ts +204 -0
- package/dist/address-sync/AddressSyncManager.d.ts.map +1 -0
- package/dist/address-sync/AddressSyncManager.js +525 -0
- package/dist/address-sync/AddressSyncManager.js.map +1 -0
- package/dist/address-sync/AddressSyncQueueIdb.d.ts +31 -0
- package/dist/address-sync/AddressSyncQueueIdb.d.ts.map +1 -0
- package/dist/address-sync/AddressSyncQueueIdb.js +356 -0
- package/dist/address-sync/AddressSyncQueueIdb.js.map +1 -0
- package/dist/address-sync/AddressSyncQueueSqlite.d.ts +55 -0
- package/dist/address-sync/AddressSyncQueueSqlite.d.ts.map +1 -0
- package/dist/address-sync/AddressSyncQueueSqlite.js +198 -0
- package/dist/address-sync/AddressSyncQueueSqlite.js.map +1 -0
- package/dist/address-sync/index.d.ts +8 -0
- package/dist/address-sync/index.d.ts.map +1 -0
- package/dist/address-sync/index.js +5 -0
- package/dist/address-sync/index.js.map +1 -0
- package/dist/backup/FileBackupProvider.d.ts +97 -0
- package/dist/backup/FileBackupProvider.d.ts.map +1 -0
- package/dist/backup/FileBackupProvider.js +185 -0
- package/dist/backup/FileBackupProvider.js.map +1 -0
- package/dist/backup/FileRestoreReader.d.ts +59 -0
- package/dist/backup/FileRestoreReader.d.ts.map +1 -0
- package/dist/backup/FileRestoreReader.js +89 -0
- package/dist/backup/FileRestoreReader.js.map +1 -0
- package/dist/backup/index.d.ts +6 -0
- package/dist/backup/index.d.ts.map +1 -0
- package/dist/backup/index.js +5 -0
- package/dist/backup/index.js.map +1 -0
- package/dist/backup/types.d.ts +32 -0
- package/dist/backup/types.d.ts.map +1 -0
- package/dist/backup/types.js +2 -0
- package/dist/backup/types.js.map +1 -0
- package/dist/cwi/chrome.d.ts +12 -0
- package/dist/cwi/chrome.d.ts.map +1 -0
- package/dist/cwi/chrome.js +44 -0
- package/dist/cwi/chrome.js.map +1 -0
- package/dist/cwi/event.d.ts +12 -0
- package/dist/cwi/event.d.ts.map +1 -0
- package/dist/cwi/event.js +39 -0
- package/dist/cwi/event.js.map +1 -0
- package/dist/cwi/factory.d.ts +15 -0
- package/dist/cwi/factory.d.ts.map +1 -0
- package/dist/cwi/factory.js +45 -0
- package/dist/cwi/factory.js.map +1 -0
- package/dist/cwi/index.d.ts +12 -0
- package/dist/cwi/index.d.ts.map +1 -0
- package/dist/cwi/index.js +12 -0
- package/dist/cwi/index.js.map +1 -0
- package/dist/cwi/types.d.ts +40 -0
- package/dist/cwi/types.d.ts.map +1 -0
- package/dist/cwi/types.js +40 -0
- package/dist/cwi/types.js.map +1 -0
- package/dist/index.d.ts +17 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -21
- package/dist/index.js.map +1 -1
- package/dist/indexers/Bsv21Indexer.d.ts +36 -0
- package/dist/indexers/Bsv21Indexer.d.ts.map +1 -0
- package/dist/indexers/Bsv21Indexer.js +232 -0
- package/dist/indexers/Bsv21Indexer.js.map +1 -0
- package/dist/indexers/CosignIndexer.d.ts +14 -0
- package/dist/indexers/CosignIndexer.d.ts.map +1 -0
- package/dist/indexers/CosignIndexer.js +27 -0
- package/dist/indexers/CosignIndexer.js.map +1 -0
- package/dist/indexers/FundIndexer.d.ts +20 -0
- package/dist/indexers/FundIndexer.d.ts.map +1 -0
- package/dist/indexers/FundIndexer.js +65 -0
- package/dist/indexers/FundIndexer.js.map +1 -0
- package/dist/indexers/InscriptionIndexer.d.ts +33 -0
- package/dist/indexers/InscriptionIndexer.d.ts.map +1 -0
- package/dist/indexers/InscriptionIndexer.js +116 -0
- package/dist/indexers/InscriptionIndexer.js.map +1 -0
- package/dist/indexers/LockIndexer.d.ts +11 -0
- package/dist/indexers/LockIndexer.d.ts.map +1 -0
- package/dist/indexers/LockIndexer.js +44 -0
- package/dist/indexers/LockIndexer.js.map +1 -0
- package/dist/indexers/MapIndexer.d.ts +14 -0
- package/dist/indexers/MapIndexer.d.ts.map +1 -0
- package/dist/indexers/MapIndexer.js +65 -0
- package/dist/indexers/MapIndexer.js.map +1 -0
- package/dist/indexers/OpNSIndexer.d.ts +10 -0
- package/dist/indexers/OpNSIndexer.d.ts.map +1 -0
- package/dist/indexers/OpNSIndexer.js +39 -0
- package/dist/indexers/OpNSIndexer.js.map +1 -0
- package/dist/indexers/OrdLockIndexer.d.ts +18 -0
- package/dist/indexers/OrdLockIndexer.d.ts.map +1 -0
- package/dist/indexers/OrdLockIndexer.js +65 -0
- package/dist/indexers/OrdLockIndexer.js.map +1 -0
- package/dist/indexers/OriginIndexer.d.ts +38 -0
- package/dist/indexers/OriginIndexer.d.ts.map +1 -0
- package/dist/indexers/OriginIndexer.js +241 -0
- package/dist/indexers/OriginIndexer.js.map +1 -0
- package/dist/indexers/Outpoint.d.ts +11 -0
- package/dist/indexers/Outpoint.d.ts.map +1 -0
- package/dist/indexers/Outpoint.js +62 -0
- package/dist/indexers/Outpoint.js.map +1 -0
- package/dist/indexers/SigmaIndexer.d.ts +29 -0
- package/dist/indexers/SigmaIndexer.d.ts.map +1 -0
- package/dist/indexers/SigmaIndexer.js +134 -0
- package/dist/indexers/SigmaIndexer.js.map +1 -0
- package/dist/indexers/index.d.ts +14 -0
- package/dist/indexers/index.d.ts.map +1 -0
- package/dist/indexers/index.js +14 -0
- package/dist/indexers/index.js.map +1 -0
- package/dist/indexers/parseAddress.d.ts +10 -0
- package/dist/indexers/parseAddress.d.ts.map +1 -0
- package/dist/indexers/parseAddress.js +25 -0
- package/dist/indexers/parseAddress.js.map +1 -0
- package/dist/signers/ReadOnlySigner.d.ts +16 -0
- package/dist/signers/ReadOnlySigner.d.ts.map +1 -0
- package/dist/signers/ReadOnlySigner.js +48 -0
- package/dist/signers/ReadOnlySigner.js.map +1 -0
- package/package.json +8 -6
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Indexer, } from '@1sat/types';
|
|
2
|
+
import { BSM, BigNumber, Hash, OP, Script, Signature, Utils } from '@bsv/sdk';
|
|
3
|
+
export class SigmaIndexer extends Indexer {
|
|
4
|
+
owners;
|
|
5
|
+
network;
|
|
6
|
+
tag = 'sigma';
|
|
7
|
+
name = 'Sigma';
|
|
8
|
+
constructor(owners = new Set(), network = 'mainnet') {
|
|
9
|
+
super(owners, network);
|
|
10
|
+
this.owners = owners;
|
|
11
|
+
this.network = network;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Parse extracts raw sigma protocol data without validation.
|
|
15
|
+
* Validation requires ctx.spends and is done in summarize().
|
|
16
|
+
*/
|
|
17
|
+
async parse(txo) {
|
|
18
|
+
const script = txo.output.lockingScript;
|
|
19
|
+
const vout = txo.outpoint.vout;
|
|
20
|
+
let retPos = 0;
|
|
21
|
+
const sigmas = [];
|
|
22
|
+
for (let i = retPos + 1; i < script.chunks.length; i++) {
|
|
23
|
+
const chunk = script.chunks[i];
|
|
24
|
+
if (!retPos && chunk.op === OP.OP_RETURN) {
|
|
25
|
+
retPos = i;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (!retPos || chunk.data?.length !== 1 || chunk.data[0] !== 0x7c) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (Utils.toUTF8(script.chunks[++i]?.data || []) !== 'SIGMA') {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const sigma = {
|
|
35
|
+
algorithm: script.chunks[++i]?.data
|
|
36
|
+
? Utils.toUTF8(script.chunks[i].data || [])
|
|
37
|
+
: '',
|
|
38
|
+
address: script.chunks[++i]?.data
|
|
39
|
+
? Utils.toUTF8(script.chunks[i].data || [])
|
|
40
|
+
: '',
|
|
41
|
+
signature: script.chunks[++i]?.data || [],
|
|
42
|
+
vin: script.chunks[++i]?.data
|
|
43
|
+
? Number.parseInt(Utils.toUTF8(script.chunks[i].data || []))
|
|
44
|
+
: -1,
|
|
45
|
+
valid: false, // Will be validated in summarize()
|
|
46
|
+
};
|
|
47
|
+
// Use vout as default vin if not specified
|
|
48
|
+
if (sigma.vin === -1)
|
|
49
|
+
sigma.vin = vout;
|
|
50
|
+
sigmas.push(sigma);
|
|
51
|
+
}
|
|
52
|
+
if (!sigmas.length)
|
|
53
|
+
return;
|
|
54
|
+
return { data: sigmas, tags: [] };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validate all sigma signatures against ctx.spends.
|
|
58
|
+
*/
|
|
59
|
+
async summarize(ctx, _isBroadcasted) {
|
|
60
|
+
for (const txo of ctx.txos) {
|
|
61
|
+
const sigmaData = txo.data[this.tag];
|
|
62
|
+
if (!sigmaData)
|
|
63
|
+
continue;
|
|
64
|
+
const sigmas = sigmaData.data;
|
|
65
|
+
const script = txo.output.lockingScript;
|
|
66
|
+
for (const sigma of sigmas) {
|
|
67
|
+
// Find the dataPos by re-scanning for this sigma
|
|
68
|
+
const dataPos = this.findSigmaDataPos(script, sigma);
|
|
69
|
+
if (dataPos === -1)
|
|
70
|
+
continue;
|
|
71
|
+
// Get the spend for this sigma's vin
|
|
72
|
+
const spend = ctx.spends[sigma.vin];
|
|
73
|
+
if (!spend)
|
|
74
|
+
continue;
|
|
75
|
+
const bw = new Utils.Writer();
|
|
76
|
+
bw.write(Utils.toArray(spend.outpoint.txid, 'hex'));
|
|
77
|
+
bw.writeUInt32LE(spend.outpoint.vout);
|
|
78
|
+
const inputHash = Hash.sha256(bw.toArray());
|
|
79
|
+
const dataScript = new Script();
|
|
80
|
+
dataScript.chunks = script.chunks.slice(0, dataPos);
|
|
81
|
+
const outputHash = Hash.sha256(dataScript.toBinary());
|
|
82
|
+
const msgHash = Hash.sha256(inputHash.concat(outputHash));
|
|
83
|
+
const signature = Signature.fromCompact(sigma.signature);
|
|
84
|
+
for (let recovery = 0; recovery < 4; recovery++) {
|
|
85
|
+
try {
|
|
86
|
+
const publicKey = signature.RecoverPublicKey(recovery, new BigNumber(BSM.magicHash(msgHash)));
|
|
87
|
+
const sigFitsPubkey = BSM.verify(msgHash, signature, publicKey);
|
|
88
|
+
const pubkeyAddress = publicKey.toAddress(this.network === 'mainnet' ? 'mainnet' : 'testnet');
|
|
89
|
+
if (sigFitsPubkey && pubkeyAddress === sigma.address) {
|
|
90
|
+
sigma.valid = true;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// try next recovery
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Find the data position for a sigma in the script (position before the pipe separator).
|
|
104
|
+
*/
|
|
105
|
+
findSigmaDataPos(script, targetSigma) {
|
|
106
|
+
let retPos = 0;
|
|
107
|
+
for (let i = 1; i < script.chunks.length; i++) {
|
|
108
|
+
const chunk = script.chunks[i];
|
|
109
|
+
if (!retPos && chunk.op === OP.OP_RETURN) {
|
|
110
|
+
retPos = i;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (!retPos || chunk.data?.length !== 1 || chunk.data[0] !== 0x7c) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (Utils.toUTF8(script.chunks[i + 1]?.data || []) !== 'SIGMA') {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const dataPos = i;
|
|
120
|
+
// Check if this is the target sigma by comparing address and signature
|
|
121
|
+
const address = script.chunks[i + 3]?.data
|
|
122
|
+
? Utils.toUTF8(script.chunks[i + 3].data || [])
|
|
123
|
+
: '';
|
|
124
|
+
const sig = script.chunks[i + 4]?.data || [];
|
|
125
|
+
if (address === targetSigma.address &&
|
|
126
|
+
sig.length === targetSigma.signature.length &&
|
|
127
|
+
sig.every((b, idx) => b === targetSigma.signature[idx])) {
|
|
128
|
+
return dataPos;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return -1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=SigmaIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SigmaIndexer.js","sourceRoot":"","sources":["../../src/indexers/SigmaIndexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Indexer, type IndexData, type IndexSummary, type InternalizeProtocol, type ParseContext, type ParseResult, type Txo, } from '@1sat/types';
|
|
2
|
+
export { Outpoint } from './Outpoint';
|
|
3
|
+
export { parseAddress } from './parseAddress';
|
|
4
|
+
export { FundIndexer } from './FundIndexer';
|
|
5
|
+
export { LockIndexer } from './LockIndexer';
|
|
6
|
+
export { InscriptionIndexer, type File, type Inscription, } from './InscriptionIndexer';
|
|
7
|
+
export { SigmaIndexer, type Sigma } from './SigmaIndexer';
|
|
8
|
+
export { MapIndexer } from './MapIndexer';
|
|
9
|
+
export { OriginIndexer, type Origin } from './OriginIndexer';
|
|
10
|
+
export { Bsv21Indexer, deriveFundAddress, type Bsv21 } from './Bsv21Indexer';
|
|
11
|
+
export { OrdLockIndexer, Listing } from './OrdLockIndexer';
|
|
12
|
+
export { OpNSIndexer } from './OpNSIndexer';
|
|
13
|
+
export { CosignIndexer, type CosignData } from './CosignIndexer';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,OAAO,EACP,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,GAAG,GACR,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EACN,kBAAkB,EAClB,KAAK,IAAI,EACT,KAAK,WAAW,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Indexer, } from '@1sat/types';
|
|
2
|
+
export { Outpoint } from './Outpoint';
|
|
3
|
+
export { parseAddress } from './parseAddress';
|
|
4
|
+
export { FundIndexer } from './FundIndexer';
|
|
5
|
+
export { LockIndexer } from './LockIndexer';
|
|
6
|
+
export { InscriptionIndexer, } from './InscriptionIndexer';
|
|
7
|
+
export { SigmaIndexer } from './SigmaIndexer';
|
|
8
|
+
export { MapIndexer } from './MapIndexer';
|
|
9
|
+
export { OriginIndexer } from './OriginIndexer';
|
|
10
|
+
export { Bsv21Indexer, deriveFundAddress } from './Bsv21Indexer';
|
|
11
|
+
export { OrdLockIndexer, Listing } from './OrdLockIndexer';
|
|
12
|
+
export { OpNSIndexer } from './OpNSIndexer';
|
|
13
|
+
export { CosignIndexer } from './CosignIndexer';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/indexers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,OAAO,GAOP,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EACN,kBAAkB,GAGlB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAe,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAc,MAAM,gBAAgB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAmB,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Script } from '@bsv/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a P2PKH address from a locking script
|
|
4
|
+
* @param script - The locking script to parse
|
|
5
|
+
* @param offset - Chunk offset (default 0)
|
|
6
|
+
* @param network - Network type for address encoding
|
|
7
|
+
* @returns Base58Check encoded address or empty string if not P2PKH
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseAddress(script: Script, offset?: number, network?: 'mainnet' | 'testnet'): string;
|
|
10
|
+
//# sourceMappingURL=parseAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseAddress.d.ts","sourceRoot":"","sources":["../../src/indexers/parseAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,MAAM,EAAS,MAAM,UAAU,CAAA;AAEjD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,EACV,OAAO,GAAE,SAAS,GAAG,SAAqB,GACxC,MAAM,CASR"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { OP, Utils } from '@bsv/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a P2PKH address from a locking script
|
|
4
|
+
* @param script - The locking script to parse
|
|
5
|
+
* @param offset - Chunk offset (default 0)
|
|
6
|
+
* @param network - Network type for address encoding
|
|
7
|
+
* @returns Base58Check encoded address or empty string if not P2PKH
|
|
8
|
+
*/
|
|
9
|
+
export function parseAddress(script, offset = 0, network = 'mainnet') {
|
|
10
|
+
if (script.chunks[0 + offset]?.op !== OP.OP_DUP)
|
|
11
|
+
return '';
|
|
12
|
+
if (script.chunks[1 + offset]?.op !== OP.OP_HASH160)
|
|
13
|
+
return '';
|
|
14
|
+
if (script.chunks[2 + offset]?.data?.length !== 20)
|
|
15
|
+
return '';
|
|
16
|
+
if (script.chunks[3 + offset]?.op !== OP.OP_EQUALVERIFY)
|
|
17
|
+
return '';
|
|
18
|
+
if (script.chunks[4 + offset]?.op !== OP.OP_CHECKSIG)
|
|
19
|
+
return '';
|
|
20
|
+
const data = script.chunks[2 + offset].data;
|
|
21
|
+
if (!data)
|
|
22
|
+
return '';
|
|
23
|
+
return Utils.toBase58Check(data, network === 'mainnet' ? [0] : [111]);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=parseAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseAddress.js","sourceRoot":"","sources":["../../src/indexers/parseAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,KAAK,EAAE,MAAM,UAAU,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC3B,MAAc,EACd,MAAM,GAAG,CAAC,EACV,UAAiC,SAAS;IAE1C,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU;QAAE,OAAO,EAAE,CAAA;IAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IAC7D,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,cAAc;QAAE,OAAO,EAAE,CAAA;IAClE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW;QAAE,OAAO,EAAE,CAAA;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAA;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AACtE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Counterparty, type KeyDeriverApi, type PrivateKey, type WalletProtocol } from '@bsv/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* A read-only KeyDeriver that exposes an identity key but throws on any signing/derivation operation.
|
|
4
|
+
* Used when the wallet is instantiated with only a public key.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ReadOnlySigner implements KeyDeriverApi {
|
|
7
|
+
readonly identityKey: string;
|
|
8
|
+
readonly rootKey: PrivateKey;
|
|
9
|
+
constructor(identityPublicKey: string);
|
|
10
|
+
derivePrivateKey(_protocolID: WalletProtocol, _keyID: string, _counterparty: Counterparty): never;
|
|
11
|
+
derivePublicKey(_protocolID: WalletProtocol, _keyID: string, _counterparty: Counterparty, _forSelf?: boolean): never;
|
|
12
|
+
deriveSymmetricKey(_protocolID: WalletProtocol, _keyID: string, _counterparty: Counterparty): never;
|
|
13
|
+
revealCounterpartySecret(_counterparty: Counterparty): never;
|
|
14
|
+
revealSpecificSecret(_counterparty: Counterparty, _protocolID: WalletProtocol, _keyID: string): never;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ReadOnlySigner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadOnlySigner.d.ts","sourceRoot":"","sources":["../../src/signers/ReadOnlySigner.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EAEf,KAAK,cAAc,EACnB,MAAM,UAAU,CAAA;AA0BjB;;;GAGG;AACH,qBAAa,cAAe,YAAW,aAAa;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;gBAEhB,iBAAiB,EAAE,MAAM;IAOrC,gBAAgB,CACf,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,YAAY,GACzB,KAAK;IAIR,eAAe,CACd,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,YAAY,EAC3B,QAAQ,CAAC,EAAE,OAAO,GAChB,KAAK;IAIR,kBAAkB,CACjB,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,YAAY,GACzB,KAAK;IAIR,wBAAwB,CAAC,aAAa,EAAE,YAAY,GAAG,KAAK;IAI5D,oBAAoB,CACnB,aAAa,EAAE,YAAY,EAC3B,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,MAAM,GACZ,KAAK;CAGR"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PublicKey, } from '@bsv/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* A mock PrivateKey that only supports toPublicKey().
|
|
4
|
+
* All other operations throw.
|
|
5
|
+
*/
|
|
6
|
+
class ReadOnlyPrivateKey {
|
|
7
|
+
publicKey;
|
|
8
|
+
constructor(publicKeyHex) {
|
|
9
|
+
this.publicKey = PublicKey.fromString(publicKeyHex);
|
|
10
|
+
}
|
|
11
|
+
toPublicKey() {
|
|
12
|
+
return this.publicKey;
|
|
13
|
+
}
|
|
14
|
+
toString() {
|
|
15
|
+
return this.publicKey.toString();
|
|
16
|
+
}
|
|
17
|
+
toHex() {
|
|
18
|
+
return this.publicKey.toString();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A read-only KeyDeriver that exposes an identity key but throws on any signing/derivation operation.
|
|
23
|
+
* Used when the wallet is instantiated with only a public key.
|
|
24
|
+
*/
|
|
25
|
+
export class ReadOnlySigner {
|
|
26
|
+
identityKey;
|
|
27
|
+
rootKey;
|
|
28
|
+
constructor(identityPublicKey) {
|
|
29
|
+
this.identityKey = identityPublicKey;
|
|
30
|
+
this.rootKey = new ReadOnlyPrivateKey(identityPublicKey);
|
|
31
|
+
}
|
|
32
|
+
derivePrivateKey(_protocolID, _keyID, _counterparty) {
|
|
33
|
+
throw new Error('Cannot derive private key in read-only mode');
|
|
34
|
+
}
|
|
35
|
+
derivePublicKey(_protocolID, _keyID, _counterparty, _forSelf) {
|
|
36
|
+
throw new Error('Cannot derive public key in read-only mode');
|
|
37
|
+
}
|
|
38
|
+
deriveSymmetricKey(_protocolID, _keyID, _counterparty) {
|
|
39
|
+
throw new Error('Cannot derive symmetric key in read-only mode');
|
|
40
|
+
}
|
|
41
|
+
revealCounterpartySecret(_counterparty) {
|
|
42
|
+
throw new Error('Cannot reveal secrets in read-only mode');
|
|
43
|
+
}
|
|
44
|
+
revealSpecificSecret(_counterparty, _protocolID, _keyID) {
|
|
45
|
+
throw new Error('Cannot reveal secrets in read-only mode');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=ReadOnlySigner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadOnlySigner.js","sourceRoot":"","sources":["../../src/signers/ReadOnlySigner.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,SAAS,GAET,MAAM,UAAU,CAAA;AAEjB;;;GAGG;AACH,MAAM,kBAAkB;IACf,SAAS,CAAW;IAE5B,YAAY,YAAoB;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IACpD,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;IACjC,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;IACjC,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,WAAW,CAAQ;IACnB,OAAO,CAAY;IAE5B,YAAY,iBAAyB;QACpC,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAA;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,CACpC,iBAAiB,CACQ,CAAA;IAC3B,CAAC;IAED,gBAAgB,CACf,WAA2B,EAC3B,MAAc,EACd,aAA2B;QAE3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAC/D,CAAC;IAED,eAAe,CACd,WAA2B,EAC3B,MAAc,EACd,aAA2B,EAC3B,QAAkB;QAElB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC9D,CAAC;IAED,kBAAkB,CACjB,WAA2B,EAC3B,MAAc,EACd,aAA2B;QAE3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IACjE,CAAC;IAED,wBAAwB,CAAC,aAA2B;QACnD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC3D,CAAC;IAED,oBAAoB,CACnB,aAA2B,EAC3B,WAA2B,EAC3B,MAAc;QAEd,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC3D,CAAC;CACD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1sat/wallet",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "BRC-100 wallet engine for 1Sat Ordinals SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,17 +20,19 @@
|
|
|
20
20
|
"keywords": ["1sat", "bsv", "ordinals", "wallet", "brc-100"],
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"dependencies": {
|
|
23
|
+
"@1sat/client": "^0.0.2",
|
|
23
24
|
"@1sat/types": "^0.0.2",
|
|
24
25
|
"@1sat/constants": "^0.0.2",
|
|
25
|
-
"@
|
|
26
|
+
"@bopen-io/templates": "^1.1.7",
|
|
27
|
+
"@msgpack/msgpack": "^3.1.3",
|
|
28
|
+
"fflate": "^0.8.2"
|
|
26
29
|
},
|
|
27
30
|
"peerDependencies": {
|
|
28
|
-
"@bsv/sdk": "^1.
|
|
29
|
-
"@bsv/wallet-toolbox": "^1.7.0"
|
|
31
|
+
"@bsv/sdk": "^1.10.4"
|
|
30
32
|
},
|
|
31
33
|
"devDependencies": {
|
|
32
|
-
"@bsv/sdk": "^1.
|
|
33
|
-
"@
|
|
34
|
+
"@bsv/sdk": "^1.10.4",
|
|
35
|
+
"@types/chrome": "^0.1.32",
|
|
34
36
|
"typescript": "^5.9.3"
|
|
35
37
|
}
|
|
36
38
|
}
|