@bsv/sdk 2.1.1 → 2.1.3
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/cjs/package.json +1 -1
- package/dist/cjs/src/auth/Peer.js +21 -18
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +4 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/identity/ContactsManager.js +44 -6
- package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
- package/dist/cjs/src/identity/IdentityClient.js +106 -37
- package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +180 -82
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +173 -50
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js +123 -1
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/auth/Peer.js +28 -18
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +4 -1
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/identity/ContactsManager.js +44 -6
- package/dist/esm/src/identity/ContactsManager.js.map +1 -1
- package/dist/esm/src/identity/IdentityClient.js +106 -37
- package/dist/esm/src/identity/IdentityClient.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +180 -82
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +177 -50
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js +123 -1
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/auth/Peer.d.ts +3 -3
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts +21 -0
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts +2 -2
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/identity/ContactsManager.d.ts +13 -2
- package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
- package/dist/types/src/identity/IdentityClient.d.ts +50 -24
- package/dist/types/src/identity/IdentityClient.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +15 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +21 -16
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +16 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +4 -4
- package/package.json +1 -1
- package/src/auth/Peer.ts +30 -20
- package/src/auth/SessionManager.ts +22 -0
- package/src/auth/__tests/Peer.test.ts +47 -1
- package/src/auth/clients/AuthFetch.ts +6 -3
- package/src/identity/ContactsManager.ts +47 -6
- package/src/identity/IdentityClient.ts +137 -53
- package/src/identity/__tests/IdentityClient.additional.test.ts +150 -1
- package/src/identity/__tests/IdentityClient.test.ts +4 -4
- package/src/overlay-tools/LookupResolver.ts +191 -77
- package/src/overlay-tools/__tests/LookupResolver.additional.test.ts +90 -0
- package/src/primitives/Hash.ts +232 -96
- package/src/primitives/SymmetricKey.ts +145 -1
- package/src/primitives/__tests/Hash.additional.test.ts +65 -0
- package/src/primitives/__tests/Hash.test.ts +6 -1
- package/src/script/__tests/Spend.test.ts +45 -4
- package/src/transaction/MerklePath.ts +1 -1
- package/src/transaction/__tests/Transaction.test.ts +17 -0
- package/src/wallet/Wallet.interfaces.ts +16 -1
- package/src/wallet/WalletClient.ts +1 -1
- package/src/wallet/substrates/window.CWI.ts +1 -1
|
@@ -12,6 +12,32 @@ const index_js_4 = require("../script/index.js");
|
|
|
12
12
|
const index_js_5 = require("../primitives/index.js");
|
|
13
13
|
const index_js_6 = require("../overlay-tools/index.js");
|
|
14
14
|
const ContactsManager_js_1 = require("./ContactsManager.js");
|
|
15
|
+
/**
|
|
16
|
+
* Maximum number of identity certificates to parse synchronously before yielding to the
|
|
17
|
+
* event loop. Keeps the main thread responsive when an overlay query returns many results
|
|
18
|
+
* (e.g. a bulk enrichment of N identityKeys).
|
|
19
|
+
*/
|
|
20
|
+
const PARSE_BATCH_SIZE = 32;
|
|
21
|
+
/**
|
|
22
|
+
* Yield control to the event loop so queued microtasks / timers can run. Uses
|
|
23
|
+
* `scheduler.yield()` when available (Chromium) or a 0ms macrotask fallback.
|
|
24
|
+
*/
|
|
25
|
+
async function yieldToEventLoop() {
|
|
26
|
+
const sched = globalThis.scheduler;
|
|
27
|
+
if (sched != null && typeof sched.yield === 'function') {
|
|
28
|
+
return await sched.yield();
|
|
29
|
+
}
|
|
30
|
+
return await new Promise((resolve) => setTimeout(resolve, 0));
|
|
31
|
+
}
|
|
32
|
+
/** Normalize either legacy boolean / new options object into a canonical { useContacts, parallel }. */
|
|
33
|
+
function normalizeOpts(raw) {
|
|
34
|
+
if (raw === undefined)
|
|
35
|
+
return { useContacts: false, parallel: false };
|
|
36
|
+
if (typeof raw === 'boolean')
|
|
37
|
+
return { useContacts: raw, parallel: false };
|
|
38
|
+
const useContacts = raw.overrideWithContacts ?? raw.useContacts ?? false;
|
|
39
|
+
return { useContacts, parallel: raw.parallel === true };
|
|
40
|
+
}
|
|
15
41
|
/**
|
|
16
42
|
* IdentityClient lets you discover who others are, and let the world know who you are.
|
|
17
43
|
*/
|
|
@@ -84,77 +110,84 @@ class IdentityClient {
|
|
|
84
110
|
throw new Error('Public reveal failed: failed to create action!');
|
|
85
111
|
}
|
|
86
112
|
/**
|
|
87
|
-
* Resolves displayable identity certificates
|
|
113
|
+
* Resolves displayable identity certificates issued to a given identity key.
|
|
88
114
|
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
115
|
+
* **Default behavior (changed): contacts are NOT consulted.** Most clients have no
|
|
116
|
+
* contacts saved locally, so the previous "contacts-first" default paid setup cost for no
|
|
117
|
+
* gain. Pass `{ useContacts: true }` to opt in — appropriate when you know the user has
|
|
118
|
+
* saved contacts and prefers a local hit over a fresh overlay answer.
|
|
119
|
+
*
|
|
120
|
+
* When `useContacts: true`:
|
|
121
|
+
* - Default short-circuits: if a contact matches, the overlay is skipped entirely.
|
|
122
|
+
* - `{ parallel: true }` fires contacts and overlay in parallel; contact wins on hit.
|
|
92
123
|
*
|
|
93
124
|
* @param args - Arguments for requesting the discovery based on the identity key.
|
|
94
|
-
* @param
|
|
95
|
-
* contacts are skipped entirely and the overlay is queried directly. Boolean kept for legacy
|
|
96
|
-
* call sites; new code should prefer the options-object form.
|
|
97
|
-
* @returns The promise resolves to displayable identities.
|
|
125
|
+
* @param opts - Boolean (legacy) or options object. Boolean `true` ≡ `{ useContacts: true }`.
|
|
98
126
|
*/
|
|
99
|
-
async resolveByIdentityKey(args,
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
127
|
+
async resolveByIdentityKey(args, opts = false) {
|
|
128
|
+
const { useContacts, parallel } = normalizeOpts(opts);
|
|
129
|
+
// Fast path: skip contacts entirely. Default — straight overlay query,
|
|
130
|
+
// no listOutputs / decrypt / cache churn.
|
|
131
|
+
if (!useContacts) {
|
|
132
|
+
const certificatesResult = await this.wallet.discoverByIdentityKey(args, this.originator);
|
|
133
|
+
const certs = certificatesResult?.certificates ?? [];
|
|
134
|
+
return await IdentityClient.parseIdentities(certs);
|
|
135
|
+
}
|
|
136
|
+
if (!parallel) {
|
|
106
137
|
const contacts = await this.contactsManager.getContacts(args.identityKey);
|
|
107
138
|
if (contacts.length > 0)
|
|
108
139
|
return contacts;
|
|
109
140
|
const certificatesResult = await this.wallet.discoverByIdentityKey(args, this.originator);
|
|
110
141
|
const certs = certificatesResult?.certificates ?? [];
|
|
111
|
-
return
|
|
142
|
+
return await IdentityClient.parseIdentities(certs);
|
|
112
143
|
}
|
|
113
144
|
const [contacts, certificatesResult] = await Promise.all([
|
|
114
|
-
|
|
115
|
-
? this.contactsManager.getContacts(args.identityKey)
|
|
116
|
-
: Promise.resolve([]),
|
|
145
|
+
this.contactsManager.getContacts(args.identityKey),
|
|
117
146
|
this.wallet.discoverByIdentityKey(args, this.originator)
|
|
118
147
|
]);
|
|
119
148
|
if (contacts.length > 0)
|
|
120
149
|
return contacts;
|
|
121
150
|
const certs = certificatesResult?.certificates ?? [];
|
|
122
|
-
return
|
|
151
|
+
return await IdentityClient.parseIdentities(certs);
|
|
123
152
|
}
|
|
124
153
|
/**
|
|
125
|
-
* Resolves displayable identity certificates by specific identity attributes
|
|
154
|
+
* Resolves displayable identity certificates by specific identity attributes.
|
|
126
155
|
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
156
|
+
* **Default behavior (changed): contacts are NOT consulted.** See
|
|
157
|
+
* {@link resolveByIdentityKey} for the reasoning. Pass `{ useContacts: true }` to opt in.
|
|
129
158
|
*
|
|
130
159
|
* @param args - Attributes and optional parameters used to discover certificates.
|
|
131
|
-
* @param
|
|
132
|
-
* for legacy call sites; new code should prefer the options-object form.
|
|
133
|
-
* @returns The promise resolves to displayable identities.
|
|
160
|
+
* @param opts - Boolean (legacy) or options object. Boolean `true` ≡ `{ useContacts: true }`.
|
|
134
161
|
*/
|
|
135
|
-
async resolveByAttributes(args,
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
162
|
+
async resolveByAttributes(args, opts = false) {
|
|
163
|
+
const { useContacts, parallel } = normalizeOpts(opts);
|
|
164
|
+
// Fast path: skip contacts entirely.
|
|
165
|
+
if (!useContacts) {
|
|
166
|
+
const certificatesResult = await this.wallet.discoverByAttributes(args, this.originator);
|
|
167
|
+
const certs = certificatesResult?.certificates ?? [];
|
|
168
|
+
return await IdentityClient.parseIdentities(certs);
|
|
169
|
+
}
|
|
170
|
+
if (!parallel) {
|
|
142
171
|
const contacts = await this.contactsManager.getContacts();
|
|
143
172
|
const matches = this.matchContactsByAttributes(contacts, args);
|
|
144
173
|
if (matches.length > 0)
|
|
145
174
|
return matches;
|
|
146
175
|
const certificatesResult = await this.wallet.discoverByAttributes(args, this.originator);
|
|
147
176
|
const certs = certificatesResult?.certificates ?? [];
|
|
177
|
+
if (contacts.length === 0)
|
|
178
|
+
return await IdentityClient.parseIdentities(certs);
|
|
148
179
|
const contactByKey = new Map(contacts.map((contact) => [contact.identityKey, contact]));
|
|
149
|
-
return
|
|
180
|
+
return await IdentityClient.parseIdentitiesWithOverrides(certs, contactByKey);
|
|
150
181
|
}
|
|
151
182
|
const [contacts, certificatesResult] = await Promise.all([
|
|
152
|
-
|
|
183
|
+
this.contactsManager.getContacts(),
|
|
153
184
|
this.wallet.discoverByAttributes(args, this.originator)
|
|
154
185
|
]);
|
|
155
|
-
const contactByKey = new Map(contacts.map((contact) => [contact.identityKey, contact]));
|
|
156
186
|
const certs = certificatesResult?.certificates ?? [];
|
|
157
|
-
|
|
187
|
+
if (contacts.length === 0)
|
|
188
|
+
return await IdentityClient.parseIdentities(certs);
|
|
189
|
+
const contactByKey = new Map(contacts.map((contact) => [contact.identityKey, contact]));
|
|
190
|
+
return await IdentityClient.parseIdentitiesWithOverrides(certs, contactByKey);
|
|
158
191
|
}
|
|
159
192
|
/**
|
|
160
193
|
* Best-effort match of contacts against a `DiscoverByAttributesArgs.attributes` shape.
|
|
@@ -274,6 +307,42 @@ class IdentityClient {
|
|
|
274
307
|
async removeContact(identityKey) {
|
|
275
308
|
return await this.contactsManager.removeContact(identityKey);
|
|
276
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* Parse an array of certificates into DisplayableIdentity records, yielding to the
|
|
312
|
+
* event loop every {@link PARSE_BATCH_SIZE} entries so large result sets don't hog
|
|
313
|
+
* the main thread. Equivalent to `certs.map(parseIdentity)` for small inputs.
|
|
314
|
+
*/
|
|
315
|
+
static async parseIdentities(certs) {
|
|
316
|
+
const n = certs.length;
|
|
317
|
+
if (n <= PARSE_BATCH_SIZE) {
|
|
318
|
+
return certs.map((c) => IdentityClient.parseIdentity(c));
|
|
319
|
+
}
|
|
320
|
+
const out = new Array(n);
|
|
321
|
+
for (let i = 0; i < n; i++) {
|
|
322
|
+
out[i] = IdentityClient.parseIdentity(certs[i]);
|
|
323
|
+
if ((i + 1) % PARSE_BATCH_SIZE === 0)
|
|
324
|
+
await yieldToEventLoop();
|
|
325
|
+
}
|
|
326
|
+
return out;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Same as {@link parseIdentities} but consults a contact override map keyed by subject
|
|
330
|
+
* identity key. Used by `resolveByAttributes` when contacts are loaded.
|
|
331
|
+
*/
|
|
332
|
+
static async parseIdentitiesWithOverrides(certs, contactByKey) {
|
|
333
|
+
const n = certs.length;
|
|
334
|
+
if (n <= PARSE_BATCH_SIZE) {
|
|
335
|
+
return certs.map((cert) => contactByKey.get(cert.subject) ?? IdentityClient.parseIdentity(cert));
|
|
336
|
+
}
|
|
337
|
+
const out = new Array(n);
|
|
338
|
+
for (let i = 0; i < n; i++) {
|
|
339
|
+
const cert = certs[i];
|
|
340
|
+
out[i] = contactByKey.get(cert.subject) ?? IdentityClient.parseIdentity(cert);
|
|
341
|
+
if ((i + 1) % PARSE_BATCH_SIZE === 0)
|
|
342
|
+
await yieldToEventLoop();
|
|
343
|
+
}
|
|
344
|
+
return out;
|
|
345
|
+
}
|
|
277
346
|
/**
|
|
278
347
|
* Parse out identity and certifier attributes to display from an IdentityCertificate
|
|
279
348
|
* @param identityToParse - The Identity Certificate to parse
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityClient.js","sourceRoot":"","sources":["../../../../src/identity/IdentityClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IdentityClient.js","sourceRoot":"","sources":["../../../../src/identity/IdentityClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.HTTPSOverlayLookupFacilitator = exports.DEFAULT_TESTNET_SLAP_TRACKERS = exports.DEFAULT_SLAP_TRACKERS = void 0;
|
|
40
40
|
const index_js_1 = require("../transaction/index.js");
|
|
41
|
+
const Beef_js_1 = require("../transaction/Beef.js");
|
|
41
42
|
const OverlayAdminTokenTemplate_js_1 = __importDefault(require("./OverlayAdminTokenTemplate.js"));
|
|
42
43
|
const Utils = __importStar(require("../primitives/utils.js"));
|
|
43
44
|
const HostReputationTracker_js_1 = require("./HostReputationTracker.js");
|
|
@@ -64,6 +65,75 @@ exports.DEFAULT_TESTNET_SLAP_TRACKERS = [
|
|
|
64
65
|
'https://testnet-users.bapp.dev'
|
|
65
66
|
];
|
|
66
67
|
const MAX_TRACKER_WAIT_TIME = 5000;
|
|
68
|
+
function createDeadline(timeoutMs, controller) {
|
|
69
|
+
let expired = false;
|
|
70
|
+
let timer = null;
|
|
71
|
+
const promise = new Promise((_, reject) => {
|
|
72
|
+
timer = setTimeout(() => {
|
|
73
|
+
expired = true;
|
|
74
|
+
try {
|
|
75
|
+
controller?.abort();
|
|
76
|
+
}
|
|
77
|
+
catch { /* noop */ }
|
|
78
|
+
reject(new Error('Request timed out'));
|
|
79
|
+
}, timeoutMs);
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
promise,
|
|
83
|
+
cancel: () => {
|
|
84
|
+
if (timer !== null)
|
|
85
|
+
clearTimeout(timer);
|
|
86
|
+
},
|
|
87
|
+
didTimeOut: () => expired
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function normalizeLookupError(err, timedOut) {
|
|
91
|
+
if (timedOut)
|
|
92
|
+
return new Error('Request timed out');
|
|
93
|
+
if (err?.name === 'AbortError')
|
|
94
|
+
return new Error('Request timed out');
|
|
95
|
+
if (err instanceof Error)
|
|
96
|
+
return err;
|
|
97
|
+
return new Error(stringifyErrorValue(err));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Coerce a non-Error thrown value to a human-readable string without falling
|
|
101
|
+
* back to the default `'[object Object]'` for plain objects.
|
|
102
|
+
*/
|
|
103
|
+
function stringifyErrorValue(value) {
|
|
104
|
+
if (value === null)
|
|
105
|
+
return 'null';
|
|
106
|
+
if (value === undefined)
|
|
107
|
+
return 'undefined';
|
|
108
|
+
if (typeof value === 'string')
|
|
109
|
+
return value;
|
|
110
|
+
if (typeof value === 'number')
|
|
111
|
+
return value.toString();
|
|
112
|
+
if (typeof value === 'boolean')
|
|
113
|
+
return value ? 'true' : 'false';
|
|
114
|
+
if (typeof value === 'bigint')
|
|
115
|
+
return value.toString();
|
|
116
|
+
const message = value.message;
|
|
117
|
+
if (typeof message === 'string' && message.length > 0)
|
|
118
|
+
return message;
|
|
119
|
+
try {
|
|
120
|
+
return JSON.stringify(value) ?? 'Unknown error';
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return 'Unknown error';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Returns true when the given Content-Type header value represents
|
|
128
|
+
* `application/octet-stream`, ignoring case and any media-type parameters
|
|
129
|
+
* (e.g. `; charset=utf-8`).
|
|
130
|
+
*/
|
|
131
|
+
function isOctetStream(contentType) {
|
|
132
|
+
if (typeof contentType !== 'string')
|
|
133
|
+
return false;
|
|
134
|
+
const baseType = contentType.split(';', 1)[0].trim().toLowerCase();
|
|
135
|
+
return baseType === 'application/octet-stream';
|
|
136
|
+
}
|
|
67
137
|
class HTTPSOverlayLookupFacilitator {
|
|
68
138
|
constructor(httpClient = defaultFetch, allowHTTP = false) {
|
|
69
139
|
if (typeof httpClient !== 'function') {
|
|
@@ -78,68 +148,80 @@ class HTTPSOverlayLookupFacilitator {
|
|
|
78
148
|
throw new Error('HTTPS facilitator can only use URLs that start with "https:"');
|
|
79
149
|
}
|
|
80
150
|
const controller = typeof AbortController === 'undefined' ? undefined : new AbortController();
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
151
|
+
const deadline = createDeadline(timeout, controller);
|
|
152
|
+
// Hard wall-clock deadline: in some environments (e.g. browser/Electron CORS
|
|
153
|
+
// failures) the underlying fetch can stall without ever settling, and the
|
|
154
|
+
// AbortController signal alone is insufficient to make the returned promise
|
|
155
|
+
// resolve or reject. Race the fetch against a setTimeout-backed reject so
|
|
156
|
+
// the consumer-facing promise always settles within `timeout` ms.
|
|
157
|
+
const fetchPromise = this.performLookupRequest(url, question, controller?.signal);
|
|
158
|
+
// Swallow background rejection if the deadline wins first.
|
|
159
|
+
fetchPromise.catch(() => { });
|
|
87
160
|
try {
|
|
88
|
-
|
|
89
|
-
method: 'POST',
|
|
90
|
-
headers: {
|
|
91
|
-
'Content-Type': 'application/json',
|
|
92
|
-
'X-Aggregation': 'yes'
|
|
93
|
-
},
|
|
94
|
-
body: JSON.stringify({ service: question.service, query: question.query }),
|
|
95
|
-
signal: controller?.signal
|
|
96
|
-
};
|
|
97
|
-
const response = await this.fetchClient(`${url}/lookup`, fco);
|
|
98
|
-
if (!response.ok)
|
|
99
|
-
throw new Error(`Failed to facilitate lookup (HTTP ${response.status})`);
|
|
100
|
-
if (response.headers.get('content-type') === 'application/octet-stream') {
|
|
101
|
-
const payload = await response.arrayBuffer();
|
|
102
|
-
const r = new Utils.Reader([...new Uint8Array(payload)]);
|
|
103
|
-
const nOutpoints = r.readVarIntNum();
|
|
104
|
-
const outpoints = [];
|
|
105
|
-
for (let i = 0; i < nOutpoints; i++) {
|
|
106
|
-
const txid = Utils.toHex(r.read(32));
|
|
107
|
-
const outputIndex = r.readVarIntNum();
|
|
108
|
-
const contextLength = r.readVarIntNum();
|
|
109
|
-
let context;
|
|
110
|
-
if (contextLength > 0) {
|
|
111
|
-
context = r.read(contextLength);
|
|
112
|
-
}
|
|
113
|
-
outpoints.push({
|
|
114
|
-
txid,
|
|
115
|
-
outputIndex,
|
|
116
|
-
context
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
const beef = r.read();
|
|
120
|
-
return {
|
|
121
|
-
type: 'output-list',
|
|
122
|
-
outputs: outpoints.map(x => ({
|
|
123
|
-
outputIndex: x.outputIndex,
|
|
124
|
-
context: x.context,
|
|
125
|
-
beef: index_js_1.Transaction.fromBEEF(beef, x.txid).toBEEF()
|
|
126
|
-
}))
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
return await response.json();
|
|
131
|
-
}
|
|
161
|
+
return await Promise.race([fetchPromise, deadline.promise]);
|
|
132
162
|
}
|
|
133
163
|
catch (e) {
|
|
134
|
-
|
|
135
|
-
if (e?.name === 'AbortError')
|
|
136
|
-
throw new Error('Request timed out');
|
|
137
|
-
throw e;
|
|
164
|
+
throw normalizeLookupError(e, deadline.didTimeOut());
|
|
138
165
|
}
|
|
139
166
|
finally {
|
|
140
|
-
|
|
167
|
+
deadline.cancel();
|
|
141
168
|
}
|
|
142
169
|
}
|
|
170
|
+
async performLookupRequest(url, question, signal) {
|
|
171
|
+
const fco = {
|
|
172
|
+
method: 'POST',
|
|
173
|
+
headers: {
|
|
174
|
+
'Content-Type': 'application/json',
|
|
175
|
+
'X-Aggregation': 'yes'
|
|
176
|
+
},
|
|
177
|
+
body: JSON.stringify({ service: question.service, query: question.query }),
|
|
178
|
+
signal
|
|
179
|
+
};
|
|
180
|
+
const response = await this.fetchClient(`${url}/lookup`, fco);
|
|
181
|
+
if (!response.ok)
|
|
182
|
+
throw new Error(`Failed to facilitate lookup (HTTP ${response.status})`);
|
|
183
|
+
if (isOctetStream(response.headers.get('content-type'))) {
|
|
184
|
+
return await this.parseOctetStreamLookup(response);
|
|
185
|
+
}
|
|
186
|
+
return await response.json();
|
|
187
|
+
}
|
|
188
|
+
/** Parse the aggregated octet-stream lookup response into an output-list LookupAnswer. */
|
|
189
|
+
async parseOctetStreamLookup(response) {
|
|
190
|
+
const payload = await response.arrayBuffer();
|
|
191
|
+
const r = new Utils.Reader([...new Uint8Array(payload)]);
|
|
192
|
+
const nOutpoints = r.readVarIntNum();
|
|
193
|
+
const outpoints = [];
|
|
194
|
+
for (let i = 0; i < nOutpoints; i++) {
|
|
195
|
+
const txid = Utils.toHex(r.read(32));
|
|
196
|
+
const outputIndex = r.readVarIntNum();
|
|
197
|
+
const contextLength = r.readVarIntNum();
|
|
198
|
+
const context = contextLength > 0 ? r.read(contextLength) : undefined;
|
|
199
|
+
outpoints.push({ txid, outputIndex, context });
|
|
200
|
+
}
|
|
201
|
+
const beef = r.read();
|
|
202
|
+
const beefObj = Beef_js_1.Beef.fromBinary(beef);
|
|
203
|
+
const outputs = await this.extractAtomicOutputs(outpoints, beefObj);
|
|
204
|
+
return { type: 'output-list', outputs };
|
|
205
|
+
}
|
|
206
|
+
/** Memoize per-txid atomic BEEF extraction, yielding to the event loop between outputs. */
|
|
207
|
+
async extractAtomicOutputs(outpoints, beefObj) {
|
|
208
|
+
const beefByTxid = new Map();
|
|
209
|
+
const outputs = new Array(outpoints.length);
|
|
210
|
+
for (let idx = 0; idx < outpoints.length; idx++) {
|
|
211
|
+
const x = outpoints[idx];
|
|
212
|
+
let beefBytes = beefByTxid.get(x.txid);
|
|
213
|
+
if (beefBytes === undefined) {
|
|
214
|
+
beefBytes = beefObj.toBinaryAtomic(x.txid);
|
|
215
|
+
beefByTxid.set(x.txid, beefBytes);
|
|
216
|
+
}
|
|
217
|
+
outputs[idx] = { outputIndex: x.outputIndex, context: x.context, beef: beefBytes, txid: x.txid };
|
|
218
|
+
// Yield to event loop so UI animations and other JS don't starve.
|
|
219
|
+
if (idx > 0 && idx < outpoints.length - 1) {
|
|
220
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return outputs;
|
|
224
|
+
}
|
|
143
225
|
}
|
|
144
226
|
exports.HTTPSOverlayLookupFacilitator = HTTPSOverlayLookupFacilitator;
|
|
145
227
|
/**
|
|
@@ -180,13 +262,20 @@ class LookupResolver {
|
|
|
180
262
|
* answered (or with an empty result if no host has answered by `softTimeoutMs`).
|
|
181
263
|
*/
|
|
182
264
|
async query(question, timeout, options) {
|
|
183
|
-
let last = null;
|
|
184
265
|
// Existing fast-but-narrow contract: return at the first cumulative emission
|
|
185
266
|
// (the post-grace aggregate, or the final emission when every host settles
|
|
186
267
|
// before the grace window). Callers wanting progressive enrichment use query$().
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
268
|
+
// Take only the first emission, then explicitly close the iterator so the
|
|
269
|
+
// generator's `finally` block runs and clears any outstanding timers.
|
|
270
|
+
const iter = this.query$(question, timeout, options)[Symbol.asyncIterator]();
|
|
271
|
+
let last = null;
|
|
272
|
+
try {
|
|
273
|
+
const { value, done } = await iter.next();
|
|
274
|
+
if (done !== true && value != null)
|
|
275
|
+
last = value;
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
await iter.return?.(undefined);
|
|
190
279
|
}
|
|
191
280
|
return {
|
|
192
281
|
type: 'output-list',
|
|
@@ -271,33 +360,17 @@ class LookupResolver {
|
|
|
271
360
|
let graceTimer = null;
|
|
272
361
|
let graceFired = false;
|
|
273
362
|
let emittedOnce = false;
|
|
274
|
-
const beefKey = (beef) => {
|
|
275
|
-
if (typeof beef !== 'object' || beef == null)
|
|
276
|
-
return '';
|
|
277
|
-
return beef.join(',');
|
|
278
|
-
};
|
|
279
363
|
const mergeAnswer = (answer) => {
|
|
280
364
|
let added = false;
|
|
365
|
+
const now = Date.now();
|
|
281
366
|
for (const output of answer.outputs) {
|
|
282
|
-
const
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
try {
|
|
287
|
-
const txId = index_js_1.Transaction.fromBEEF(output.beef).id('hex');
|
|
288
|
-
memo = { txId, expiresAt: now + this.txMemoTtlMs };
|
|
289
|
-
if (this.txMemo.size > 4096)
|
|
290
|
-
this.evictOldest(this.txMemo);
|
|
291
|
-
this.txMemo.set(keyForBeef, memo);
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
continue;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
const uniqKey = `${memo.txId}.${output.outputIndex}`;
|
|
367
|
+
const txId = this.resolveTxIdForOutput(output, now);
|
|
368
|
+
if (txId === null)
|
|
369
|
+
continue;
|
|
370
|
+
const uniqKey = `${txId}.${output.outputIndex}`;
|
|
298
371
|
if (!outputsMap.has(uniqKey)) {
|
|
299
372
|
outputsMap.set(uniqKey, output);
|
|
300
|
-
txIds.push(
|
|
373
|
+
txIds.push(txId);
|
|
301
374
|
added = true;
|
|
302
375
|
}
|
|
303
376
|
}
|
|
@@ -483,7 +556,32 @@ class LookupResolver {
|
|
|
483
556
|
}
|
|
484
557
|
});
|
|
485
558
|
}
|
|
486
|
-
/**
|
|
559
|
+
/**
|
|
560
|
+
* Resolve a txid for an aggregated lookup output. Uses the threaded-through `output.txid`
|
|
561
|
+
* fast path when present; otherwise memoizes Transaction.fromBEEF(beef).id('hex') keyed by
|
|
562
|
+
* the BEEF byte sequence. Returns null when the BEEF is unparseable.
|
|
563
|
+
*/
|
|
564
|
+
resolveTxIdForOutput(output, now) {
|
|
565
|
+
if (typeof output.txid === 'string' && output.txid.length > 0) {
|
|
566
|
+
return output.txid;
|
|
567
|
+
}
|
|
568
|
+
const keyForBeef = Array.isArray(output.beef) ? output.beef.join(',') : '';
|
|
569
|
+
const memo = this.txMemo.get(keyForBeef);
|
|
570
|
+
if (typeof memo === 'object' && memo !== null && memo.expiresAt > now) {
|
|
571
|
+
return memo.txId;
|
|
572
|
+
}
|
|
573
|
+
try {
|
|
574
|
+
const txId = index_js_1.Transaction.fromBEEF(output.beef).id('hex');
|
|
575
|
+
if (this.txMemo.size > 4096)
|
|
576
|
+
this.evictOldest(this.txMemo);
|
|
577
|
+
this.txMemo.set(keyForBeef, { txId, expiresAt: now + this.txMemoTtlMs });
|
|
578
|
+
return txId;
|
|
579
|
+
}
|
|
580
|
+
catch {
|
|
581
|
+
return null;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
/** Evict an arbitrary "oldest" entry from a Map (iteration order). */
|
|
487
585
|
evictOldest(m) {
|
|
488
586
|
const firstKey = m.keys().next().value;
|
|
489
587
|
if (firstKey !== undefined)
|