@opaquecash/stealth-wasm 0.1.1 → 0.1.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/dist/index.d.ts.map +1 -1
- package/dist/index.js +104 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAsBtE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CACnC,OAAO,CAAC,EAAE,sBAAsB,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,UAAU,EAC5B,oBAAoB,EAAE,UAAU,GAC/B,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,0BAA0B,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,UAAU,EAC5B,gBAAgB,EAAE,UAAU,EAC5B,oBAAoB,EAAE,UAAU,GAC/B,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,EACvB,oBAAoB,EAAE,UAAU,EAChC,mBAAmB,EAAE,UAAU,EAC/B,oBAAoB,EAAE,UAAU,GAC/B,UAAU,CAMZ;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,EAAE,UAAU,EAC5B,gBAAgB,EAAE,UAAU,EAC5B,oBAAoB,EAAE,UAAU,GAC/B;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAM7C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,UAAU,EAC/B,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EACvB,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,UAAU,EAC5B,gBAAgB,EAAE,UAAU,GAC3B,MAAM,CA+CR"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,26 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
let cached = null;
|
|
10
|
+
let debugLoggedScan = false;
|
|
11
|
+
function shouldDebug() {
|
|
12
|
+
try {
|
|
13
|
+
// Opt-in flag for docs playground / debugging sessions.
|
|
14
|
+
return globalThis?.__OPAQUE_DEBUG === true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function debugByteLenFromHex(hex) {
|
|
21
|
+
if (typeof hex !== "string")
|
|
22
|
+
return null;
|
|
23
|
+
const h = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
24
|
+
if (h.length === 0)
|
|
25
|
+
return 0;
|
|
26
|
+
if (h.length % 2 !== 0)
|
|
27
|
+
return null;
|
|
28
|
+
return h.length / 2;
|
|
29
|
+
}
|
|
10
30
|
/**
|
|
11
31
|
* Load the cryptography WASM module and return the API singleton.
|
|
12
32
|
*
|
|
@@ -95,6 +115,89 @@ export function generateReputationWitnessJson(wasm, attestationsJson, targetTrai
|
|
|
95
115
|
* Scan announcements JSON and return JSON string of matching stealth attestations.
|
|
96
116
|
*/
|
|
97
117
|
export function scanAttestationsJson(wasm, announcementsJson, viewPrivkeyBytes, spendPubkeyBytes) {
|
|
98
|
-
|
|
118
|
+
if (shouldDebug() && !debugLoggedScan) {
|
|
119
|
+
debugLoggedScan = true;
|
|
120
|
+
try {
|
|
121
|
+
const parsed = JSON.parse(announcementsJson);
|
|
122
|
+
const first = Array.isArray(parsed) ? parsed[0] : undefined;
|
|
123
|
+
console.groupCollapsed("[opaque.debug] scanAttestationsJson input");
|
|
124
|
+
console.log("records:", Array.isArray(parsed) ? parsed.length : "non-array");
|
|
125
|
+
console.log("first.ephemeralPubKey type:", typeof first?.ephemeralPubKey);
|
|
126
|
+
console.log("first.metadata type:", typeof first?.metadata);
|
|
127
|
+
console.log("first.ephemeralPubKey byteLen (hex):", debugByteLenFromHex(first?.ephemeralPubKey));
|
|
128
|
+
console.log("first.metadata byteLen (hex):", debugByteLenFromHex(first?.metadata));
|
|
129
|
+
console.groupEnd();
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
console.warn("[opaque.debug] scanAttestationsJson JSON.parse failed", e);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const coerced = coerceAnnouncementsJsonForWasm(announcementsJson);
|
|
136
|
+
if (shouldDebug()) {
|
|
137
|
+
try {
|
|
138
|
+
const parsed = JSON.parse(coerced);
|
|
139
|
+
const first = Array.isArray(parsed) ? parsed[0] : undefined;
|
|
140
|
+
console.groupCollapsed("[opaque.debug] scanAttestationsJson coerced");
|
|
141
|
+
console.log("coercedChanged:", coerced !== announcementsJson);
|
|
142
|
+
console.log("first.ephemeralPubKey type:", typeof first?.ephemeralPubKey);
|
|
143
|
+
console.log("first.metadata type:", typeof first?.metadata);
|
|
144
|
+
console.log("first.ephemeralPubKey byteLen (hex):", debugByteLenFromHex(first?.ephemeralPubKey));
|
|
145
|
+
console.log("first.metadata byteLen (hex):", debugByteLenFromHex(first?.metadata));
|
|
146
|
+
console.log("first.ephemeralPubKey prefix:", typeof first?.ephemeralPubKey === "string" ? first.ephemeralPubKey.slice(0, 6) : null);
|
|
147
|
+
console.groupEnd();
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
console.warn("[opaque.debug] scanAttestationsJson coerced JSON.parse failed", e);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return wasm.scan_attestations_wasm(coerced, viewPrivkeyBytes, spendPubkeyBytes);
|
|
154
|
+
}
|
|
155
|
+
function coerceAnnouncementsJsonForWasm(input) {
|
|
156
|
+
// The Rust/WASM scanner expects `ephemeralPubKey` and `metadata` as hex strings (0x...),
|
|
157
|
+
// but several SDK call sites historically produced JSON with number arrays. Convert
|
|
158
|
+
// array forms to hex string form for compatibility.
|
|
159
|
+
try {
|
|
160
|
+
const v = JSON.parse(input);
|
|
161
|
+
if (!Array.isArray(v))
|
|
162
|
+
return input;
|
|
163
|
+
let changed = false;
|
|
164
|
+
const out = v.map((row) => {
|
|
165
|
+
if (!row || typeof row !== "object")
|
|
166
|
+
return row;
|
|
167
|
+
const r = row;
|
|
168
|
+
const next = { ...r };
|
|
169
|
+
const eph = r["ephemeralPubKey"];
|
|
170
|
+
if (Array.isArray(eph)) {
|
|
171
|
+
next["ephemeralPubKey"] = bytesArrayToHex(eph);
|
|
172
|
+
changed = true;
|
|
173
|
+
}
|
|
174
|
+
const meta = r["metadata"];
|
|
175
|
+
if (Array.isArray(meta)) {
|
|
176
|
+
next["metadata"] = bytesArrayToHex(meta);
|
|
177
|
+
changed = true;
|
|
178
|
+
}
|
|
179
|
+
return next;
|
|
180
|
+
});
|
|
181
|
+
return changed ? JSON.stringify(out) : input;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return input;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function bytesArrayToHex(value) {
|
|
188
|
+
let hex = "0x";
|
|
189
|
+
for (let i = 0; i < value.length; i++) {
|
|
190
|
+
const n = value[i];
|
|
191
|
+
const b = typeof n === "number" && Number.isInteger(n) && n >= 0 && n <= 255
|
|
192
|
+
? n
|
|
193
|
+
: null;
|
|
194
|
+
if (b === null) {
|
|
195
|
+
// If it isn't a clean byte array, preserve original shape by returning empty hex.
|
|
196
|
+
// WASM will error with a useful message.
|
|
197
|
+
return "0x";
|
|
198
|
+
}
|
|
199
|
+
hex += b.toString(16).padStart(2, "0");
|
|
200
|
+
}
|
|
201
|
+
return hex;
|
|
99
202
|
}
|
|
100
203
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,IAAI,MAAM,GAA6B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|