@bsv/sdk 1.1.32 → 1.2.0
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/mod.js +4 -0
- package/dist/cjs/mod.js.map +1 -1
- package/dist/cjs/package.json +4 -3
- package/dist/cjs/src/auth/Certificate.js +163 -0
- package/dist/cjs/src/auth/Certificate.js.map +1 -0
- package/dist/cjs/src/auth/index.js +9 -0
- package/dist/cjs/src/auth/index.js.map +1 -0
- package/dist/cjs/src/compat/BSM.js +17 -7
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +17 -7
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +17 -7
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +17 -7
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/index.js +17 -7
- package/dist/cjs/src/compat/index.js.map +1 -1
- package/dist/cjs/src/messages/index.js +17 -7
- package/dist/cjs/src/messages/index.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +170 -0
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -0
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +69 -0
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -0
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +336 -0
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -0
- package/dist/cjs/src/overlay-tools/index.js +29 -0
- package/dist/cjs/src/overlay-tools/index.js.map +1 -0
- package/dist/cjs/src/primitives/PrivateKey.js +17 -7
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +17 -7
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/index.js +17 -7
- package/dist/cjs/src/primitives/index.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +17 -7
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +218 -0
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -0
- package/dist/cjs/src/script/templates/index.js +3 -1
- package/dist/cjs/src/script/templates/index.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +35 -6
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +13 -4
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +177 -0
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -0
- package/dist/cjs/src/wallet/KeyDeriver.js +174 -0
- package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -0
- package/dist/cjs/src/wallet/ProtoWallet.js +245 -0
- package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -0
- package/dist/cjs/src/wallet/Wallet.interfaces.js +3 -0
- package/dist/cjs/src/wallet/Wallet.interfaces.js.map +1 -0
- package/dist/cjs/src/wallet/WalletClient.js +181 -0
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -0
- package/dist/cjs/src/wallet/WalletError.js +28 -0
- package/dist/cjs/src/wallet/WalletError.js.map +1 -0
- package/dist/cjs/src/wallet/index.js +34 -0
- package/dist/cjs/src/wallet/index.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +45 -0
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/WalletWire.js +3 -0
- package/dist/cjs/src/wallet/substrates/WalletWire.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/WalletWireCalls.js +36 -0
- package/dist/cjs/src/wallet/substrates/WalletWireCalls.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1821 -0
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +1305 -0
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/XDM.js +130 -0
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/index.js +33 -0
- package/dist/cjs/src/wallet/substrates/index.js.map +1 -0
- package/dist/cjs/src/wallet/substrates/window.CWI.js +102 -0
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +4 -0
- package/dist/esm/mod.js.map +1 -1
- package/dist/esm/src/auth/Certificate.js +185 -0
- package/dist/esm/src/auth/Certificate.js.map +1 -0
- package/dist/esm/src/auth/index.js +2 -0
- package/dist/esm/src/auth/index.js.map +1 -0
- package/dist/esm/src/overlay-tools/LookupResolver.js +167 -0
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -0
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +64 -0
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -0
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +335 -0
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -0
- package/dist/esm/src/overlay-tools/index.js +6 -0
- package/dist/esm/src/overlay-tools/index.js.map +1 -0
- package/dist/esm/src/script/templates/PushDrop.js +215 -0
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -0
- package/dist/esm/src/script/templates/index.js +1 -0
- package/dist/esm/src/script/templates/index.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +35 -6
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +13 -4
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +174 -0
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -0
- package/dist/esm/src/wallet/KeyDeriver.js +172 -0
- package/dist/esm/src/wallet/KeyDeriver.js.map +1 -0
- package/dist/esm/src/wallet/ProtoWallet.js +207 -0
- package/dist/esm/src/wallet/ProtoWallet.js.map +1 -0
- package/dist/esm/src/wallet/Wallet.interfaces.js +2 -0
- package/dist/esm/src/wallet/Wallet.interfaces.js.map +1 -0
- package/dist/esm/src/wallet/WalletClient.js +177 -0
- package/dist/esm/src/wallet/WalletClient.js.map +1 -0
- package/dist/esm/src/wallet/WalletError.js +25 -0
- package/dist/esm/src/wallet/WalletError.js.map +1 -0
- package/dist/esm/src/wallet/index.js +9 -0
- package/dist/esm/src/wallet/index.js.map +1 -0
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +42 -0
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -0
- package/dist/esm/src/wallet/substrates/WalletWire.js +2 -0
- package/dist/esm/src/wallet/substrates/WalletWire.js.map +1 -0
- package/dist/esm/src/wallet/substrates/WalletWireCalls.js +34 -0
- package/dist/esm/src/wallet/substrates/WalletWireCalls.js.map +1 -0
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1816 -0
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -0
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +1300 -0
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -0
- package/dist/esm/src/wallet/substrates/XDM.js +128 -0
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -0
- package/dist/esm/src/wallet/substrates/index.js +8 -0
- package/dist/esm/src/wallet/substrates/index.js.map +1 -0
- package/dist/esm/src/wallet/substrates/window.CWI.js +100 -0
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +4 -0
- package/dist/types/mod.d.ts.map +1 -1
- package/dist/types/src/auth/Certificate.d.ts +76 -0
- package/dist/types/src/auth/Certificate.d.ts.map +1 -0
- package/dist/types/src/auth/index.d.ts +2 -0
- package/dist/types/src/auth/index.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +71 -0
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +44 -0
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +90 -0
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/index.d.ts +6 -0
- package/dist/types/src/overlay-tools/index.d.ts.map +1 -0
- package/dist/types/src/script/templates/PushDrop.d.ts +53 -0
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -0
- package/dist/types/src/script/templates/index.d.ts +1 -0
- package/dist/types/src/script/templates/index.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +16 -1
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts +92 -0
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -0
- package/dist/types/src/wallet/KeyDeriver.d.ts +72 -0
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -0
- package/dist/types/src/wallet/ProtoWallet.d.ts +415 -0
- package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -0
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +996 -0
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -0
- package/dist/types/src/wallet/WalletClient.d.ts +182 -0
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -0
- package/dist/types/src/wallet/WalletError.d.ts +14 -0
- package/dist/types/src/wallet/WalletError.d.ts.map +1 -0
- package/dist/types/src/wallet/index.d.ts +9 -0
- package/dist/types/src/wallet/index.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts +9 -0
- package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/WalletWire.d.ts +7 -0
- package/dist/types/src/wallet/substrates/WalletWire.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/WalletWireCalls.d.ts +33 -0
- package/dist/types/src/wallet/substrates/WalletWireCalls.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts +18 -0
- package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +196 -0
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/XDM.d.ts +412 -0
- package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/index.d.ts +8 -0
- package/dist/types/src/wallet/substrates/index.d.ts.map +1 -0
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +410 -0
- package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/overlay-tools.md +551 -0
- package/docs/script.md +135 -0
- package/docs/totp.md +119 -0
- package/docs/transaction.md +25 -0
- package/docs/wallet-substrates.md +10 -0
- package/docs/wallet.md +4182 -0
- package/mod.ts +5 -1
- package/package.json +44 -3
- package/src/auth/Certificate.ts +233 -0
- package/src/auth/__tests/Certificate.test.ts +282 -0
- package/src/auth/index.ts +1 -0
- package/src/overlay-tools/LookupResolver.ts +228 -0
- package/src/overlay-tools/OverlayAdminTokenTemplate.ts +79 -0
- package/src/overlay-tools/SHIPBroadcaster.ts +405 -0
- package/src/overlay-tools/__tests/LookupResolver.test.ts +1403 -0
- package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +69 -0
- package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +904 -0
- package/src/overlay-tools/index.ts +5 -0
- package/src/script/templates/PushDrop.ts +246 -0
- package/src/script/templates/__tests/PushDrop.test.ts +158 -0
- package/src/script/templates/index.ts +1 -0
- package/src/transaction/Beef.ts +36 -6
- package/src/transaction/Transaction.ts +13 -4
- package/src/transaction/__tests/Beef.test.ts +20 -6
- package/src/transaction/http/DefaultHttpClient.ts +1 -1
- package/src/wallet/CachedKeyDeriver.ts +193 -0
- package/src/wallet/KeyDeriver.ts +178 -0
- package/src/wallet/ProtoWallet.ts +732 -0
- package/src/wallet/Wallet.interfaces.ts +1170 -0
- package/src/wallet/WalletClient.ts +201 -0
- package/src/wallet/WalletError.ts +27 -0
- package/src/wallet/__tests/CachedKeyDeriver.test.ts +322 -0
- package/src/wallet/__tests/KeyDeriver.test.ts +118 -0
- package/src/wallet/__tests/ProtoWallet.test.ts +543 -0
- package/src/wallet/index.ts +8 -0
- package/src/wallet/substrates/HTTPWalletWire.ts +47 -0
- package/src/wallet/substrates/WalletWire.ts +6 -0
- package/src/wallet/substrates/WalletWireCalls.ts +34 -0
- package/src/wallet/substrates/WalletWireProcessor.ts +2046 -0
- package/src/wallet/substrates/WalletWireTransceiver.ts +1454 -0
- package/src/wallet/substrates/XDM.ts +157 -0
- package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +2194 -0
- package/src/wallet/substrates/__tests/XDM.test.ts +659 -0
- package/src/wallet/substrates/index.ts +7 -0
- package/src/wallet/substrates/window.CWI.ts +133 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/messages/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/messages/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oEAAmD;AACnD,0EAAyD"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HTTPSOverlayLookupFacilitator = exports.DEFAULT_SLAP_TRACKERS = void 0;
|
|
7
|
+
const index_js_1 = require("../transaction/index.js");
|
|
8
|
+
const OverlayAdminTokenTemplate_js_1 = __importDefault(require("./OverlayAdminTokenTemplate.js"));
|
|
9
|
+
/** Default SLAP trackers */
|
|
10
|
+
exports.DEFAULT_SLAP_TRACKERS = [
|
|
11
|
+
// Babbage primary overlay service
|
|
12
|
+
'https://overlay.babbage.systems',
|
|
13
|
+
// Babbage example overlay
|
|
14
|
+
'https://overlay-example.babbage.systems',
|
|
15
|
+
// The Babbage office building
|
|
16
|
+
'https://office.babbage.systems'
|
|
17
|
+
// NOTE: Other entities may submit pull requests to the library if they maintain SLAP overlay services.
|
|
18
|
+
// Additional trackers run by different entities contribute to greater network resiliency.
|
|
19
|
+
// It also generally doesn't hurt to have more trackers in this list.
|
|
20
|
+
// DISCLAIMER:
|
|
21
|
+
// Trackers known to host invalid or illegal records will be removed at the discretion of the BSV Association.
|
|
22
|
+
];
|
|
23
|
+
class HTTPSOverlayLookupFacilitator {
|
|
24
|
+
constructor(httpClient = fetch) {
|
|
25
|
+
this.fetchClient = httpClient;
|
|
26
|
+
}
|
|
27
|
+
async lookup(url, question) {
|
|
28
|
+
if (!url.startsWith('https:')) {
|
|
29
|
+
throw new Error('HTTPS facilitator can only use URLs that start with "https:"');
|
|
30
|
+
}
|
|
31
|
+
const response = await fetch(`${url}/lookup`, {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
headers: {
|
|
34
|
+
'Content-Type': 'application/json'
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify({ service: question.service, query: question.query })
|
|
37
|
+
});
|
|
38
|
+
if (response.ok) {
|
|
39
|
+
return await response.json();
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new Error('Failed to facilitate lookup');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.HTTPSOverlayLookupFacilitator = HTTPSOverlayLookupFacilitator;
|
|
47
|
+
/**
|
|
48
|
+
* Represents an SHIP transaction broadcaster.
|
|
49
|
+
*/
|
|
50
|
+
class LookupResolver {
|
|
51
|
+
constructor(config) {
|
|
52
|
+
const { facilitator, slapTrackers, hostOverrides, additionalHosts } = config !== null && config !== void 0 ? config : {};
|
|
53
|
+
this.facilitator = facilitator !== null && facilitator !== void 0 ? facilitator : new HTTPSOverlayLookupFacilitator();
|
|
54
|
+
this.slapTrackers = slapTrackers !== null && slapTrackers !== void 0 ? slapTrackers : exports.DEFAULT_SLAP_TRACKERS;
|
|
55
|
+
this.hostOverrides = hostOverrides !== null && hostOverrides !== void 0 ? hostOverrides : {};
|
|
56
|
+
this.additionalHosts = additionalHosts !== null && additionalHosts !== void 0 ? additionalHosts : {};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Given a LookupQuestion, returns a LookupAnswer. Aggregates across multiple services and supports resiliency.
|
|
60
|
+
*/
|
|
61
|
+
async query(question) {
|
|
62
|
+
let competentHosts = [];
|
|
63
|
+
if (question.service === 'ls_slap') {
|
|
64
|
+
competentHosts = this.slapTrackers;
|
|
65
|
+
}
|
|
66
|
+
else if (this.hostOverrides[question.service]) {
|
|
67
|
+
competentHosts = this.hostOverrides[question.service];
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
competentHosts = await this.findCompetentHosts(question.service);
|
|
71
|
+
}
|
|
72
|
+
if (this.additionalHosts[question.service]) {
|
|
73
|
+
competentHosts = [
|
|
74
|
+
...competentHosts,
|
|
75
|
+
...this.additionalHosts[question.service]
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
if (competentHosts.length < 1) {
|
|
79
|
+
throw new Error(`No competent hosts found by the SLAP trackers for lookup service: ${question.service}`);
|
|
80
|
+
}
|
|
81
|
+
// Use Promise.allSettled to handle individual host failures
|
|
82
|
+
const hostResponses = await Promise.allSettled(competentHosts.map(async (host) => await this.facilitator.lookup(host, question)));
|
|
83
|
+
const successfulResponses = hostResponses
|
|
84
|
+
.filter(result => result.status === 'fulfilled')
|
|
85
|
+
.map(result => (result).value);
|
|
86
|
+
if (successfulResponses.length === 0) {
|
|
87
|
+
throw new Error('No successful responses from any hosts');
|
|
88
|
+
}
|
|
89
|
+
// Process the successful responses
|
|
90
|
+
if (successfulResponses[0].type === 'freeform') {
|
|
91
|
+
// Return the first freeform response
|
|
92
|
+
return successfulResponses[0];
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Aggregate outputs from all successful responses
|
|
96
|
+
const outputs = new Map();
|
|
97
|
+
for (const response of successfulResponses) {
|
|
98
|
+
if (response.type !== 'output-list') {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
for (const output of response.outputs) {
|
|
103
|
+
try {
|
|
104
|
+
const key = `${index_js_1.Transaction.fromBEEF(output.beef).id('hex')}.${output.outputIndex}`;
|
|
105
|
+
outputs.set(key, output);
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
type: 'output-list',
|
|
118
|
+
outputs: Array.from(outputs.values())
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Returns a list of competent hosts for a given lookup service.
|
|
124
|
+
* @param service Service for which competent hosts are to be returned
|
|
125
|
+
* @returns Array of hosts competent for resolving queries
|
|
126
|
+
*/
|
|
127
|
+
async findCompetentHosts(service) {
|
|
128
|
+
const query = {
|
|
129
|
+
service: 'ls_slap',
|
|
130
|
+
query: {
|
|
131
|
+
service
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
// Use Promise.allSettled to handle individual SLAP tracker failures
|
|
135
|
+
const trackerResponses = await Promise.allSettled(this.slapTrackers.map(async (tracker) => await this.facilitator.lookup(tracker, query)));
|
|
136
|
+
const hosts = new Set();
|
|
137
|
+
for (const result of trackerResponses) {
|
|
138
|
+
if (result.status === 'fulfilled') {
|
|
139
|
+
const answer = result.value;
|
|
140
|
+
if (answer.type !== 'output-list') {
|
|
141
|
+
// Log invalid response and continue
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
for (const output of answer.outputs) {
|
|
145
|
+
try {
|
|
146
|
+
const tx = index_js_1.Transaction.fromBEEF(output.beef);
|
|
147
|
+
const script = tx.outputs[output.outputIndex].lockingScript;
|
|
148
|
+
const parsed = OverlayAdminTokenTemplate_js_1.default.decode(script);
|
|
149
|
+
if (parsed.topicOrService !== service || parsed.protocol !== 'SLAP') {
|
|
150
|
+
// Invalid advertisement, skip
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
hosts.add(parsed.domain);
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
// Invalid output, skip
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Log tracker failure and continue
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return [...hosts];
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.default = LookupResolver;
|
|
170
|
+
//# sourceMappingURL=LookupResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LookupResolver.js","sourceRoot":"","sources":["../../../../src/overlay-tools/LookupResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const PushDrop_js_1 = __importDefault(require("../script/templates/PushDrop.js"));
|
|
7
|
+
const index_js_1 = require("../primitives/index.js");
|
|
8
|
+
/**
|
|
9
|
+
* Script template enabling the creation, unlocking, and decoding of SHIP and SLAP advertisements.
|
|
10
|
+
*/
|
|
11
|
+
class OverlayAdminTokenTemplate {
|
|
12
|
+
/**
|
|
13
|
+
* Decodes a SHIP or SLAP advertisement from a given locking script.
|
|
14
|
+
* @param script Locking script comprising a SHIP or SLAP token to decode
|
|
15
|
+
* @returns Decoded SHIP or SLAP advertisement
|
|
16
|
+
*/
|
|
17
|
+
static decode(script) {
|
|
18
|
+
const result = PushDrop_js_1.default.decode(script);
|
|
19
|
+
if (result.fields.length < 4) {
|
|
20
|
+
throw new Error('Invalid SHIP/SLAP advertisement!');
|
|
21
|
+
}
|
|
22
|
+
const protocol = index_js_1.Utils.toUTF8(result.fields[0]);
|
|
23
|
+
if (protocol !== 'SHIP' && protocol !== 'SLAP') {
|
|
24
|
+
throw new Error('Invalid protocol type!');
|
|
25
|
+
}
|
|
26
|
+
const identityKey = index_js_1.Utils.toHex(result.fields[1]);
|
|
27
|
+
const domain = index_js_1.Utils.toUTF8(result.fields[2]);
|
|
28
|
+
const topicOrService = index_js_1.Utils.toUTF8(result.fields[3]);
|
|
29
|
+
return {
|
|
30
|
+
protocol,
|
|
31
|
+
identityKey,
|
|
32
|
+
domain,
|
|
33
|
+
topicOrService
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Constructs a new Overlay Admin template instance
|
|
38
|
+
* @param wallet Wallet to use for locking and unlocking
|
|
39
|
+
*/
|
|
40
|
+
constructor(wallet) {
|
|
41
|
+
this.pushDrop = new PushDrop_js_1.default(wallet);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a new advertisement locking script
|
|
45
|
+
* @param protocol SHIP or SLAP
|
|
46
|
+
* @param domain Domain where the topic or service is available
|
|
47
|
+
* @param topicOrService Topic or service to advertise
|
|
48
|
+
* @returns Locking script comprising the advertisement token
|
|
49
|
+
*/
|
|
50
|
+
async lock(protocol, domain, topicOrService) {
|
|
51
|
+
const { publicKey: identityKey } = await this.pushDrop.wallet.getPublicKey({ identityKey: true });
|
|
52
|
+
return await this.pushDrop.lock([
|
|
53
|
+
index_js_1.Utils.toArray(protocol, 'utf8'),
|
|
54
|
+
index_js_1.Utils.toArray(identityKey, 'hex'),
|
|
55
|
+
index_js_1.Utils.toArray(domain, 'utf8'),
|
|
56
|
+
index_js_1.Utils.toArray(topicOrService, 'utf8')
|
|
57
|
+
], [2, protocol === 'SHIP' ? 'Service Host Interconnect' : 'Service Lookup Availability'], '1', 'self');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Unlocks an advertisement token as part of a transaction.
|
|
61
|
+
* @param protocol SHIP or SLAP, depending on the token to unlock
|
|
62
|
+
* @returns Script unlocker capable of unlocking the advertisement token
|
|
63
|
+
*/
|
|
64
|
+
unlock(protocol) {
|
|
65
|
+
return this.pushDrop.unlock([2, protocol === 'SHIP' ? 'Service Host Interconnect' : 'Service Lookup Availability'], '1', 'self');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.default = OverlayAdminTokenTemplate;
|
|
69
|
+
//# sourceMappingURL=OverlayAdminTokenTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverlayAdminTokenTemplate.js","sourceRoot":"","sources":["../../../../src/overlay-tools/OverlayAdminTokenTemplate.ts"],"names":[],"mappings":";;;;;AAAA,kFAAsD;AAItD,qDAA8C;AAE9C;;GAEG;AACH,MAAqB,yBAAyB;IAG5C;;;;SAIK;IACL,MAAM,CAAC,MAAM,CAAC,MAAqB;QACjC,MAAM,MAAM,GAAG,qBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,QAAQ,GAAG,gBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;QACD,MAAM,WAAW,GAAG,gBAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,gBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,cAAc,GAAG,gBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACrD,OAAO;YACL,QAAQ;YACR,WAAW;YACX,MAAM;YACN,cAAc;SACf,CAAA;IACH,CAAC;IAED;;;SAGK;IACL,YAAY,MAAc;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAQ,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAED;;;;;;SAMK;IACL,KAAK,CAAC,IAAI,CAAC,QAAyB,EAAE,MAAc,EAAE,cAAsB;QAC1E,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACjG,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC7B;YACE,gBAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC/B,gBAAK,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;YACjC,gBAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7B,gBAAK,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;SACtC,EACD,CAAC,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,6BAA6B,CAAC,EACtF,GAAG,EACH,MAAM,CACP,CAAA;IACH,CAAC;IAED;;;;SAIK;IACL,MAAM,CAAC,QAAyB;QAI9B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,6BAA6B,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;IAClI,CAAC;CACF;AArED,4CAqEC"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HTTPSOverlayBroadcastFacilitator = void 0;
|
|
7
|
+
const index_js_1 = require("../transaction/index.js");
|
|
8
|
+
const LookupResolver_js_1 = __importDefault(require("./LookupResolver.js"));
|
|
9
|
+
const OverlayAdminTokenTemplate_js_1 = __importDefault(require("./OverlayAdminTokenTemplate.js"));
|
|
10
|
+
class HTTPSOverlayBroadcastFacilitator {
|
|
11
|
+
constructor(httpClient = fetch) {
|
|
12
|
+
this.httpClient = httpClient;
|
|
13
|
+
}
|
|
14
|
+
async send(url, taggedBEEF) {
|
|
15
|
+
if (!url.startsWith('https:')) {
|
|
16
|
+
throw new Error('HTTPS facilitator can only use URLs that start with "https:"');
|
|
17
|
+
}
|
|
18
|
+
const response = await fetch(`${url}/submit`, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: {
|
|
21
|
+
'Content-Type': 'application/octet-stream',
|
|
22
|
+
'X-Topics': JSON.stringify(taggedBEEF.topics)
|
|
23
|
+
},
|
|
24
|
+
body: new Uint8Array(taggedBEEF.beef)
|
|
25
|
+
});
|
|
26
|
+
if (response.ok) {
|
|
27
|
+
return await response.json();
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new Error('Failed to facilitate broadcast');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.HTTPSOverlayBroadcastFacilitator = HTTPSOverlayBroadcastFacilitator;
|
|
35
|
+
/**
|
|
36
|
+
* Represents a SHIP transaction broadcaster.
|
|
37
|
+
*/
|
|
38
|
+
class SHIPCast {
|
|
39
|
+
/**
|
|
40
|
+
* Constructs an instance of the SHIP broadcaster.
|
|
41
|
+
*
|
|
42
|
+
* @param {string[]} topics - The list of SHIP topic names where transactions are to be sent.
|
|
43
|
+
* @param {SHIPBroadcasterConfig} config - Configuration options for the SHIP broadcaster.
|
|
44
|
+
*/
|
|
45
|
+
constructor(topics, config) {
|
|
46
|
+
if (topics.length === 0) {
|
|
47
|
+
throw new Error('At least one topic is required for broadcast.');
|
|
48
|
+
}
|
|
49
|
+
if (topics.some(x => !x.startsWith('tm_'))) {
|
|
50
|
+
throw new Error('Every topic must start with "tm_".');
|
|
51
|
+
}
|
|
52
|
+
this.topics = topics;
|
|
53
|
+
const { facilitator, resolver, requireAcknowledgmentFromAllHostsForTopics, requireAcknowledgmentFromAnyHostForTopics, requireAcknowledgmentFromSpecificHostsForTopics } = config !== null && config !== void 0 ? config : {};
|
|
54
|
+
this.facilitator = facilitator !== null && facilitator !== void 0 ? facilitator : new HTTPSOverlayBroadcastFacilitator();
|
|
55
|
+
this.resolver = resolver !== null && resolver !== void 0 ? resolver : new LookupResolver_js_1.default();
|
|
56
|
+
this.requireAcknowledgmentFromAllHostsForTopics = requireAcknowledgmentFromAllHostsForTopics !== null && requireAcknowledgmentFromAllHostsForTopics !== void 0 ? requireAcknowledgmentFromAllHostsForTopics : 'all';
|
|
57
|
+
this.requireAcknowledgmentFromAnyHostForTopics = requireAcknowledgmentFromAnyHostForTopics !== null && requireAcknowledgmentFromAnyHostForTopics !== void 0 ? requireAcknowledgmentFromAnyHostForTopics : [];
|
|
58
|
+
this.requireAcknowledgmentFromSpecificHostsForTopics = requireAcknowledgmentFromSpecificHostsForTopics !== null && requireAcknowledgmentFromSpecificHostsForTopics !== void 0 ? requireAcknowledgmentFromSpecificHostsForTopics : {};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Broadcasts a transaction to Overlay Services via SHIP.
|
|
62
|
+
*
|
|
63
|
+
* @param {Transaction} tx - The transaction to be sent.
|
|
64
|
+
* @returns {Promise<BroadcastResponse | BroadcastFailure>} A promise that resolves to either a success or failure response.
|
|
65
|
+
*/
|
|
66
|
+
async broadcast(tx) {
|
|
67
|
+
let beef;
|
|
68
|
+
try {
|
|
69
|
+
beef = tx.toBEEF();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new Error('Transactions sent via SHIP to Overlay Services must be serializable to BEEF format.');
|
|
73
|
+
}
|
|
74
|
+
const interestedHosts = await this.findInterestedHosts();
|
|
75
|
+
if (Object.keys(interestedHosts).length === 0) {
|
|
76
|
+
return {
|
|
77
|
+
status: 'error',
|
|
78
|
+
code: 'ERR_NO_HOSTS_INTERESTED',
|
|
79
|
+
description: 'No hosts are interested in receiving this transaction.'
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const hostPromises = Object.entries(interestedHosts).map(async ([host, topics]) => {
|
|
83
|
+
try {
|
|
84
|
+
const steak = await this.facilitator.send(host, { beef, topics: [...topics] });
|
|
85
|
+
if (!steak || Object.keys(steak).length === 0) {
|
|
86
|
+
throw new Error('Steak has no topics.');
|
|
87
|
+
}
|
|
88
|
+
return { host, success: true, steak };
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
// Log error if needed
|
|
92
|
+
return { host, success: false, error };
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const results = await Promise.all(hostPromises);
|
|
96
|
+
const successfulHosts = results.filter(result => result.success);
|
|
97
|
+
if (successfulHosts.length === 0) {
|
|
98
|
+
return {
|
|
99
|
+
status: 'error',
|
|
100
|
+
code: 'ERR_ALL_HOSTS_REJECTED',
|
|
101
|
+
description: 'All SHIP hosts have rejected the transaction.'
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Collect host acknowledgments
|
|
105
|
+
const hostAcknowledgments = {};
|
|
106
|
+
for (const result of successfulHosts) {
|
|
107
|
+
const host = result.host;
|
|
108
|
+
const steak = result.steak;
|
|
109
|
+
const acknowledgedTopics = new Set();
|
|
110
|
+
for (const [topic, instructions] of Object.entries(steak)) {
|
|
111
|
+
const outputsToAdmit = instructions.outputsToAdmit;
|
|
112
|
+
const coinsToRetain = instructions.coinsToRetain;
|
|
113
|
+
if ((outputsToAdmit && outputsToAdmit.length > 0) || (coinsToRetain && coinsToRetain.length > 0)) {
|
|
114
|
+
acknowledgedTopics.add(topic);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
hostAcknowledgments[host] = acknowledgedTopics;
|
|
118
|
+
}
|
|
119
|
+
// Now, perform the checks
|
|
120
|
+
// Check requireAcknowledgmentFromAllHostsForTopics
|
|
121
|
+
let requiredTopicsAllHosts;
|
|
122
|
+
let requireAllHosts;
|
|
123
|
+
if (this.requireAcknowledgmentFromAllHostsForTopics === 'all') {
|
|
124
|
+
requiredTopicsAllHosts = this.topics;
|
|
125
|
+
requireAllHosts = 'all';
|
|
126
|
+
}
|
|
127
|
+
else if (this.requireAcknowledgmentFromAllHostsForTopics === 'any') {
|
|
128
|
+
requiredTopicsAllHosts = this.topics;
|
|
129
|
+
requireAllHosts = 'any';
|
|
130
|
+
}
|
|
131
|
+
else if (Array.isArray(this.requireAcknowledgmentFromAllHostsForTopics)) {
|
|
132
|
+
requiredTopicsAllHosts = this.requireAcknowledgmentFromAllHostsForTopics;
|
|
133
|
+
requireAllHosts = 'all';
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Default to 'all' and 'all'
|
|
137
|
+
requiredTopicsAllHosts = this.topics;
|
|
138
|
+
requireAllHosts = 'all';
|
|
139
|
+
}
|
|
140
|
+
if (requiredTopicsAllHosts.length > 0) {
|
|
141
|
+
const allHostsAcknowledged = this.checkAcknowledgmentFromAllHosts(hostAcknowledgments, requiredTopicsAllHosts, requireAllHosts);
|
|
142
|
+
if (!allHostsAcknowledged) {
|
|
143
|
+
return {
|
|
144
|
+
status: 'error',
|
|
145
|
+
code: 'ERR_REQUIRE_ACK_FROM_ALL_HOSTS_FAILED',
|
|
146
|
+
description: 'Not all hosts acknowledged the required topics.'
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Check requireAcknowledgmentFromAnyHostForTopics
|
|
151
|
+
let requiredTopicsAnyHost;
|
|
152
|
+
let requireAnyHost;
|
|
153
|
+
if (this.requireAcknowledgmentFromAnyHostForTopics === 'all') {
|
|
154
|
+
requiredTopicsAnyHost = this.topics;
|
|
155
|
+
requireAnyHost = 'all';
|
|
156
|
+
}
|
|
157
|
+
else if (this.requireAcknowledgmentFromAnyHostForTopics === 'any') {
|
|
158
|
+
requiredTopicsAnyHost = this.topics;
|
|
159
|
+
requireAnyHost = 'any';
|
|
160
|
+
}
|
|
161
|
+
else if (Array.isArray(this.requireAcknowledgmentFromAnyHostForTopics)) {
|
|
162
|
+
requiredTopicsAnyHost = this.requireAcknowledgmentFromAnyHostForTopics;
|
|
163
|
+
requireAnyHost = 'all';
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// No requirement
|
|
167
|
+
requiredTopicsAnyHost = [];
|
|
168
|
+
requireAnyHost = 'all';
|
|
169
|
+
}
|
|
170
|
+
if (requiredTopicsAnyHost.length > 0) {
|
|
171
|
+
const anyHostAcknowledged = this.checkAcknowledgmentFromAnyHost(hostAcknowledgments, requiredTopicsAnyHost, requireAnyHost);
|
|
172
|
+
if (!anyHostAcknowledged) {
|
|
173
|
+
return {
|
|
174
|
+
status: 'error',
|
|
175
|
+
code: 'ERR_REQUIRE_ACK_FROM_ANY_HOST_FAILED',
|
|
176
|
+
description: 'No host acknowledged the required topics.'
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Check requireAcknowledgmentFromSpecificHostsForTopics
|
|
181
|
+
if (Object.keys(this.requireAcknowledgmentFromSpecificHostsForTopics).length > 0) {
|
|
182
|
+
const specificHostsAcknowledged = this.checkAcknowledgmentFromSpecificHosts(hostAcknowledgments, this.requireAcknowledgmentFromSpecificHostsForTopics);
|
|
183
|
+
if (!specificHostsAcknowledged) {
|
|
184
|
+
return {
|
|
185
|
+
status: 'error',
|
|
186
|
+
code: 'ERR_REQUIRE_ACK_FROM_SPECIFIC_HOSTS_FAILED',
|
|
187
|
+
description: 'Specific hosts did not acknowledge the required topics.'
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// If all checks pass, return success
|
|
192
|
+
return {
|
|
193
|
+
status: 'success',
|
|
194
|
+
txid: tx.id('hex'),
|
|
195
|
+
message: `Sent to ${successfulHosts.length} Overlay Services ${successfulHosts.length === 1 ? 'host' : 'hosts'}.`
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
checkAcknowledgmentFromAllHosts(hostAcknowledgments, requiredTopics, require) {
|
|
199
|
+
for (const acknowledgedTopics of Object.values(hostAcknowledgments)) {
|
|
200
|
+
if (require === 'all') {
|
|
201
|
+
for (const topic of requiredTopics) {
|
|
202
|
+
if (!acknowledgedTopics.has(topic)) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else if (require === 'any') {
|
|
208
|
+
let anyAcknowledged = false;
|
|
209
|
+
for (const topic of requiredTopics) {
|
|
210
|
+
if (acknowledgedTopics.has(topic)) {
|
|
211
|
+
anyAcknowledged = true;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (!anyAcknowledged) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
checkAcknowledgmentFromAnyHost(hostAcknowledgments, requiredTopics, require) {
|
|
223
|
+
if (require === 'all') {
|
|
224
|
+
// All required topics must be acknowledged by at least one host
|
|
225
|
+
for (const acknowledgedTopics of Object.values(hostAcknowledgments)) {
|
|
226
|
+
let acknowledgesAllRequiredTopics = true;
|
|
227
|
+
for (const topic of requiredTopics) {
|
|
228
|
+
if (!acknowledgedTopics.has(topic)) {
|
|
229
|
+
acknowledgesAllRequiredTopics = false;
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (acknowledgesAllRequiredTopics) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// At least one required topic must be acknowledged by at least one host
|
|
241
|
+
for (const acknowledgedTopics of Object.values(hostAcknowledgments)) {
|
|
242
|
+
for (const topic of requiredTopics) {
|
|
243
|
+
if (acknowledgedTopics.has(topic)) {
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
checkAcknowledgmentFromSpecificHosts(hostAcknowledgments, requirements) {
|
|
252
|
+
for (const [host, requiredTopicsOrAllAny] of Object.entries(requirements)) {
|
|
253
|
+
const acknowledgedTopics = hostAcknowledgments[host];
|
|
254
|
+
if (!acknowledgedTopics) {
|
|
255
|
+
// Host did not respond successfully
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
let requiredTopics;
|
|
259
|
+
let require;
|
|
260
|
+
if (requiredTopicsOrAllAny === 'all' || requiredTopicsOrAllAny === 'any') {
|
|
261
|
+
require = requiredTopicsOrAllAny;
|
|
262
|
+
requiredTopics = this.topics;
|
|
263
|
+
}
|
|
264
|
+
else if (Array.isArray(requiredTopicsOrAllAny)) {
|
|
265
|
+
requiredTopics = requiredTopicsOrAllAny;
|
|
266
|
+
require = 'all';
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// Invalid configuration
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
if (require === 'all') {
|
|
273
|
+
for (const topic of requiredTopics) {
|
|
274
|
+
if (!acknowledgedTopics.has(topic)) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else if (require === 'any') {
|
|
280
|
+
let anyAcknowledged = false;
|
|
281
|
+
for (const topic of requiredTopics) {
|
|
282
|
+
if (acknowledgedTopics.has(topic)) {
|
|
283
|
+
anyAcknowledged = true;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (!anyAcknowledged) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Finds which hosts are interested in transactions tagged with the given set of topics.
|
|
296
|
+
*
|
|
297
|
+
* @returns A mapping of URLs for hosts interested in this transaction. Keys are URLs, values are which of our topics the specific host cares about.
|
|
298
|
+
*/
|
|
299
|
+
async findInterestedHosts() {
|
|
300
|
+
// TODO: cache the list of interested hosts to avoid spamming SHIP trackers.
|
|
301
|
+
// TODO: Monetize the operation of the SHIP tracker system.
|
|
302
|
+
// TODO: Cache ship/slap lookup with expiry (every 5min)
|
|
303
|
+
// Find all SHIP advertisements for the topics we care about
|
|
304
|
+
const results = {};
|
|
305
|
+
const answer = await this.resolver.query({
|
|
306
|
+
service: 'ls_ship',
|
|
307
|
+
query: {
|
|
308
|
+
topics: this.topics
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
if (answer.type !== 'output-list') {
|
|
312
|
+
throw new Error('SHIP answer is not an output list.');
|
|
313
|
+
}
|
|
314
|
+
for (const output of answer.outputs) {
|
|
315
|
+
try {
|
|
316
|
+
const tx = index_js_1.Transaction.fromBEEF(output.beef);
|
|
317
|
+
const script = tx.outputs[output.outputIndex].lockingScript;
|
|
318
|
+
const parsed = OverlayAdminTokenTemplate_js_1.default.decode(script);
|
|
319
|
+
if (!this.topics.includes(parsed.topicOrService) || parsed.protocol !== 'SHIP') {
|
|
320
|
+
// This should make us think a LOT less highly of this SHIP tracker if it ever happens...
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
if (!results[parsed.domain]) {
|
|
324
|
+
results[parsed.domain] = new Set();
|
|
325
|
+
}
|
|
326
|
+
results[parsed.domain].add(parsed.topicOrService);
|
|
327
|
+
}
|
|
328
|
+
catch (e) {
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return results;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
exports.default = SHIPCast;
|
|
336
|
+
//# sourceMappingURL=SHIPBroadcaster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SHIPBroadcaster.js","sourceRoot":"","sources":["../../../../src/overlay-tools/SHIPBroadcaster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.SHIPBroadcaster = exports.LookupResolver = exports.OverlayAdminTokenTemplate = void 0;
|
|
21
|
+
__exportStar(require("./LookupResolver.js"), exports);
|
|
22
|
+
__exportStar(require("./SHIPBroadcaster.js"), exports);
|
|
23
|
+
var OverlayAdminTokenTemplate_js_1 = require("./OverlayAdminTokenTemplate.js");
|
|
24
|
+
Object.defineProperty(exports, "OverlayAdminTokenTemplate", { enumerable: true, get: function () { return __importDefault(OverlayAdminTokenTemplate_js_1).default; } });
|
|
25
|
+
var LookupResolver_js_1 = require("./LookupResolver.js");
|
|
26
|
+
Object.defineProperty(exports, "LookupResolver", { enumerable: true, get: function () { return __importDefault(LookupResolver_js_1).default; } });
|
|
27
|
+
var SHIPBroadcaster_js_1 = require("./SHIPBroadcaster.js");
|
|
28
|
+
Object.defineProperty(exports, "SHIPBroadcaster", { enumerable: true, get: function () { return __importDefault(SHIPBroadcaster_js_1).default; } });
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/overlay-tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,uDAAoC;AACpC,+EAAqF;AAA5E,0JAAA,OAAO,OAA6B;AAC7C,yDAA+D;AAAtD,oIAAA,OAAO,OAAkB;AAClC,2DAAiE;AAAxD,sIAAA,OAAO,OAAmB"}
|