@notabene/verify-proof 1.9.0 → 1.11.1-next.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/README.md +21 -15
- package/dist/bitcoin-3CW4MNAW.cjs +314 -0
- package/dist/bitcoin-3CW4MNAW.cjs.map +1 -0
- package/dist/bitcoin-QK53ILBF.js +312 -0
- package/dist/bitcoin-QK53ILBF.js.map +1 -0
- package/dist/cardano-DYBYEAAF.cjs +53 -0
- package/dist/cardano-DYBYEAAF.cjs.map +1 -0
- package/dist/cardano-WE6YXYLW.js +31 -0
- package/dist/cardano-WE6YXYLW.js.map +1 -0
- package/dist/chunk-E3V5ATTC.js +38 -0
- package/dist/chunk-E3V5ATTC.js.map +1 -0
- package/dist/chunk-OAXNH5XR.cjs +42 -0
- package/dist/chunk-OAXNH5XR.cjs.map +1 -0
- package/dist/concordium-HQC37GCK.cjs +188 -0
- package/dist/concordium-HQC37GCK.cjs.map +1 -0
- package/dist/concordium-XX4XYLLU.js +186 -0
- package/dist/concordium-XX4XYLLU.js.map +1 -0
- package/dist/cosmos-64MKE5FJ.cjs +683 -0
- package/dist/cosmos-64MKE5FJ.cjs.map +1 -0
- package/dist/cosmos-QMH7BK7S.js +681 -0
- package/dist/cosmos-QMH7BK7S.js.map +1 -0
- package/dist/eth-3DX3PXDU.cjs +37 -0
- package/dist/eth-3DX3PXDU.cjs.map +1 -0
- package/dist/eth-ICLGRJE5.js +34 -0
- package/dist/eth-ICLGRJE5.js.map +1 -0
- package/dist/index.cjs +69 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +67 -1
- package/dist/index.js.map +1 -1
- package/dist/solana-4KQFLZUC.js +342 -0
- package/dist/solana-4KQFLZUC.js.map +1 -0
- package/dist/solana-PQ5K4NGO.cjs +365 -0
- package/dist/solana-PQ5K4NGO.cjs.map +1 -0
- package/dist/tron-F5AARBY4.cjs +58 -0
- package/dist/tron-F5AARBY4.cjs.map +1 -0
- package/dist/tron-OBLPB2LN.js +53 -0
- package/dist/tron-OBLPB2LN.js.map +1 -0
- package/dist/xlm-5GODWWL2.cjs +28 -0
- package/dist/xlm-5GODWWL2.cjs.map +1 -0
- package/dist/xlm-GX2QGFLI.js +26 -0
- package/dist/xlm-GX2QGFLI.js.map +1 -0
- package/dist/xrpl-7HQLIDAK.cjs +1174 -0
- package/dist/xrpl-7HQLIDAK.cjs.map +1 -0
- package/dist/xrpl-YCDFXBGQ.js +1169 -0
- package/dist/xrpl-YCDFXBGQ.js.map +1 -0
- package/package.json +11 -2
- package/src/bitcoin.ts +98 -37
- package/src/cardano.ts +2 -2
- package/src/index.ts +31 -19
- package/src/solana.ts +1 -1
- package/src/tests/bitcoin.test.ts +105 -16
- package/src/tests/solana.test.ts +1 -1
- package/src/xlm.ts +1 -2
- package/dist/bitcoin.d.ts +0 -2
- package/dist/cardano.d.ts +0 -2
- package/dist/concordium.d.ts +0 -15
- package/dist/cosmos.d.ts +0 -2
- package/dist/eth.d.ts +0 -4
- package/dist/index.modern.js +0 -2
- package/dist/index.modern.js.map +0 -1
- package/dist/index.umd.js +0 -2
- package/dist/index.umd.js.map +0 -1
- package/dist/solana.d.ts +0 -17
- package/dist/tests/bitcoin.test.d.ts +0 -1
- package/dist/tests/cardano.test.d.ts +0 -1
- package/dist/tests/concordium.test.d.ts +0 -1
- package/dist/tests/cosmos.test.d.ts +0 -1
- package/dist/tests/eth.test.d.ts +0 -1
- package/dist/tests/index.test.d.ts +0 -1
- package/dist/tests/solana.test.d.ts +0 -1
- package/dist/tests/tron.test.d.ts +0 -1
- package/dist/tests/xlm.test.d.ts +0 -1
- package/dist/tests/xrpl.test.d.ts +0 -1
- package/dist/tron.d.ts +0 -6
- package/dist/xlm.d.ts +0 -2
- package/dist/xrpl.d.ts +0 -5
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import './chunk-E3V5ATTC.js';
|
|
3
|
+
import { ProofStatus, ProofTypes } from '@notabene/javascript-sdk';
|
|
4
|
+
import { encode } from 'varuint-bitcoin';
|
|
5
|
+
import { createBase58check, bech32, base64 } from '@scure/base';
|
|
6
|
+
import { Hash } from 'ox';
|
|
7
|
+
import { secp256k1 } from '@noble/curves/secp256k1';
|
|
8
|
+
import { Verifier } from 'bip322-js';
|
|
9
|
+
|
|
10
|
+
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = Buffer; }
|
|
11
|
+
var CHAIN_CONFIGS = {
|
|
12
|
+
bitcoin: {
|
|
13
|
+
messagePrefix: "Bitcoin Signed Message:\n",
|
|
14
|
+
pubKeyHashVersion: 0,
|
|
15
|
+
// 1...
|
|
16
|
+
scriptHashVersion: 5,
|
|
17
|
+
// 3...
|
|
18
|
+
bech32Prefix: "bc",
|
|
19
|
+
isTestnet: false
|
|
20
|
+
},
|
|
21
|
+
bitcoincash: {
|
|
22
|
+
messagePrefix: "Bitcoin Signed Message:\n",
|
|
23
|
+
pubKeyHashVersion: 0,
|
|
24
|
+
// 1...
|
|
25
|
+
scriptHashVersion: 5,
|
|
26
|
+
// 3...
|
|
27
|
+
bech32Prefix: "bc",
|
|
28
|
+
isTestnet: false
|
|
29
|
+
},
|
|
30
|
+
litecoin: {
|
|
31
|
+
messagePrefix: "Litecoin Signed Message:\n",
|
|
32
|
+
pubKeyHashVersion: 48,
|
|
33
|
+
// L... or M...
|
|
34
|
+
scriptHashVersion: 50,
|
|
35
|
+
// 3... or M...
|
|
36
|
+
bech32Prefix: "ltc",
|
|
37
|
+
isTestnet: false
|
|
38
|
+
},
|
|
39
|
+
dogecoin: {
|
|
40
|
+
messagePrefix: "Dogecoin Signed Message:\n",
|
|
41
|
+
pubKeyHashVersion: 30,
|
|
42
|
+
// D...
|
|
43
|
+
scriptHashVersion: 22,
|
|
44
|
+
// A...
|
|
45
|
+
isTestnet: false
|
|
46
|
+
},
|
|
47
|
+
dash: {
|
|
48
|
+
messagePrefix: "DarkCoin Signed Message:\n",
|
|
49
|
+
pubKeyHashVersion: 76,
|
|
50
|
+
// X...
|
|
51
|
+
scriptHashVersion: 16,
|
|
52
|
+
// 7...
|
|
53
|
+
isTestnet: false
|
|
54
|
+
},
|
|
55
|
+
zcash: {
|
|
56
|
+
messagePrefix: "Zcash Signed Message:\n",
|
|
57
|
+
pubKeyHashVersion: Uint8Array.from([28, 184]),
|
|
58
|
+
// <-- FIXED
|
|
59
|
+
scriptHashVersion: Uint8Array.from([28, 189]),
|
|
60
|
+
isTestnet: false
|
|
61
|
+
},
|
|
62
|
+
testnet: {
|
|
63
|
+
messagePrefix: "Bitcoin Signed Message:\n",
|
|
64
|
+
pubKeyHashVersion: 111,
|
|
65
|
+
// m or n
|
|
66
|
+
scriptHashVersion: 196,
|
|
67
|
+
// 2
|
|
68
|
+
bech32Prefix: "tb",
|
|
69
|
+
isTestnet: true
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
async function verifyBTCSignature(proof) {
|
|
73
|
+
const [ns, , address] = proof.address.split(/:/);
|
|
74
|
+
if (ns !== "bip122") return { ...proof, status: ProofStatus.FAILED };
|
|
75
|
+
const chainConfig = getChainConfig(address);
|
|
76
|
+
if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };
|
|
77
|
+
const isZcash = address.startsWith("t1") || address.startsWith("t3");
|
|
78
|
+
if (isZcash) {
|
|
79
|
+
return verifyBIP137(address, proof, chainConfig);
|
|
80
|
+
}
|
|
81
|
+
if (chainConfig.isTestnet) {
|
|
82
|
+
return verifyBIP322(address, proof);
|
|
83
|
+
}
|
|
84
|
+
const isTaproot = address.startsWith("bc1p") || address.startsWith("tb1p");
|
|
85
|
+
if (isTaproot && proof.type === ProofTypes.BIP137) {
|
|
86
|
+
return verifyBIP322(address, proof);
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
switch (proof.type) {
|
|
90
|
+
case ProofTypes.BIP137:
|
|
91
|
+
return verifyBIP137(address, proof, chainConfig);
|
|
92
|
+
case ProofTypes.BIP322:
|
|
93
|
+
return verifyBIP322(address, proof);
|
|
94
|
+
default:
|
|
95
|
+
return {
|
|
96
|
+
...proof,
|
|
97
|
+
status: ProofStatus.FAILED
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
} catch {
|
|
101
|
+
return {
|
|
102
|
+
...proof,
|
|
103
|
+
status: ProofStatus.FAILED
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function getChainConfig(address) {
|
|
108
|
+
if (address.startsWith("1") || address.startsWith("3") || address.startsWith("bc1")) {
|
|
109
|
+
return CHAIN_CONFIGS["bitcoin"];
|
|
110
|
+
}
|
|
111
|
+
if (address.startsWith("t1") || address.startsWith("t3")) {
|
|
112
|
+
return CHAIN_CONFIGS["zcash"];
|
|
113
|
+
}
|
|
114
|
+
if (address.startsWith("L") || address.startsWith("M") || address.startsWith("ltc1")) {
|
|
115
|
+
return CHAIN_CONFIGS["litecoin"];
|
|
116
|
+
}
|
|
117
|
+
if (address.startsWith("D") || address.startsWith("A")) {
|
|
118
|
+
return CHAIN_CONFIGS["dogecoin"];
|
|
119
|
+
}
|
|
120
|
+
if (address.startsWith("X") || address.startsWith("7")) {
|
|
121
|
+
return CHAIN_CONFIGS["dash"];
|
|
122
|
+
}
|
|
123
|
+
if (address.startsWith("q")) {
|
|
124
|
+
return CHAIN_CONFIGS["bitcoincash"];
|
|
125
|
+
}
|
|
126
|
+
if (address.startsWith("tb1")) {
|
|
127
|
+
return CHAIN_CONFIGS["testnet"];
|
|
128
|
+
}
|
|
129
|
+
return CHAIN_CONFIGS["bitcoin"];
|
|
130
|
+
}
|
|
131
|
+
function verifyBIP322(address, proof) {
|
|
132
|
+
const { attestation, proof: signatureProof } = proof;
|
|
133
|
+
const verified = Verifier.verifySignature(
|
|
134
|
+
address,
|
|
135
|
+
attestation,
|
|
136
|
+
signatureProof
|
|
137
|
+
);
|
|
138
|
+
return {
|
|
139
|
+
...proof,
|
|
140
|
+
status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function verifyBIP137(address, proof, chainConfig) {
|
|
144
|
+
const derivationMode = getDerivationMode(address);
|
|
145
|
+
const useSegwitEncoding = Boolean(
|
|
146
|
+
chainConfig.bech32Prefix && (derivationMode === "Native SegWit" /* NATIVE */ || derivationMode === "SegWit" /* SEGWIT */ && !address.startsWith("1"))
|
|
147
|
+
);
|
|
148
|
+
const verified = verify(
|
|
149
|
+
proof.attestation,
|
|
150
|
+
address,
|
|
151
|
+
proof.proof,
|
|
152
|
+
useSegwitEncoding,
|
|
153
|
+
chainConfig
|
|
154
|
+
);
|
|
155
|
+
return {
|
|
156
|
+
...proof,
|
|
157
|
+
status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function getDerivationMode(address) {
|
|
161
|
+
if (address.match("^(bc1|tb1|ltc1).*")) {
|
|
162
|
+
return "Native SegWit" /* NATIVE */;
|
|
163
|
+
} else if (address.match("^[32M].*")) {
|
|
164
|
+
return "SegWit" /* SEGWIT */;
|
|
165
|
+
} else if (address.match("^[1nmL].*")) {
|
|
166
|
+
return "Legacy" /* LEGACY */;
|
|
167
|
+
} else if (address.match("^(D).*")) {
|
|
168
|
+
return "Dogecoin" /* DOGECOIN */;
|
|
169
|
+
} else if (address.match("^(q).*")) {
|
|
170
|
+
return "Bitcoin Cash" /* BCH */;
|
|
171
|
+
} else if (address.match("^(t1|t3).*")) {
|
|
172
|
+
return "Legacy" /* LEGACY */;
|
|
173
|
+
} else if (address.match("^[X7].*")) {
|
|
174
|
+
return "Legacy" /* LEGACY */;
|
|
175
|
+
} else {
|
|
176
|
+
throw new Error(
|
|
177
|
+
"INVALID ADDRESS: ".concat(address).concat(" is not a valid or a supported address")
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function decodeSignature(proof) {
|
|
182
|
+
const sigbytes = base64.decode(proof);
|
|
183
|
+
if (sigbytes.length !== 65) throw new Error("Invalid signature length");
|
|
184
|
+
const flagByte = sigbytes[0] - 27;
|
|
185
|
+
if (flagByte > 15 || flagByte < 0) {
|
|
186
|
+
throw new Error("Invalid signature parameter");
|
|
187
|
+
}
|
|
188
|
+
const compressed = !!(flagByte & 12);
|
|
189
|
+
const recovery = flagByte & 3;
|
|
190
|
+
const signature = secp256k1.Signature.fromCompact(sigbytes.slice(1));
|
|
191
|
+
return {
|
|
192
|
+
compressed,
|
|
193
|
+
segwitType: !(flagByte & 8) ? void 0 : !(flagByte & 4) ? "p2sh(p2wpkh)" /* P2SH_P2WPKH */ : "p2wpkh" /* P2WPKH */,
|
|
194
|
+
signature: signature.addRecoveryBit(recovery)
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function verify(attestation, address, proof, checkSegwitAlways, chainConfig) {
|
|
198
|
+
const { compressed, segwitType, signature } = decodeSignature(proof);
|
|
199
|
+
if (checkSegwitAlways && !compressed) {
|
|
200
|
+
throw new Error(
|
|
201
|
+
"checkSegwitAlways can only be used with a compressed pubkey signature flagbyte"
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
const hash = magicHash(attestation, chainConfig.messagePrefix);
|
|
205
|
+
const publicKey = signature.recoverPublicKey(hash);
|
|
206
|
+
const publicKeyBytes = publicKey.toRawBytes(compressed);
|
|
207
|
+
const publicKeyHash = hash160(publicKeyBytes);
|
|
208
|
+
let actual = "";
|
|
209
|
+
if (address.startsWith("q")) {
|
|
210
|
+
actual = encodeBase58AddressFormat(
|
|
211
|
+
chainConfig.pubKeyHashVersion,
|
|
212
|
+
publicKeyHash
|
|
213
|
+
);
|
|
214
|
+
return actual.startsWith("1");
|
|
215
|
+
}
|
|
216
|
+
if (segwitType) {
|
|
217
|
+
if (segwitType === "p2sh(p2wpkh)" /* P2SH_P2WPKH */) {
|
|
218
|
+
actual = encodeBase58AddressFormat(
|
|
219
|
+
chainConfig.scriptHashVersion,
|
|
220
|
+
publicKeyHash
|
|
221
|
+
);
|
|
222
|
+
} else {
|
|
223
|
+
if (chainConfig.bech32Prefix) {
|
|
224
|
+
actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);
|
|
225
|
+
} else {
|
|
226
|
+
actual = encodeBase58AddressFormat(
|
|
227
|
+
chainConfig.scriptHashVersion,
|
|
228
|
+
publicKeyHash
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
} else {
|
|
233
|
+
if (address.startsWith("3") && !segwitType) {
|
|
234
|
+
const redeemScript = new Uint8Array(22);
|
|
235
|
+
redeemScript[0] = 0;
|
|
236
|
+
redeemScript[1] = 20;
|
|
237
|
+
redeemScript.set(publicKeyHash, 2);
|
|
238
|
+
const redeemScriptHash = hash160(redeemScript);
|
|
239
|
+
const p2shP2wpkh = encodeBase58AddressFormat(
|
|
240
|
+
chainConfig.scriptHashVersion,
|
|
241
|
+
redeemScriptHash
|
|
242
|
+
);
|
|
243
|
+
const legacyP2sh = encodeBase58AddressFormat(
|
|
244
|
+
chainConfig.scriptHashVersion,
|
|
245
|
+
publicKeyHash
|
|
246
|
+
);
|
|
247
|
+
if (address === p2shP2wpkh || address === legacyP2sh) {
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
actual = legacyP2sh;
|
|
251
|
+
} else if (address.startsWith("bc1q") || address.startsWith("tb1q") || address.startsWith("ltc1q")) {
|
|
252
|
+
if (chainConfig.bech32Prefix) {
|
|
253
|
+
actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);
|
|
254
|
+
} else {
|
|
255
|
+
actual = encodeBase58AddressFormat(
|
|
256
|
+
chainConfig.pubKeyHashVersion,
|
|
257
|
+
publicKeyHash
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
} else if (checkSegwitAlways && chainConfig.bech32Prefix) {
|
|
261
|
+
try {
|
|
262
|
+
actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);
|
|
263
|
+
} catch (e) {
|
|
264
|
+
actual = encodeBase58AddressFormat(
|
|
265
|
+
chainConfig.scriptHashVersion,
|
|
266
|
+
publicKeyHash
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
} else {
|
|
270
|
+
actual = encodeBase58AddressFormat(
|
|
271
|
+
chainConfig.pubKeyHashVersion,
|
|
272
|
+
publicKeyHash
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return actual === address;
|
|
277
|
+
}
|
|
278
|
+
var base58check = createBase58check(Hash.sha256);
|
|
279
|
+
function encodeBase58AddressFormat(version, publicKeyHash) {
|
|
280
|
+
const prefixBytes = typeof version === "number" ? Uint8Array.of(version) : version;
|
|
281
|
+
const payload = new Uint8Array(prefixBytes.length + publicKeyHash.length);
|
|
282
|
+
payload.set(prefixBytes);
|
|
283
|
+
payload.set(publicKeyHash, prefixBytes.length);
|
|
284
|
+
return base58check.encode(payload);
|
|
285
|
+
}
|
|
286
|
+
function magicHash(attestation, messagePrefix) {
|
|
287
|
+
const prefix = new TextEncoder().encode(messagePrefix);
|
|
288
|
+
const message = new TextEncoder().encode(attestation);
|
|
289
|
+
const length = encode(message.length).buffer;
|
|
290
|
+
const buffer = new Uint8Array(
|
|
291
|
+
prefix.length + length.byteLength + message.length
|
|
292
|
+
);
|
|
293
|
+
buffer.set(prefix);
|
|
294
|
+
buffer.set(new Uint8Array(length), prefix.length);
|
|
295
|
+
buffer.set(message, prefix.length + length.byteLength);
|
|
296
|
+
return hash256(buffer);
|
|
297
|
+
}
|
|
298
|
+
function encodeBech32Address(publicKeyHash, prefix = "bc") {
|
|
299
|
+
const bwords = bech32.toWords(publicKeyHash);
|
|
300
|
+
bwords.unshift(0);
|
|
301
|
+
return bech32.encode(prefix, bwords);
|
|
302
|
+
}
|
|
303
|
+
function hash256(buffer) {
|
|
304
|
+
return Hash.sha256(Hash.sha256(buffer));
|
|
305
|
+
}
|
|
306
|
+
function hash160(buffer) {
|
|
307
|
+
return Hash.ripemd160(Hash.sha256(buffer));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export { verifyBTCSignature };
|
|
311
|
+
//# sourceMappingURL=bitcoin-QK53ILBF.js.map
|
|
312
|
+
//# sourceMappingURL=bitcoin-QK53ILBF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bitcoin.ts"],"names":["encodeLength"],"mappings":"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","file":"bitcoin-QK53ILBF.js","sourcesContent":["import {\n ProofStatus,\n ProofTypes,\n SignatureProof,\n} from \"@notabene/javascript-sdk\";\n\nimport { encode as encodeLength } from \"varuint-bitcoin\";\nimport { base64, bech32, createBase58check } from \"@scure/base\";\nimport { Hash } from \"ox\";\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { SignatureType } from \"@noble/curves/abstract/weierstrass\";\nimport { Verifier } from \"bip322-js\";\n\nenum SEGWIT_TYPES {\n P2WPKH = \"p2wpkh\",\n P2SH_P2WPKH = \"p2sh(p2wpkh)\",\n}\n\ninterface ChainConfig {\n messagePrefix: string;\n pubKeyHashVersion: number | Uint8Array;\n scriptHashVersion: number | Uint8Array;\n bech32Prefix?: string;\n isTestnet?: boolean;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n bitcoin: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n bitcoincash: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n litecoin: {\n messagePrefix: \"\\u0019Litecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x30, // L... or M...\n scriptHashVersion: 0x32, // 3... or M...\n bech32Prefix: \"ltc\",\n isTestnet: false,\n },\n dogecoin: {\n messagePrefix: \"\\u0019Dogecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x1e, // D...\n scriptHashVersion: 0x16, // A...\n isTestnet: false,\n },\n dash: {\n messagePrefix: \"\\u0019DarkCoin Signed Message:\\n\",\n pubKeyHashVersion: 0x4c, // X...\n scriptHashVersion: 0x10, // 7...\n isTestnet: false,\n },\n zcash: {\n messagePrefix: \"\\u0018Zcash Signed Message:\\n\",\n pubKeyHashVersion: Uint8Array.from([0x1c, 0xb8]), // <-- FIXED\n scriptHashVersion: Uint8Array.from([0x1c, 0xbd]),\n isTestnet: false,\n },\n\n testnet: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x6f, // m or n\n scriptHashVersion: 0xc4, // 2\n bech32Prefix: \"tb\",\n isTestnet: true,\n },\n};\n\nenum DerivationMode {\n LEGACY = \"Legacy\",\n NATIVE = \"Native SegWit\",\n SEGWIT = \"SegWit\",\n P2SH_SEGWIT = \"p2sh\",\n BCH = \"Bitcoin Cash\",\n ETHEREUM = \"Ethereum\",\n DOGECOIN = \"Dogecoin\",\n UNKNOWN = \"Unknown\",\n}\n\nexport async function verifyBTCSignature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"bip122\") return { ...proof, status: ProofStatus.FAILED };\n\n // Map chainId to our chain configuration\n const chainConfig = getChainConfig(address);\n if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };\n\n const isZcash = address.startsWith(\"t1\") || address.startsWith(\"t3\");\n if (isZcash) {\n return verifyBIP137(address, proof, chainConfig);\n }\n\n // Use BIP322 for testnet addresses\n if (chainConfig.isTestnet) {\n return verifyBIP322(address, proof);\n }\n\n // Check if this is a Taproot address (bc1p or tb1p)\n const isTaproot = address.startsWith(\"bc1p\") || address.startsWith(\"tb1p\");\n\n // For Taproot addresses with BIP-137 proof type, use BIP-322 verification\n // since BIP-137 doesn't officially support Taproot\n if (isTaproot && proof.type === ProofTypes.BIP137) {\n return verifyBIP322(address, proof);\n }\n\n try {\n switch (proof.type) {\n case ProofTypes.BIP137:\n return verifyBIP137(address, proof, chainConfig);\n case ProofTypes.BIP322:\n return verifyBIP322(address, proof);\n default:\n return {\n ...proof,\n status: ProofStatus.FAILED,\n };\n }\n } catch {\n return {\n ...proof,\n status: ProofStatus.FAILED,\n };\n }\n}\n\nfunction getChainConfig(address: string): ChainConfig {\n if (\n address.startsWith(\"1\") ||\n address.startsWith(\"3\") ||\n address.startsWith(\"bc1\")\n ) {\n return CHAIN_CONFIGS[\"bitcoin\"];\n }\n if (address.startsWith(\"t1\") || address.startsWith(\"t3\")) {\n return CHAIN_CONFIGS[\"zcash\"];\n }\n if (\n address.startsWith(\"L\") ||\n address.startsWith(\"M\") ||\n address.startsWith(\"ltc1\")\n ) {\n return CHAIN_CONFIGS[\"litecoin\"];\n }\n if (address.startsWith(\"D\") || address.startsWith(\"A\")) {\n return CHAIN_CONFIGS[\"dogecoin\"];\n }\n if (address.startsWith(\"X\") || address.startsWith(\"7\")) {\n return CHAIN_CONFIGS[\"dash\"];\n }\n if (address.startsWith(\"q\")) {\n return CHAIN_CONFIGS[\"bitcoincash\"];\n }\n if (address.startsWith(\"tb1\")) {\n return CHAIN_CONFIGS[\"testnet\"];\n }\n\n return CHAIN_CONFIGS[\"bitcoin\"];\n}\n\nfunction verifyBIP322(address: string, proof: SignatureProof) {\n const { attestation, proof: signatureProof } = proof;\n const verified = Verifier.verifySignature(\n address,\n attestation,\n signatureProof\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nfunction verifyBIP137(\n address: string,\n proof: SignatureProof,\n chainConfig: ChainConfig\n) {\n const derivationMode = getDerivationMode(address);\n\n // For legacy addresses (starting with \"1\"), never use SegWit encoding\n // For P2SH addresses (starting with \"3\"), use SegWit encoding if they have bech32 support\n // For native SegWit addresses (bc1, tb1, ltc1), always use SegWit encoding\n const useSegwitEncoding = Boolean(\n chainConfig.bech32Prefix &&\n (derivationMode === DerivationMode.NATIVE ||\n (derivationMode === DerivationMode.SEGWIT && !address.startsWith(\"1\")))\n );\n\n const verified = verify(\n proof.attestation,\n address,\n proof.proof,\n useSegwitEncoding,\n chainConfig\n );\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nfunction getDerivationMode(address: string) {\n if (address.match(\"^(bc1|tb1|ltc1).*\")) {\n return DerivationMode.NATIVE;\n } else if (address.match(\"^[32M].*\")) {\n return DerivationMode.SEGWIT;\n } else if (address.match(\"^[1nmL].*\")) {\n return DerivationMode.LEGACY;\n } else if (address.match(\"^(D).*\")) {\n return DerivationMode.DOGECOIN;\n } else if (address.match(\"^(q).*\")) {\n return DerivationMode.BCH;\n } else if (address.match(\"^(t1|t3).*\")) {\n return DerivationMode.LEGACY; // Zcash addresses\n } else if (address.match(\"^[X7].*\")) {\n return DerivationMode.LEGACY; // Dash addresses\n } else {\n throw new Error(\n \"INVALID ADDRESS: \"\n .concat(address)\n .concat(\" is not a valid or a supported address\")\n );\n }\n}\n\ntype DecodedSignature = {\n compressed: boolean;\n segwitType?: SEGWIT_TYPES;\n signature: SignatureType;\n};\n\nfunction decodeSignature(proof: string): DecodedSignature {\n const sigbytes = base64.decode(proof);\n if (sigbytes.length !== 65) throw new Error(\"Invalid signature length\");\n const flagByte = sigbytes[0] - 27;\n if (flagByte > 15 || flagByte < 0) {\n throw new Error(\"Invalid signature parameter\");\n }\n const compressed = !!(flagByte & 12); // Are there cases that aren't compressed?\n const recovery = flagByte & 3;\n const signature = secp256k1.Signature.fromCompact(sigbytes.slice(1));\n\n return {\n compressed,\n segwitType: !(flagByte & 8)\n ? undefined\n : !(flagByte & 4)\n ? SEGWIT_TYPES.P2SH_P2WPKH\n : SEGWIT_TYPES.P2WPKH,\n signature: signature.addRecoveryBit(recovery),\n };\n}\n\nfunction verify(\n attestation: string,\n address: string,\n proof: string,\n checkSegwitAlways: boolean,\n chainConfig: ChainConfig\n) {\n const { compressed, segwitType, signature } = decodeSignature(proof);\n if (checkSegwitAlways && !compressed) {\n throw new Error(\n \"checkSegwitAlways can only be used with a compressed pubkey signature flagbyte\"\n );\n }\n const hash = magicHash(attestation, chainConfig.messagePrefix);\n const publicKey = signature.recoverPublicKey(hash);\n const publicKeyBytes = publicKey.toRawBytes(compressed);\n const publicKeyHash = hash160(publicKeyBytes);\n let actual: string = \"\";\n\n // Special handling for Bitcoin Cash addresses\n if (address.startsWith(\"q\")) {\n // For BCH, we'll compare the public key hash directly since we're getting a CashAddr\n // Convert the CashAddr to legacy format for comparison\n actual = encodeBase58AddressFormat(\n chainConfig.pubKeyHashVersion,\n publicKeyHash\n );\n // Legacy P2PKH addresses in BCH start with '1' just like BTC\n // Source: https://reference.cash/protocol/blockchain/encoding/cashaddr#legacy-address-format\n return actual.startsWith(\"1\");\n }\n\n if (segwitType) {\n if (segwitType === SEGWIT_TYPES.P2SH_P2WPKH) {\n actual = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n publicKeyHash\n );\n } else {\n // parsed.segwitType === SEGWIT_TYPES.P2WPKH\n if (chainConfig.bech32Prefix) {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n } else {\n // Fallback to legacy if bech32 not supported\n actual = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n publicKeyHash\n );\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n }\n } else {\n // For addresses starting with \"3\" (P2SH), try both P2SH-P2WPKH and legacy P2SH encodings if segwitType is undefined\n if (address.startsWith(\"3\") && !segwitType) {\n // P2SH-P2WPKH: script hash of the redeem script (OP_0 <pubkeyhash>)\n const redeemScript = new Uint8Array(22);\n redeemScript[0] = 0x00; // OP_0\n redeemScript[1] = 0x14; // push 20 bytes\n redeemScript.set(publicKeyHash, 2);\n const redeemScriptHash = hash160(redeemScript);\n const p2shP2wpkh = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n redeemScriptHash\n );\n // Legacy P2SH: script hash of the public key\n const legacyP2sh = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n publicKeyHash\n );\n if (address === p2shP2wpkh || address === legacyP2sh) {\n return true;\n }\n actual = legacyP2sh; // fallback for error reporting\n } else if (address.startsWith(\"bc1q\") || address.startsWith(\"tb1q\") || address.startsWith(\"ltc1q\")) {\n // For native SegWit P2WPKH addresses (bc1q/tb1q/ltc1q), always encode as bech32\n // This handles Ledger wallets that sign without segwit flags\n if (chainConfig.bech32Prefix) {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n } else {\n actual = encodeBase58AddressFormat(\n chainConfig.pubKeyHashVersion,\n publicKeyHash\n );\n }\n } else if (checkSegwitAlways && chainConfig.bech32Prefix) {\n try {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n // if address is bech32 it is not p2sh\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n actual = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n publicKeyHash\n );\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n } else {\n actual = encodeBase58AddressFormat(\n chainConfig.pubKeyHashVersion,\n publicKeyHash\n );\n }\n }\n\n return actual === address;\n}\n\nconst base58check = createBase58check(Hash.sha256);\n\nfunction encodeBase58AddressFormat(\n version: number | Uint8Array,\n publicKeyHash: Uint8Array\n) {\n const prefixBytes =\n typeof version === \"number\" ? Uint8Array.of(version) : version; // Accept raw Uint8Array for Zcash\n\n const payload = new Uint8Array(prefixBytes.length + publicKeyHash.length);\n payload.set(prefixBytes);\n payload.set(publicKeyHash, prefixBytes.length);\n return base58check.encode(payload);\n}\n\nfunction magicHash(attestation: string, messagePrefix: string) {\n const prefix = new TextEncoder().encode(messagePrefix);\n const message = new TextEncoder().encode(attestation);\n const length = encodeLength(message.length).buffer;\n const buffer = new Uint8Array(\n prefix.length + length.byteLength + message.length\n );\n buffer.set(prefix);\n buffer.set(new Uint8Array(length), prefix.length);\n buffer.set(message, prefix.length + length.byteLength);\n return hash256(buffer);\n}\n\nfunction encodeBech32Address(\n publicKeyHash: Uint8Array,\n prefix: string = \"bc\"\n): string {\n const bwords = bech32.toWords(publicKeyHash);\n bwords.unshift(0);\n return bech32.encode(prefix, bwords);\n}\n\nfunction hash256(buffer: Uint8Array): Uint8Array {\n return Hash.sha256(Hash.sha256(buffer));\n}\n\nfunction hash160(buffer: Uint8Array): Uint8Array {\n return Hash.ripemd160(Hash.sha256(buffer));\n}\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var buffer = require('buffer');
|
|
4
|
+
require('./chunk-OAXNH5XR.cjs');
|
|
5
|
+
var verifyDataSignature = require('@cardano-foundation/cardano-verify-datasignature');
|
|
6
|
+
var javascriptSdk = require('@notabene/javascript-sdk');
|
|
7
|
+
|
|
8
|
+
function _interopNamespace(e) {
|
|
9
|
+
if (e && e.__esModule) return e;
|
|
10
|
+
var n = Object.create(null);
|
|
11
|
+
if (e) {
|
|
12
|
+
Object.keys(e).forEach(function (k) {
|
|
13
|
+
if (k !== 'default') {
|
|
14
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return e[k]; }
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var verifyDataSignature__namespace = /*#__PURE__*/_interopNamespace(verifyDataSignature);
|
|
27
|
+
|
|
28
|
+
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = buffer.Buffer; }
|
|
29
|
+
async function verifyCIP8Signature(proof) {
|
|
30
|
+
const [ns, , address] = proof.address.split(/:/);
|
|
31
|
+
const key = proof.chainSpecificData && "cardanoCoseKey" in proof.chainSpecificData ? proof.chainSpecificData.cardanoCoseKey : null;
|
|
32
|
+
if (ns !== "cardano" || !key) {
|
|
33
|
+
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const verified = verifyDataSignature__namespace.default(
|
|
37
|
+
proof.proof,
|
|
38
|
+
key,
|
|
39
|
+
proof.attestation,
|
|
40
|
+
address
|
|
41
|
+
);
|
|
42
|
+
return {
|
|
43
|
+
...proof,
|
|
44
|
+
status: verified ? javascriptSdk.ProofStatus.VERIFIED : javascriptSdk.ProofStatus.FAILED
|
|
45
|
+
};
|
|
46
|
+
} catch {
|
|
47
|
+
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.verifyCIP8Signature = verifyCIP8Signature;
|
|
52
|
+
//# sourceMappingURL=cardano-DYBYEAAF.cjs.map
|
|
53
|
+
//# sourceMappingURL=cardano-DYBYEAAF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cardano.ts"],"names":["ProofStatus","verifyDataSignature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,eAAsB,oBACpB,KAAA,EACyB;AACzB,EAAA,MAAM,CAAC,MAAM,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/C,EAAA,MAAM,GAAA,GACJ,MAAM,iBAAA,IAAqB,gBAAA,IAAoB,MAAM,iBAAA,GACjD,KAAA,CAAM,kBAAkB,cAAA,GACxB,IAAA;AAEN,EAAA,IAAI,EAAA,KAAO,SAAA,IAAa,CAAC,GAAA,EAAK;AAC5B,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAA+BC,8BAAA,CAAA,OAAA;AAAA,MACnC,KAAA,CAAM,KAAA;AAAA,MACN,GAAA;AAAA,MACA,KAAA,CAAM,WAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,QAAA,GAAWD,yBAAA,CAAY,QAAA,GAAWA,yBAAA,CAAY;AAAA,KACxD;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AACF","file":"cardano-DYBYEAAF.cjs","sourcesContent":["import * as verifyDataSignature from \"@cardano-foundation/cardano-verify-datasignature\";\nimport { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\nexport async function verifyCIP8Signature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n const key =\n proof.chainSpecificData && \"cardanoCoseKey\" in proof.chainSpecificData\n ? proof.chainSpecificData.cardanoCoseKey\n : null;\n\n if (ns !== \"cardano\" || !key) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n const verified = verifyDataSignature.default(\n proof.proof,\n key,\n proof.attestation,\n address\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import './chunk-E3V5ATTC.js';
|
|
3
|
+
import * as verifyDataSignature from '@cardano-foundation/cardano-verify-datasignature';
|
|
4
|
+
import { ProofStatus } from '@notabene/javascript-sdk';
|
|
5
|
+
|
|
6
|
+
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = Buffer; }
|
|
7
|
+
async function verifyCIP8Signature(proof) {
|
|
8
|
+
const [ns, , address] = proof.address.split(/:/);
|
|
9
|
+
const key = proof.chainSpecificData && "cardanoCoseKey" in proof.chainSpecificData ? proof.chainSpecificData.cardanoCoseKey : null;
|
|
10
|
+
if (ns !== "cardano" || !key) {
|
|
11
|
+
return { ...proof, status: ProofStatus.FAILED };
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const verified = verifyDataSignature.default(
|
|
15
|
+
proof.proof,
|
|
16
|
+
key,
|
|
17
|
+
proof.attestation,
|
|
18
|
+
address
|
|
19
|
+
);
|
|
20
|
+
return {
|
|
21
|
+
...proof,
|
|
22
|
+
status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED
|
|
23
|
+
};
|
|
24
|
+
} catch {
|
|
25
|
+
return { ...proof, status: ProofStatus.FAILED };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { verifyCIP8Signature };
|
|
30
|
+
//# sourceMappingURL=cardano-WE6YXYLW.js.map
|
|
31
|
+
//# sourceMappingURL=cardano-WE6YXYLW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cardano.ts"],"names":[],"mappings":";;;;;;AAGA,eAAsB,oBACpB,KAAA,EACyB;AACzB,EAAA,MAAM,CAAC,MAAM,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/C,EAAA,MAAM,GAAA,GACJ,MAAM,iBAAA,IAAqB,gBAAA,IAAoB,MAAM,iBAAA,GACjD,KAAA,CAAM,kBAAkB,cAAA,GACxB,IAAA;AAEN,EAAA,IAAI,EAAA,KAAO,SAAA,IAAa,CAAC,GAAA,EAAK;AAC5B,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,YAAY,MAAA,EAAO;AAAA,EAChD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAA+B,mBAAA,CAAA,OAAA;AAAA,MACnC,KAAA,CAAM,KAAA;AAAA,MACN,GAAA;AAAA,MACA,KAAA,CAAM,WAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,QAAA,GAAW,WAAA,CAAY,QAAA,GAAW,WAAA,CAAY;AAAA,KACxD;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,YAAY,MAAA,EAAO;AAAA,EAChD;AACF","file":"cardano-WE6YXYLW.js","sourcesContent":["import * as verifyDataSignature from \"@cardano-foundation/cardano-verify-datasignature\";\nimport { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\nexport async function verifyCIP8Signature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n const key =\n proof.chainSpecificData && \"cardanoCoseKey\" in proof.chainSpecificData\n ? proof.chainSpecificData.cardanoCoseKey\n : null;\n\n if (ns !== \"cardano\" || !key) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n const verified = verifyDataSignature.default(\n proof.proof,\n key,\n proof.attestation,\n address\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
|
|
3
|
+
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = Buffer; }
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
11
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
12
|
+
}) : x)(function(x) {
|
|
13
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
14
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
15
|
+
});
|
|
16
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
17
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
18
|
+
};
|
|
19
|
+
var __copyProps = (to, from, except, desc) => {
|
|
20
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
21
|
+
for (let key of __getOwnPropNames(from))
|
|
22
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
23
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
24
|
+
}
|
|
25
|
+
return to;
|
|
26
|
+
};
|
|
27
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
28
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
29
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
30
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
31
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
32
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
33
|
+
mod
|
|
34
|
+
));
|
|
35
|
+
|
|
36
|
+
export { __commonJS, __require, __toESM };
|
|
37
|
+
//# sourceMappingURL=chunk-E3V5ATTC.js.map
|
|
38
|
+
//# sourceMappingURL=chunk-E3V5ATTC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-E3V5ATTC.js"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var buffer = require('buffer');
|
|
4
|
+
|
|
5
|
+
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = buffer.Buffer; }
|
|
6
|
+
var __create = Object.create;
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
11
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
13
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
14
|
+
}) : x)(function(x) {
|
|
15
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
16
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
17
|
+
});
|
|
18
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
19
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
20
|
+
};
|
|
21
|
+
var __copyProps = (to, from, except, desc) => {
|
|
22
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
23
|
+
for (let key of __getOwnPropNames(from))
|
|
24
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
25
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
26
|
+
}
|
|
27
|
+
return to;
|
|
28
|
+
};
|
|
29
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
30
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
31
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
32
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
33
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
34
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
35
|
+
mod
|
|
36
|
+
));
|
|
37
|
+
|
|
38
|
+
exports.__commonJS = __commonJS;
|
|
39
|
+
exports.__require = __require;
|
|
40
|
+
exports.__toESM = __toESM;
|
|
41
|
+
//# sourceMappingURL=chunk-OAXNH5XR.cjs.map
|
|
42
|
+
//# sourceMappingURL=chunk-OAXNH5XR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-OAXNH5XR.cjs"}
|