@bsv/overlay-discovery-services 1.4.0 → 1.4.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/cjs/package.json +4 -4
- package/dist/cjs/src/LegacyNinjaAdvertiser.js +235 -0
- package/dist/cjs/src/LegacyNinjaAdvertiser.js.map +1 -0
- package/dist/cjs/src/SHIP/SHIPLookupService.js +43 -11
- package/dist/cjs/src/SHIP/SHIPLookupService.js.map +1 -1
- package/dist/cjs/src/SHIP/SHIPStorage.js +33 -10
- package/dist/cjs/src/SHIP/SHIPStorage.js.map +1 -1
- package/dist/cjs/src/SHIP/SHIPTopicManager.js.map +1 -1
- package/dist/cjs/src/SLAP/SLAPLookupService.js +57 -22
- package/dist/cjs/src/SLAP/SLAPLookupService.js.map +1 -1
- package/dist/cjs/src/SLAP/SLAPStorage.js +29 -6
- package/dist/cjs/src/SLAP/SLAPStorage.js.map +1 -1
- package/dist/cjs/src/utils/generateDocs.js +81 -0
- package/dist/cjs/src/utils/generateDocs.js.map +1 -0
- package/dist/cjs/src/utils/getDocumentation.js +22 -0
- package/dist/cjs/src/utils/getDocumentation.js.map +1 -0
- package/dist/cjs/src/utils/isAdvertisableURI.js +21 -21
- package/dist/cjs/src/utils/isAdvertisableURI.js.map +1 -1
- package/dist/cjs/src/utils/isValidDomain.js +15 -0
- package/dist/cjs/src/utils/isValidDomain.js.map +1 -0
- package/dist/cjs/src/utils/isValidServiceName.js +14 -0
- package/dist/cjs/src/utils/isValidServiceName.js.map +1 -0
- package/dist/cjs/src/utils/verifyToken.js +22 -0
- package/dist/cjs/src/utils/verifyToken.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/LegacyNinjaAdvertiser.js +233 -0
- package/dist/esm/src/LegacyNinjaAdvertiser.js.map +1 -0
- package/dist/esm/src/SHIP/SHIPLookupService.js +43 -11
- package/dist/esm/src/SHIP/SHIPLookupService.js.map +1 -1
- package/dist/esm/src/SHIP/SHIPStorage.js +32 -10
- package/dist/esm/src/SHIP/SHIPStorage.js.map +1 -1
- package/dist/esm/src/SHIP/SHIPTopicManager.js.map +1 -1
- package/dist/esm/src/SLAP/SLAPLookupService.js +57 -22
- package/dist/esm/src/SLAP/SLAPLookupService.js.map +1 -1
- package/dist/esm/src/SLAP/SLAPStorage.js +28 -6
- package/dist/esm/src/SLAP/SLAPStorage.js.map +1 -1
- package/dist/esm/src/utils/generateDocs.js +46 -0
- package/dist/esm/src/utils/generateDocs.js.map +1 -0
- package/dist/esm/src/utils/getDocumentation.js +20 -0
- package/dist/esm/src/utils/getDocumentation.js.map +1 -0
- package/dist/esm/src/utils/isAdvertisableURI.js +21 -21
- package/dist/esm/src/utils/isAdvertisableURI.js.map +1 -1
- package/dist/esm/src/utils/isValidDomain.js +11 -0
- package/dist/esm/src/utils/isValidDomain.js.map +1 -0
- package/dist/esm/src/utils/isValidServiceName.js +10 -0
- package/dist/esm/src/utils/isValidServiceName.js.map +1 -0
- package/dist/esm/src/utils/verifyToken.js +18 -0
- package/dist/esm/src/utils/verifyToken.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/LegacyNinjaAdvertiser.d.ts +60 -0
- package/dist/types/src/LegacyNinjaAdvertiser.d.ts.map +1 -0
- package/dist/types/src/SHIP/SHIPLookupService.d.ts.map +1 -1
- package/dist/types/src/SHIP/SHIPStorage.d.ts +8 -5
- package/dist/types/src/SHIP/SHIPStorage.d.ts.map +1 -1
- package/dist/types/src/SHIP/SHIPTopicManager.d.ts.map +1 -1
- package/dist/types/src/SLAP/SLAPLookupService.d.ts.map +1 -1
- package/dist/types/src/SLAP/SLAPStorage.d.ts +4 -1
- package/dist/types/src/SLAP/SLAPStorage.d.ts.map +1 -1
- package/dist/types/src/SLAP/SLAPTopicManager.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +8 -0
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/utils/generateDocs.d.ts +2 -0
- package/dist/types/src/utils/generateDocs.d.ts.map +1 -0
- package/dist/types/src/utils/getDocumentation.d.ts +8 -0
- package/dist/types/src/utils/getDocumentation.d.ts.map +1 -0
- package/dist/types/src/utils/isAdvertisableURI.d.ts.map +1 -1
- package/dist/types/src/utils/isValidDomain.d.ts +7 -0
- package/dist/types/src/utils/isValidDomain.d.ts.map +1 -0
- package/dist/types/src/utils/isValidServiceName.d.ts +7 -0
- package/dist/types/src/utils/isValidServiceName.d.ts.map +1 -0
- package/dist/types/src/utils/verifyToken.d.ts +12 -0
- package/dist/types/src/utils/verifyToken.d.ts.map +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/SHIP/SHIPLookupService.ts +57 -17
- package/src/SHIP/SHIPStorage.ts +45 -15
- package/src/SHIP/SHIPTopicManager.ts +3 -3
- package/src/SLAP/SLAPLookup.docs.ts +1 -1
- package/src/SLAP/SLAPLookupService.ts +64 -26
- package/src/SLAP/SLAPStorage.ts +41 -11
- package/src/SLAP/SLAPTopicManager.ts +3 -3
- package/src/types.ts +8 -0
- package/src/utils/isAdvertisableURI.ts +50 -50
package/dist/cjs/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsv/overlay-discovery-services",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"description": "BSV Blockchain Overlay Services Engine",
|
|
6
6
|
"files": [
|
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
"typescript": "^5.2.2"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@bsv/overlay": "^0.4.
|
|
51
|
-
"@bsv/sdk": "^1.6.
|
|
52
|
-
"@bsv/wallet-toolbox-client": "^1.5.
|
|
50
|
+
"@bsv/overlay": "^0.4.4",
|
|
51
|
+
"@bsv/sdk": "^1.6.19",
|
|
52
|
+
"@bsv/wallet-toolbox-client": "^1.5.18",
|
|
53
53
|
"mongodb": "^6.11.0"
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -0,0 +1,235 @@
|
|
|
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.LegacyNinjaAdvertiser = void 0;
|
|
7
|
+
const pushdrop_1 = __importDefault(require("pushdrop"));
|
|
8
|
+
const ninja_base_1 = require("ninja-base");
|
|
9
|
+
const sdk_ts_1 = require("@babbage/sdk-ts");
|
|
10
|
+
const sdk_1 = require("@bsv/sdk");
|
|
11
|
+
const sendover_1 = require("sendover");
|
|
12
|
+
const toBEEF_js_1 = require("@babbage/sdk-ts/out/src/utils/toBEEF.js");
|
|
13
|
+
const AD_TOKEN_VALUE = 1;
|
|
14
|
+
// TODO: Add 'implements Advertiser' back, once Advertiser can be properly imported from Overlay Services.
|
|
15
|
+
/**
|
|
16
|
+
* Implements the Advertiser interface for managing SHIP and SLAP advertisements using a Ninja.
|
|
17
|
+
*/
|
|
18
|
+
class LegacyNinjaAdvertiser {
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new NinjaAdvertiser instance.
|
|
21
|
+
* @param privateKey - The private key used for signing transactions.
|
|
22
|
+
* @param dojoURL - The URL of the dojo server for the Ninja.
|
|
23
|
+
* @param hostingDomain - The base server URL for the NinjaAdvertiser.
|
|
24
|
+
*/
|
|
25
|
+
constructor(privateKey, dojoURL, hostingDomain) {
|
|
26
|
+
this.privateKey = privateKey;
|
|
27
|
+
this.dojoURL = dojoURL;
|
|
28
|
+
this.hostingDomain = hostingDomain;
|
|
29
|
+
this.ninja = new ninja_base_1.Ninja({
|
|
30
|
+
privateKey,
|
|
31
|
+
config: {
|
|
32
|
+
dojoURL
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sets the Engine instance to be used by this NinjaAdvertiser. This method allows for late
|
|
38
|
+
* binding of the Engine, thus avoiding circular dependencies during instantiation. The Engine
|
|
39
|
+
* provides necessary context with the relevant topic managers and lookup services,
|
|
40
|
+
* as well as the lookup function used for querying advertisements.
|
|
41
|
+
*
|
|
42
|
+
* @param engine The Engine instance to be associated with this NinjaAdvertiser. The Engine should
|
|
43
|
+
* be fully initialized before being passed to this method to ensure all functionalities are available.
|
|
44
|
+
*/
|
|
45
|
+
setLookupEngine(engine) {
|
|
46
|
+
this.engine = engine;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Utility function to create multiple advertisements in a single transaction.
|
|
50
|
+
* @param privateKey The private key used to sign the transaction.
|
|
51
|
+
* @param adsData Array of advertisement details.
|
|
52
|
+
* @param ninja Ninja instance for transaction processing.
|
|
53
|
+
* @param note A note attached to the transaction.
|
|
54
|
+
* @returns A promise that resolves to an array of TaggedBEEF objects.
|
|
55
|
+
* @throws Will throw an error if the locking key is invalid.
|
|
56
|
+
*/
|
|
57
|
+
async createAdvertisements(adsData) {
|
|
58
|
+
const identityKey = sdk_1.PublicKey.fromPrivateKey(new sdk_1.PrivateKey(this.privateKey, 'hex')).toString();
|
|
59
|
+
const outputs = await Promise.all(adsData.map(async (ad) => {
|
|
60
|
+
// Derive a locking private key using BRC-42 derivation scheme
|
|
61
|
+
const derivedPrivateKey = (0, sendover_1.getPaymentPrivateKey)({
|
|
62
|
+
recipientPrivateKey: this.privateKey,
|
|
63
|
+
senderPublicKey: identityKey,
|
|
64
|
+
invoiceNumber: `2-${ad.protocol}-1`,
|
|
65
|
+
returnType: 'hex'
|
|
66
|
+
});
|
|
67
|
+
const lockingScript = await pushdrop_1.default.create({
|
|
68
|
+
fields: [
|
|
69
|
+
Buffer.from(ad.protocol),
|
|
70
|
+
Buffer.from(identityKey, 'hex'),
|
|
71
|
+
Buffer.from(this.hostingDomain),
|
|
72
|
+
Buffer.from(ad.topicOrServiceName)
|
|
73
|
+
],
|
|
74
|
+
key: derivedPrivateKey
|
|
75
|
+
});
|
|
76
|
+
return {
|
|
77
|
+
satoshis: AD_TOKEN_VALUE,
|
|
78
|
+
script: lockingScript
|
|
79
|
+
};
|
|
80
|
+
}));
|
|
81
|
+
const tx = await this.ninja.getTransactionWithOutputs({
|
|
82
|
+
outputs,
|
|
83
|
+
note: 'SHIP/SLAP Advertisement Issuance',
|
|
84
|
+
autoProcess: true
|
|
85
|
+
});
|
|
86
|
+
const beef = (0, sdk_ts_1.toBEEFfromEnvelope)({
|
|
87
|
+
rawTx: tx.rawTx,
|
|
88
|
+
inputs: tx.inputs,
|
|
89
|
+
txid: tx.txid
|
|
90
|
+
}).beef;
|
|
91
|
+
return {
|
|
92
|
+
beef,
|
|
93
|
+
topics: [...new Set(adsData.map(ad => ad.protocol === 'SHIP' ? 'tm_ship' : 'tm_slap'))]
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Finds all SHIP advertisements for a given topic.
|
|
98
|
+
* @param topic - The topic name to search for.
|
|
99
|
+
* @returns A promise that resolves to an array of SHIP advertisements.
|
|
100
|
+
*/
|
|
101
|
+
async findAllAdvertisements(protocol) {
|
|
102
|
+
if (this.engine === undefined) {
|
|
103
|
+
throw new Error('Advertiser must be configured with an overlay services engine for advertisement lookup.');
|
|
104
|
+
}
|
|
105
|
+
const advertisements = [];
|
|
106
|
+
const lookupAnswer = await this.engine.lookup({
|
|
107
|
+
service: protocol === 'SHIP' ? 'ls_ship' : 'ls_slap',
|
|
108
|
+
query: 'findAll'
|
|
109
|
+
});
|
|
110
|
+
// Lookup will currently always return type output-list
|
|
111
|
+
if (lookupAnswer.type === 'output-list') {
|
|
112
|
+
lookupAnswer.outputs.forEach(output => {
|
|
113
|
+
try {
|
|
114
|
+
// Parse out the advertisements using the provided parser
|
|
115
|
+
const tx = sdk_1.Transaction.fromBEEF(output.beef);
|
|
116
|
+
const advertisement = this.parseAdvertisement(tx.outputs[output.outputIndex].lockingScript);
|
|
117
|
+
if (advertisement !== undefined && advertisement !== null && advertisement.protocol === protocol) {
|
|
118
|
+
advertisements.push({
|
|
119
|
+
...advertisement,
|
|
120
|
+
beef: output.beef,
|
|
121
|
+
outputIndex: output.outputIndex
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.error('Failed to parse advertisement output:', error);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return advertisements;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Revokes an existing advertisement.
|
|
134
|
+
* @param advertisements - The advertisements to revoke, either SHIP or SLAP.
|
|
135
|
+
* @returns A promise that resolves to the revoked advertisement as TaggedBEEF.
|
|
136
|
+
*/
|
|
137
|
+
async revokeAdvertisements(advertisements) {
|
|
138
|
+
if (advertisements.length === 0) {
|
|
139
|
+
throw new Error('Must provide advertisements to revoke!');
|
|
140
|
+
}
|
|
141
|
+
const inputsByTxid = {};
|
|
142
|
+
for (const advertisement of advertisements) {
|
|
143
|
+
if (advertisement.beef === undefined || advertisement.outputIndex === undefined) {
|
|
144
|
+
throw new Error('Advertisement to revoke must contain tagged beef!');
|
|
145
|
+
}
|
|
146
|
+
// Parse the transaction and UTXO to spend
|
|
147
|
+
const advertisementTx = sdk_1.Transaction.fromBEEF(advertisement.beef);
|
|
148
|
+
const adTxid = advertisementTx.id('hex');
|
|
149
|
+
const outputToRedeem = advertisementTx.outputs[advertisement.outputIndex];
|
|
150
|
+
const identityKey = sdk_1.PublicKey.fromPrivateKey(new sdk_1.PrivateKey(this.privateKey, 'hex')).toString();
|
|
151
|
+
// Derive a unlocking private key using BRC-42 derivation scheme
|
|
152
|
+
const derivedPrivateKey = (0, sendover_1.getPaymentPrivateKey)({
|
|
153
|
+
recipientPrivateKey: this.privateKey,
|
|
154
|
+
senderPublicKey: identityKey,
|
|
155
|
+
invoiceNumber: `2-${advertisement.protocol}-1`,
|
|
156
|
+
returnType: 'hex'
|
|
157
|
+
});
|
|
158
|
+
const unlockingScript = await pushdrop_1.default.redeem({
|
|
159
|
+
key: derivedPrivateKey,
|
|
160
|
+
prevTxId: adTxid,
|
|
161
|
+
outputIndex: advertisement.outputIndex,
|
|
162
|
+
lockingScript: outputToRedeem.lockingScript.toHex(),
|
|
163
|
+
outputAmount: outputToRedeem.satoshis
|
|
164
|
+
});
|
|
165
|
+
const constructedRedeem = {
|
|
166
|
+
index: advertisement.outputIndex,
|
|
167
|
+
unlockingScript
|
|
168
|
+
};
|
|
169
|
+
// Group outputs by their transaction ID
|
|
170
|
+
if (inputsByTxid[adTxid] === undefined) {
|
|
171
|
+
inputsByTxid[adTxid] = {
|
|
172
|
+
...(0, toBEEF_js_1.toEnvelopeFromBEEF)(advertisementTx),
|
|
173
|
+
rawTx: advertisementTx.toHex(),
|
|
174
|
+
outputsToRedeem: [constructedRedeem]
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
inputsByTxid[adTxid].outputsToRedeem.push(constructedRedeem);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Create a new transaction that spends the SHIP or SLAP advertisement issuance token
|
|
182
|
+
const revokeTx = await this.ninja.getTransactionWithOutputs({
|
|
183
|
+
inputs: inputsByTxid,
|
|
184
|
+
outputs: [],
|
|
185
|
+
labels: [],
|
|
186
|
+
note: 'Revoked SHIP/SLAP advertisements',
|
|
187
|
+
autoProcess: true
|
|
188
|
+
});
|
|
189
|
+
const beef = (0, sdk_ts_1.toBEEFfromEnvelope)({
|
|
190
|
+
rawTx: revokeTx.rawTx,
|
|
191
|
+
inputs: revokeTx.inputs,
|
|
192
|
+
txid: revokeTx.txid
|
|
193
|
+
}).beef;
|
|
194
|
+
return {
|
|
195
|
+
beef,
|
|
196
|
+
topics: [...new Set(advertisements.map(ad => ad.protocol === 'SHIP' ? 'tm_ship' : 'tm_slap'))]
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Parses an advertisement from the provided output script.
|
|
201
|
+
* @param outputScript - The output script to parse.
|
|
202
|
+
* @returns An Advertisement object if the script matches the expected format, otherwise throws an error.
|
|
203
|
+
*/
|
|
204
|
+
parseAdvertisement(outputScript) {
|
|
205
|
+
try {
|
|
206
|
+
const result = pushdrop_1.default.decode({
|
|
207
|
+
script: outputScript.toHex(),
|
|
208
|
+
fieldFormat: 'buffer'
|
|
209
|
+
});
|
|
210
|
+
if (result.fields.length < 4) {
|
|
211
|
+
throw new Error('Invalid SHIP/SLAP advertisement!');
|
|
212
|
+
}
|
|
213
|
+
const protocol = result.fields[0].toString();
|
|
214
|
+
if (protocol !== 'SHIP' && protocol !== 'SLAP') {
|
|
215
|
+
throw new Error('Invalid protocol type!');
|
|
216
|
+
}
|
|
217
|
+
const identityKey = result.fields[1].toString('hex');
|
|
218
|
+
const domain = result.fields[2].toString();
|
|
219
|
+
const topicOrService = result.fields[3].toString();
|
|
220
|
+
// Construct a unified Advertisement object
|
|
221
|
+
return {
|
|
222
|
+
protocol: protocol,
|
|
223
|
+
identityKey,
|
|
224
|
+
domain,
|
|
225
|
+
topicOrService
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
console.error('Error parsing advertisement:', error);
|
|
230
|
+
throw new Error('Error parsing advertisement!');
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.LegacyNinjaAdvertiser = LegacyNinjaAdvertiser;
|
|
235
|
+
//# sourceMappingURL=LegacyNinjaAdvertiser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegacyNinjaAdvertiser.js","sourceRoot":"","sources":["../../../src/LegacyNinjaAdvertiser.ts"],"names":[],"mappings":";;;;;;AACA,wDAA+B;AAC/B,2CAAoD;AACpD,4CAAyE;AACzE,kCAAqE;AAErE,uCAA+C;AAE/C,uEAA4E;AAE5E,MAAM,cAAc,GAAG,CAAC,CAAA;AAExB,0GAA0G;AAE1G;;GAEG;AACH,MAAa,qBAAqB;IAIhC;;;;;OAKG;IACH,YACS,UAAkB,EAClB,OAAe,EACf,aAAqB;QAFrB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAQ;QACf,kBAAa,GAAb,aAAa,CAAQ;QAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAK,CAAC;YACrB,UAAU;YACV,MAAM,EAAE;gBACN,OAAO;aACR;SACF,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CAAC,MAAc;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,oBAAoB,CACxB,OAA4B;QAE5B,MAAM,WAAW,GAAG,eAAS,CAAC,cAAc,CAAC,IAAI,gBAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QAE/F,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACzD,8DAA8D;YAC9D,MAAM,iBAAiB,GAAG,IAAA,+BAAoB,EAAC;gBAC7C,mBAAmB,EAAE,IAAI,CAAC,UAAU;gBACpC,eAAe,EAAE,WAAW;gBAC5B,aAAa,EAAE,KAAK,EAAE,CAAC,QAAQ,IAAI;gBACnC,UAAU,EAAE,KAAK;aAClB,CAAC,CAAA;YAEF,MAAM,aAAa,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBAC1C,MAAM,EAAE;oBACN,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;iBACnC;gBACD,GAAG,EAAE,iBAAiB;aACvB,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,aAAa;aACtB,CAAA;QACH,CAAC,CAAC,CAAC,CAAA;QAEH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC;YACpD,OAAO;YACP,IAAI,EAAE,kCAAkC;YACxC,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,IAAA,2BAAkB,EAAC;YAC9B,KAAK,EAAE,EAAE,CAAC,KAAe;YACzB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,IAAI,EAAE,EAAE,CAAC,IAAI;SACS,CAAC,CAAC,IAAI,CAAA;QAE9B,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;SACxF,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAyB;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAA;QAC5G,CAAC;QACD,MAAM,cAAc,GAAoB,EAAE,CAAA;QAC1C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,OAAO,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACpD,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;QAEF,uDAAuD;QACvD,IAAI,YAAY,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACxC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACpC,IAAI,CAAC;oBACH,yDAAyD;oBACzD,MAAM,EAAE,GAAG,iBAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,CAAA;oBAC3F,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBACjG,cAAc,CAAC,IAAI,CAAC;4BAClB,GAAG,aAAa;4BAChB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,WAAW,EAAE,MAAM,CAAC,WAAW;yBAChC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAA;gBAC/D,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,cAA+B;QACxD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC3D,CAAC;QACD,MAAM,YAAY,GAAyC,EAAE,CAAA;QAC7D,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBAChF,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;YACtE,CAAC;YACD,0CAA0C;YAC1C,MAAM,eAAe,GAAG,iBAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAChE,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YACxC,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;YACzE,MAAM,WAAW,GAAG,eAAS,CAAC,cAAc,CAAC,IAAI,gBAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;YAE/F,gEAAgE;YAChE,MAAM,iBAAiB,GAAG,IAAA,+BAAoB,EAAC;gBAC7C,mBAAmB,EAAE,IAAI,CAAC,UAAU;gBACpC,eAAe,EAAE,WAAW;gBAC5B,aAAa,EAAE,KAAK,aAAa,CAAC,QAAQ,IAAI;gBAC9C,UAAU,EAAE,KAAK;aAClB,CAAC,CAAA;YAEF,MAAM,eAAe,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBAC5C,GAAG,EAAE,iBAAiB;gBACtB,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,aAAa,EAAE,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE;gBACnD,YAAY,EAAE,cAAc,CAAC,QAAQ;aACtC,CAAC,CAAA;YAEF,MAAM,iBAAiB,GAAG;gBACxB,KAAK,EAAE,aAAa,CAAC,WAAW;gBAChC,eAAe;aAChB,CAAA;YAED,wCAAwC;YACxC,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,YAAY,CAAC,MAAM,CAAC,GAAG;oBACrB,GAAG,IAAA,8BAAkB,EAAC,eAAe,CAAC;oBACtC,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE;oBAC9B,eAAe,EAAE,CAAC,iBAAiB,CAAC;iBACrC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC;QAED,qFAAqF;QACrF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC;YAC1D,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,kCAAkC;YACxC,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,IAAA,2BAAkB,EAAC;YAC9B,KAAK,EAAE,QAAQ,CAAC,KAAe;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACG,CAAC,CAAC,IAAI,CAAA;QAE9B,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;SAC/F,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,YAAoB;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,kBAAQ,CAAC,MAAM,CAAC;gBAC7B,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE;gBAC5B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAA;YAEF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACrD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;YAC5C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;YAC3C,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;YAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;YAElD,2CAA2C;YAC3C,OAAO;gBACL,QAAQ,EAAE,QAA2B;gBACrC,WAAW;gBACX,MAAM;gBACN,cAAc;aACf,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YACpD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;CACF;AAlPD,sDAkPC"}
|
|
@@ -51,21 +51,53 @@ class SHIPLookupService {
|
|
|
51
51
|
if (question.service !== 'ls_ship') {
|
|
52
52
|
throw new Error('Lookup service not supported!');
|
|
53
53
|
}
|
|
54
|
+
// Handle legacy "findAll" string query
|
|
54
55
|
if (question.query === 'findAll') {
|
|
55
56
|
return await this.storage.findAll();
|
|
56
57
|
}
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
// Handle object-based query
|
|
59
|
+
if (typeof question.query === 'object') {
|
|
60
|
+
const query = question.query;
|
|
61
|
+
// Handle new findAll mode with pagination
|
|
62
|
+
if (query.findAll) {
|
|
63
|
+
const { limit, skip, sortOrder } = query;
|
|
64
|
+
// Validate pagination parameters
|
|
65
|
+
if (typeof limit !== 'undefined' && (typeof limit !== 'number' || limit < 0)) {
|
|
66
|
+
throw new Error('query.limit must be a positive number if provided');
|
|
67
|
+
}
|
|
68
|
+
if (typeof skip !== 'undefined' && (typeof skip !== 'number' || skip < 0)) {
|
|
69
|
+
throw new Error('query.skip must be a non-negative number if provided');
|
|
70
|
+
}
|
|
71
|
+
if (typeof sortOrder !== 'undefined' && sortOrder !== 'asc' && sortOrder !== 'desc') {
|
|
72
|
+
throw new Error('query.sortOrder must be "asc" or "desc" if provided');
|
|
73
|
+
}
|
|
74
|
+
return await this.storage.findAll(limit, skip, sortOrder);
|
|
75
|
+
}
|
|
76
|
+
// Handle specific query with domain, topics, identityKey
|
|
77
|
+
const { domain, topics, identityKey, limit, skip, sortOrder } = query;
|
|
78
|
+
// Validate query parameters
|
|
79
|
+
if (typeof domain !== 'string' && typeof domain !== 'undefined') {
|
|
80
|
+
throw new Error('query.domain must be a string if provided');
|
|
81
|
+
}
|
|
82
|
+
if (!Array.isArray(topics) && typeof topics !== 'undefined') {
|
|
83
|
+
throw new Error('query.topics must be an array of strings if provided');
|
|
84
|
+
}
|
|
85
|
+
if (typeof identityKey !== 'string' && typeof identityKey !== 'undefined') {
|
|
86
|
+
throw new Error('query.identityKey must be a string if provided');
|
|
87
|
+
}
|
|
88
|
+
// Validate pagination parameters
|
|
89
|
+
if (typeof limit !== 'undefined' && (typeof limit !== 'number' || limit < 0)) {
|
|
90
|
+
throw new Error('query.limit must be a positive number if provided');
|
|
91
|
+
}
|
|
92
|
+
if (typeof skip !== 'undefined' && (typeof skip !== 'number' || skip < 0)) {
|
|
93
|
+
throw new Error('query.skip must be a non-negative number if provided');
|
|
94
|
+
}
|
|
95
|
+
if (typeof sortOrder !== 'undefined' && sortOrder !== 'asc' && sortOrder !== 'desc') {
|
|
96
|
+
throw new Error('query.sortOrder must be "asc" or "desc" if provided');
|
|
97
|
+
}
|
|
98
|
+
return await this.storage.findRecord({ domain, topics, identityKey, limit, skip, sortOrder });
|
|
61
99
|
}
|
|
62
|
-
|
|
63
|
-
throw new Error('query.topics must be an array of strings if provided');
|
|
64
|
-
}
|
|
65
|
-
if (typeof identityKey !== 'string' && typeof identityKey !== 'undefined') {
|
|
66
|
-
throw new Error('query.identityKey must be a string if provided');
|
|
67
|
-
}
|
|
68
|
-
return await this.storage.findRecord({ domain, topics, identityKey });
|
|
100
|
+
throw new Error('Invalid query format. Query must be "findAll" string or an object with valid parameters.');
|
|
69
101
|
}
|
|
70
102
|
async getDocumentation() {
|
|
71
103
|
return SHIPLookup_docs_js_1.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SHIPLookupService.js","sourceRoot":"","sources":["../../../../src/SHIP/SHIPLookupService.ts"],"names":[],"mappings":";;;;;;AAEA,kCAA0C;AAE1C,8EAAiD;AAEjD;;;;;GAKG;AACH,MAAa,iBAAiB;IAG5B,
|
|
1
|
+
{"version":3,"file":"SHIPLookupService.js","sourceRoot":"","sources":["../../../../src/SHIP/SHIPLookupService.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,10 +47,11 @@ class SHIPStorage {
|
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* Finds SHIP records based on a given query object.
|
|
50
|
-
* @param {Object} query The query object which may contain properties for domain, topics, and
|
|
50
|
+
* @param {Object} query The query object which may contain properties for domain, topics, identityKey, limit, and skip.
|
|
51
51
|
* @returns {Promise<UTXOReference[]>} Returns matching UTXO references.
|
|
52
52
|
*/
|
|
53
53
|
async findRecord(query) {
|
|
54
|
+
var _a;
|
|
54
55
|
const mongoQuery = {};
|
|
55
56
|
// Add domain to the query if provided
|
|
56
57
|
if (typeof query.domain === 'string') {
|
|
@@ -64,22 +65,44 @@ class SHIPStorage {
|
|
|
64
65
|
if (typeof query.identityKey === 'string') {
|
|
65
66
|
mongoQuery.identityKey = query.identityKey;
|
|
66
67
|
}
|
|
67
|
-
|
|
68
|
+
// Build the query with pagination
|
|
69
|
+
let cursor = this.shipRecords
|
|
68
70
|
.find(mongoQuery)
|
|
69
|
-
.project({ txid: 1, outputIndex: 1 })
|
|
71
|
+
.project({ txid: 1, outputIndex: 1, createdAt: 1 });
|
|
72
|
+
cursor.sort({ createdAt: (_a = query.sortOrder) !== null && _a !== void 0 ? _a : -1 });
|
|
73
|
+
// Apply pagination if provided
|
|
74
|
+
if (typeof query.skip === 'number' && query.skip > 0) {
|
|
75
|
+
cursor = cursor.skip(query.skip);
|
|
76
|
+
}
|
|
77
|
+
if (typeof query.limit === 'number' && query.limit > 0) {
|
|
78
|
+
cursor = cursor.limit(query.limit);
|
|
79
|
+
}
|
|
80
|
+
return await cursor
|
|
70
81
|
.toArray()
|
|
71
82
|
.then((results) => results.map((record) => ({
|
|
72
83
|
txid: record.txid,
|
|
73
|
-
outputIndex: record.outputIndex
|
|
84
|
+
outputIndex: record.outputIndex
|
|
74
85
|
})));
|
|
75
86
|
}
|
|
76
87
|
/**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
88
|
+
* Returns all results tracked by the overlay
|
|
89
|
+
* @param {number} limit Optional limit for pagination
|
|
90
|
+
* @param {number} skip Optional skip for pagination
|
|
91
|
+
* @param {string} sortOrder Optional sort order
|
|
92
|
+
* @returns {Promise<UTXOReference[]>} returns matching UTXO references
|
|
93
|
+
*/
|
|
94
|
+
async findAll(limit, skip, sortOrder) {
|
|
95
|
+
let cursor = this.shipRecords.find({})
|
|
96
|
+
.project({ txid: 1, outputIndex: 1, createdAt: 1 });
|
|
97
|
+
// Apply pagination if provided
|
|
98
|
+
cursor.sort({ createdAt: sortOrder !== null && sortOrder !== void 0 ? sortOrder : -1 });
|
|
99
|
+
if (typeof skip === 'number' && skip > 0) {
|
|
100
|
+
cursor = cursor.skip(skip);
|
|
101
|
+
}
|
|
102
|
+
if (typeof limit === 'number' && limit > 0) {
|
|
103
|
+
cursor = cursor.limit(limit);
|
|
104
|
+
}
|
|
105
|
+
return await cursor
|
|
83
106
|
.toArray()
|
|
84
107
|
.then(results => results.map(shipRecords => ({
|
|
85
108
|
txid: shipRecords.txid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SHIPStorage.js","sourceRoot":"","sources":["../../../../src/SHIP/SHIPStorage.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,WAAW;IAGtB;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"SHIPStorage.js","sourceRoot":"","sources":["../../../../src/SHIP/SHIPStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SHIPTopicManager.js","sourceRoot":"","sources":["../../../../src/SHIP/SHIPTopicManager.ts"],"names":[],"mappings":";;;;;;AACA,kCAAuD;AACvD,oGAA6F;AAC7F,wEAAiE;AACjE,4EAA+C;AAC/C,wFAAiF;AAEjF;;;;;;GAMG;AACH,MAAa,gBAAgB;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,yBAAyB,
|
|
1
|
+
{"version":3,"file":"SHIPTopicManager.js","sourceRoot":"","sources":["../../../../src/SHIP/SHIPTopicManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,32 +52,67 @@ class SLAPLookupService {
|
|
|
52
52
|
if (question.service !== 'ls_slap') {
|
|
53
53
|
throw new Error('Lookup service not supported!');
|
|
54
54
|
}
|
|
55
|
+
// Handle legacy "findAll" string query
|
|
55
56
|
if (question.query === 'findAll') {
|
|
56
57
|
return await this.storage.findAll();
|
|
57
58
|
}
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
// Handle object-based query
|
|
60
|
+
if (typeof question.query === 'object') {
|
|
61
|
+
const query = question.query;
|
|
62
|
+
// Handle new findAll mode with pagination
|
|
63
|
+
if (query.findAll) {
|
|
64
|
+
const { limit, skip, sortOrder } = query;
|
|
65
|
+
// Validate pagination parameters
|
|
66
|
+
if (typeof limit !== 'undefined' && (typeof limit !== 'number' || limit < 0)) {
|
|
67
|
+
throw new Error('query.limit must be a positive number if provided');
|
|
68
|
+
}
|
|
69
|
+
if (typeof skip !== 'undefined' && (typeof skip !== 'number' || skip < 0)) {
|
|
70
|
+
throw new Error('query.skip must be a non-negative number if provided');
|
|
71
|
+
}
|
|
72
|
+
if (typeof sortOrder !== 'undefined' && sortOrder !== 'asc' && sortOrder !== 'desc') {
|
|
73
|
+
throw new Error('query.sortOrder must be "asc" or "desc" if provided');
|
|
74
|
+
}
|
|
75
|
+
return await this.storage.findAll(limit, skip, sortOrder);
|
|
76
|
+
}
|
|
77
|
+
// Handle specific query with domain, service, identityKey
|
|
78
|
+
const { domain, service, identityKey, limit, skip, sortOrder } = query;
|
|
79
|
+
// Validate query parameters
|
|
80
|
+
if (typeof domain !== 'undefined' && typeof domain !== 'string') {
|
|
81
|
+
throw new Error('query.domain must be a string if provided');
|
|
82
|
+
}
|
|
83
|
+
if (typeof service !== 'undefined' && typeof service !== 'string') {
|
|
84
|
+
throw new Error('query.service must be a string if provided');
|
|
85
|
+
}
|
|
86
|
+
if (typeof identityKey !== 'undefined' && typeof identityKey !== 'string') {
|
|
87
|
+
throw new Error('query.identityKey must be a string if provided');
|
|
88
|
+
}
|
|
89
|
+
// Validate pagination parameters
|
|
90
|
+
if (typeof limit !== 'undefined' && (typeof limit !== 'number' || limit < 0)) {
|
|
91
|
+
throw new Error('query.limit must be a positive number if provided');
|
|
92
|
+
}
|
|
93
|
+
if (typeof skip !== 'undefined' && (typeof skip !== 'number' || skip < 0)) {
|
|
94
|
+
throw new Error('query.skip must be a non-negative number if provided');
|
|
95
|
+
}
|
|
96
|
+
if (typeof sortOrder !== 'undefined' && sortOrder !== 'asc' && sortOrder !== 'desc') {
|
|
97
|
+
throw new Error('query.sortOrder must be "asc" or "desc" if provided');
|
|
98
|
+
}
|
|
99
|
+
// Build the query object dynamically to omit any undefined values
|
|
100
|
+
const queryParams = {};
|
|
101
|
+
if (domain !== undefined)
|
|
102
|
+
queryParams.domain = domain;
|
|
103
|
+
if (service !== undefined)
|
|
104
|
+
queryParams.service = service;
|
|
105
|
+
if (identityKey !== undefined)
|
|
106
|
+
queryParams.identityKey = identityKey;
|
|
107
|
+
if (limit !== undefined)
|
|
108
|
+
queryParams.limit = limit;
|
|
109
|
+
if (skip !== undefined)
|
|
110
|
+
queryParams.skip = skip;
|
|
111
|
+
if (sortOrder !== undefined)
|
|
112
|
+
queryParams.sortOrder = sortOrder;
|
|
113
|
+
return await this.storage.findRecord(queryParams);
|
|
63
114
|
}
|
|
64
|
-
|
|
65
|
-
throw new Error('query.service must be a string if provided');
|
|
66
|
-
}
|
|
67
|
-
if (identityKey !== undefined && typeof identityKey !== 'string') {
|
|
68
|
-
throw new Error('query.identityKey must be a string if provided');
|
|
69
|
-
}
|
|
70
|
-
// Build the query object dynamically to omit any undefined values.
|
|
71
|
-
const query = {};
|
|
72
|
-
if (domain !== undefined)
|
|
73
|
-
query.domain = domain;
|
|
74
|
-
if (service !== undefined)
|
|
75
|
-
query.service = service;
|
|
76
|
-
if (identityKey !== undefined)
|
|
77
|
-
query.identityKey = identityKey;
|
|
78
|
-
const result = await this.storage.findRecord(query);
|
|
79
|
-
console.log('LOOKUP RESULT', result);
|
|
80
|
-
return result;
|
|
115
|
+
throw new Error('Invalid query format. Query must be "findAll" string or an object with valid parameters.');
|
|
81
116
|
}
|
|
82
117
|
async getDocumentation() {
|
|
83
118
|
return SLAPLookup_docs_js_1.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SLAPLookupService.js","sourceRoot":"","sources":["../../../../src/SLAP/SLAPLookupService.ts"],"names":[],"mappings":";;;;;;AACA,kCAA0C;AAG1C,8EAAiD;AAEjD;;;;;;GAMG;AACH,MAAa,iBAAiB;IAG5B,
|
|
1
|
+
{"version":3,"file":"SLAPLookupService.js","sourceRoot":"","sources":["../../../../src/SLAP/SLAPLookupService.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,7 @@ class SLAPStorage {
|
|
|
51
51
|
* @returns {Promise<UTXOReference[]>} returns matching UTXO references
|
|
52
52
|
*/
|
|
53
53
|
async findRecord(query) {
|
|
54
|
+
var _a;
|
|
54
55
|
const mongoQuery = {};
|
|
55
56
|
// Add domain to the query if provided
|
|
56
57
|
if (typeof query.domain === 'string') {
|
|
@@ -64,9 +65,19 @@ class SLAPStorage {
|
|
|
64
65
|
if (typeof query.identityKey === 'string') {
|
|
65
66
|
mongoQuery.identityKey = query.identityKey;
|
|
66
67
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
.
|
|
68
|
+
// Build the query with pagination
|
|
69
|
+
let cursor = this.slapRecords
|
|
70
|
+
.find(mongoQuery)
|
|
71
|
+
.project({ txid: 1, outputIndex: 1, createdAt: 1 });
|
|
72
|
+
cursor.sort({ createdAt: (_a = query.sortOrder) !== null && _a !== void 0 ? _a : -1 });
|
|
73
|
+
// Apply pagination if provided
|
|
74
|
+
if (typeof query.skip === 'number' && query.skip > 0) {
|
|
75
|
+
cursor = cursor.skip(query.skip);
|
|
76
|
+
}
|
|
77
|
+
if (typeof query.limit === 'number' && query.limit > 0) {
|
|
78
|
+
cursor = cursor.limit(query.limit);
|
|
79
|
+
}
|
|
80
|
+
return await cursor
|
|
70
81
|
.toArray()
|
|
71
82
|
.then(results => results.map(record => ({
|
|
72
83
|
txid: record.txid,
|
|
@@ -75,11 +86,23 @@ class SLAPStorage {
|
|
|
75
86
|
}
|
|
76
87
|
/**
|
|
77
88
|
* Returns all results tracked by the overlay
|
|
89
|
+
* @param {number} limit Optional limit for pagination
|
|
90
|
+
* @param {number} skip Optional skip for pagination
|
|
91
|
+
* @param {string} sortOrder Optional sort order
|
|
78
92
|
* @returns {Promise<UTXOReference[]>} returns matching UTXO references
|
|
79
93
|
*/
|
|
80
|
-
async findAll() {
|
|
81
|
-
|
|
82
|
-
.project({ txid: 1, outputIndex: 1 })
|
|
94
|
+
async findAll(limit, skip, sortOrder) {
|
|
95
|
+
let cursor = this.slapRecords.find({})
|
|
96
|
+
.project({ txid: 1, outputIndex: 1, createdAt: 1 });
|
|
97
|
+
// Apply pagination if provided
|
|
98
|
+
cursor.sort({ createdAt: sortOrder !== null && sortOrder !== void 0 ? sortOrder : -1 });
|
|
99
|
+
if (typeof skip === 'number' && skip > 0) {
|
|
100
|
+
cursor = cursor.skip(skip);
|
|
101
|
+
}
|
|
102
|
+
if (typeof limit === 'number' && limit > 0) {
|
|
103
|
+
cursor = cursor.limit(limit);
|
|
104
|
+
}
|
|
105
|
+
return await cursor
|
|
83
106
|
.toArray()
|
|
84
107
|
.then(results => results.map(slapRecords => ({
|
|
85
108
|
txid: slapRecords.txid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SLAPStorage.js","sourceRoot":"","sources":["../../../../src/SLAP/SLAPStorage.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,WAAW;IAGtB;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"SLAPStorage.js","sourceRoot":"","sources":["../../../../src/SLAP/SLAPStorage.ts"],"names":[],"mappings":"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"}
|