@helia/ipns 10.1.1 → 10.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/README.md +40 -0
- package/dist/index.min.js +5 -5
- package/dist/index.min.js.map +4 -4
- package/dist/src/errors.d.ts +11 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +13 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +136 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +41 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/ipns/publisher.d.ts +3 -3
- package/dist/src/ipns/publisher.d.ts.map +1 -1
- package/dist/src/ipns/publisher.js +17 -18
- package/dist/src/ipns/publisher.js.map +1 -1
- package/dist/src/ipns/republisher.d.ts +6 -1
- package/dist/src/ipns/republisher.d.ts.map +1 -1
- package/dist/src/ipns/republisher.js +157 -24
- package/dist/src/ipns/republisher.js.map +1 -1
- package/dist/src/ipns/resolver.d.ts +13 -1
- package/dist/src/ipns/resolver.d.ts.map +1 -1
- package/dist/src/ipns/resolver.js +40 -31
- package/dist/src/ipns/resolver.js.map +1 -1
- package/dist/src/ipns.d.ts +6 -3
- package/dist/src/ipns.d.ts.map +1 -1
- package/dist/src/ipns.js +12 -3
- package/dist/src/ipns.js.map +1 -1
- package/dist/src/local-store.d.ts +5 -0
- package/dist/src/local-store.d.ts.map +1 -1
- package/dist/src/local-store.js +68 -23
- package/dist/src/local-store.js.map +1 -1
- package/dist/src/pb/ipns.js +1 -1
- package/dist/src/pb/metadata.d.ts +14 -1
- package/dist/src/pb/metadata.d.ts.map +1 -1
- package/dist/src/pb/metadata.js +36 -3
- package/dist/src/pb/metadata.js.map +1 -1
- package/dist/src/routing/index.d.ts +13 -1
- package/dist/src/routing/index.d.ts.map +1 -1
- package/dist/src/routing/index.js +17 -0
- package/dist/src/routing/index.js.map +1 -1
- package/dist/src/utils.d.ts +5 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +18 -0
- package/dist/src/utils.js.map +1 -1
- package/dist/src/validator.d.ts +6 -0
- package/dist/src/validator.d.ts.map +1 -1
- package/dist/src/validator.js +24 -14
- package/dist/src/validator.js.map +1 -1
- package/dist/typedoc-urls.json +23 -1
- package/package.json +3 -3
- package/src/errors.ts +18 -0
- package/src/index.ts +145 -7
- package/src/ipns/publisher.ts +22 -20
- package/src/ipns/republisher.ts +182 -26
- package/src/ipns/resolver.ts +54 -36
- package/src/ipns.ts +20 -6
- package/src/local-store.ts +77 -22
- package/src/pb/ipns.ts +1 -1
- package/src/pb/metadata.proto +10 -0
- package/src/pb/metadata.ts +45 -4
- package/src/routing/index.ts +30 -1
- package/src/utils.ts +19 -0
- package/src/validator.ts +30 -18
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
import { NotFoundError } from '@libp2p/interface';
|
|
1
2
|
import { Queue, repeatingTask } from '@libp2p/utils';
|
|
3
|
+
import NanoDate from 'timestamp-nano';
|
|
2
4
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
3
5
|
import { DEFAULT_REPUBLISH_CONCURRENCY, DEFAULT_REPUBLISH_INTERVAL_MS, DEFAULT_TTL_NS } from "../constants.js";
|
|
6
|
+
import { RecordObsoleteError } from "../errors.js";
|
|
4
7
|
import { IPNSEntry } from "../pb/ipns.js";
|
|
8
|
+
import { Upkeep } from "../pb/metadata.js";
|
|
5
9
|
import { createIPNSRecord } from "../records.js";
|
|
6
|
-
import {
|
|
10
|
+
import { isLocalStoreRouting, routerName } from "../routing/index.js";
|
|
11
|
+
import { ipnsSelector } from "../selector.js";
|
|
12
|
+
import { decodeExtensibleData, multihashToIPNSRoutingKey, shouldRepublish } from "../utils.js";
|
|
13
|
+
import { extractPublicKey, ipnsValidator } from "../validator.js";
|
|
14
|
+
import { findRoutingRecords } from "./resolver.js";
|
|
7
15
|
export class IPNSRepublisher {
|
|
8
16
|
routers;
|
|
9
17
|
localStore;
|
|
@@ -49,42 +57,70 @@ export class IPNSRepublisher {
|
|
|
49
57
|
concurrency: this.republishConcurrency
|
|
50
58
|
});
|
|
51
59
|
try {
|
|
52
|
-
const
|
|
60
|
+
const recordsToReissue = [];
|
|
61
|
+
const recordsToRebroadcast = [];
|
|
53
62
|
let listed = 0;
|
|
54
63
|
// Find all records using the localStore.list method
|
|
55
64
|
for await (const { routingKey, record, metadata, created } of this.localStore.list(options)) {
|
|
56
65
|
listed++;
|
|
57
66
|
if (metadata == null) {
|
|
58
|
-
//
|
|
59
|
-
//
|
|
67
|
+
// no metadata: an imported record not yet given an upkeep policy, or a
|
|
68
|
+
// record stored before we tracked metadata
|
|
60
69
|
this.log('no metadata found for record %b, skipping', routingKey);
|
|
61
70
|
continue;
|
|
62
71
|
}
|
|
72
|
+
if (metadata.upkeep === Upkeep.none) {
|
|
73
|
+
// Skip republishing, disabled for this record
|
|
74
|
+
this.log('republishing is disabled for record %b, skipping', routingKey);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
63
77
|
let ipnsRecord;
|
|
64
78
|
try {
|
|
65
79
|
ipnsRecord = IPNSEntry.decode(record);
|
|
66
80
|
}
|
|
67
81
|
catch (err) {
|
|
68
|
-
|
|
82
|
+
// the record was valid when stored, so a decode failure now means
|
|
83
|
+
// on-disk corruption or a format change worth surfacing
|
|
84
|
+
this.log.error('skipping stored record %b, could not decode it - %e', routingKey, err);
|
|
69
85
|
continue;
|
|
70
86
|
}
|
|
71
87
|
if (ipnsRecord.data == null) {
|
|
72
|
-
this.log.
|
|
88
|
+
this.log.error('skipping stored record %b, its data is missing', routingKey);
|
|
73
89
|
continue;
|
|
74
90
|
}
|
|
75
91
|
let data;
|
|
76
92
|
try {
|
|
77
93
|
data = decodeExtensibleData(ipnsRecord.data);
|
|
78
94
|
}
|
|
79
|
-
catch {
|
|
80
|
-
this.log.
|
|
95
|
+
catch (err) {
|
|
96
|
+
this.log.error('skipping stored record %b, could not decode its data - %e', routingKey, err);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
let recordExpiry;
|
|
100
|
+
try {
|
|
101
|
+
recordExpiry = NanoDate.fromString(uint8ArrayToString(data.Validity)).toDate();
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
this.log.error('skipping stored record %b, could not parse its validity - %e', routingKey, err);
|
|
81
105
|
continue;
|
|
82
106
|
}
|
|
83
107
|
// Only republish records that are within the DHT or record expiry threshold
|
|
84
|
-
if (!shouldRepublish(created,
|
|
108
|
+
if (!shouldRepublish(created, recordExpiry)) {
|
|
85
109
|
this.log.trace('skipping record %b within republish threshold', routingKey);
|
|
86
110
|
continue;
|
|
87
111
|
}
|
|
112
|
+
if (metadata.upkeep === Upkeep.rebroadcast) {
|
|
113
|
+
// only re-broadcast records that are still valid: an expired record
|
|
114
|
+
// cannot be revived without re-signing, which the rebroadcast policy
|
|
115
|
+
// has no key for
|
|
116
|
+
if (recordExpiry.getTime() <= Date.now()) {
|
|
117
|
+
this.log.trace('skipping expired record %b for rebroadcast', routingKey);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
recordsToRebroadcast.push({ routingKey, record: ipnsRecord });
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Upkeep.reissue: re-sign the record with a new validity
|
|
88
124
|
const sequenceNumber = data.Sequence + 1n;
|
|
89
125
|
const ttlNs = data.TTL ?? DEFAULT_TTL_NS;
|
|
90
126
|
let privKey;
|
|
@@ -100,35 +136,132 @@ export class IPNSRepublisher {
|
|
|
100
136
|
...options,
|
|
101
137
|
ttlNs
|
|
102
138
|
});
|
|
103
|
-
|
|
139
|
+
recordsToReissue.push({
|
|
104
140
|
routingKey,
|
|
105
141
|
record: updatedRecord
|
|
106
142
|
});
|
|
107
143
|
}
|
|
108
144
|
catch (err) {
|
|
109
|
-
this.log.error('error creating updated IPNS record for %
|
|
145
|
+
this.log.error('error creating updated IPNS record for %b - %e', routingKey, err);
|
|
110
146
|
continue;
|
|
111
147
|
}
|
|
112
148
|
}
|
|
113
|
-
this.log(`
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
149
|
+
this.log(`reissuing ${recordsToReissue.length} and rebroadcasting ${recordsToRebroadcast.length} of ${listed} records`);
|
|
150
|
+
// reissue: re-publish the re-signed record as-is. the jobs run
|
|
151
|
+
// fire-and-forget, so catch any failure (including a local-store write
|
|
152
|
+
// that #publishToRouters surfaces) rather than leaving an unhandled rejection
|
|
153
|
+
for (const { routingKey, record } of recordsToReissue) {
|
|
154
|
+
queue.add(async () => this.#publishToRouters(routingKey, IPNSEntry.encode(record), options), options)
|
|
155
|
+
.catch((err) => { this.log.error('failed to reissue record %b - %e', routingKey, err); });
|
|
156
|
+
}
|
|
157
|
+
// rebroadcast: resolve the latest record from the network and re-broadcast
|
|
158
|
+
// whichever of the local and network records is most suitable, so we adopt
|
|
159
|
+
// a newer record rather than pushing a stale local copy
|
|
160
|
+
for (const { routingKey, record } of recordsToRebroadcast) {
|
|
117
161
|
queue.add(async () => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
}, options);
|
|
162
|
+
const { records } = await findRoutingRecords(this.routers, routingKey, this.keychain, this.log, options);
|
|
163
|
+
const candidates = [record, ...records];
|
|
164
|
+
const best = candidates[ipnsSelector(routingKey, candidates)];
|
|
165
|
+
await this.#publishToRouters(routingKey, IPNSEntry.encode(best), { ...options, overwrite: true });
|
|
166
|
+
}, options)
|
|
167
|
+
.catch((err) => { this.log.error('failed to rebroadcast record %b - %e', routingKey, err); });
|
|
126
168
|
}
|
|
127
169
|
}
|
|
128
170
|
catch (err) {
|
|
129
171
|
this.log.error('error during republish - %e', err);
|
|
130
172
|
}
|
|
131
|
-
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Persist the record to the local store first, throwing if that fails: it
|
|
176
|
+
* holds the record and its upkeep policy, so that failure must surface rather
|
|
177
|
+
* than be swallowed. Then broadcast to the network routers best-effort,
|
|
178
|
+
* logging any that fail.
|
|
179
|
+
*/
|
|
180
|
+
async #publishToRouters(routingKey, marshaledRecord, putOptions) {
|
|
181
|
+
const localStoreRouter = this.routers.find(isLocalStoreRouting);
|
|
182
|
+
if (localStoreRouter != null) {
|
|
183
|
+
await localStoreRouter.put(routingKey, marshaledRecord, putOptions);
|
|
184
|
+
this.log('published record %b to %s', routingKey, routerName(localStoreRouter));
|
|
185
|
+
}
|
|
186
|
+
await Promise.all(this.routers
|
|
187
|
+
.filter(router => router !== localStoreRouter)
|
|
188
|
+
.map(async (router) => {
|
|
189
|
+
try {
|
|
190
|
+
await router.put(routingKey, marshaledRecord, putOptions);
|
|
191
|
+
this.log('published record %b to %s', routingKey, routerName(router));
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
this.log.error('failed to publish record %b to %s - %e', routingKey, routerName(router), err);
|
|
195
|
+
}
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
async republish(key, options = {}) {
|
|
199
|
+
const routingKey = multihashToIPNSRoutingKey(key);
|
|
200
|
+
// read the record we hold for this key directly, it was validated when it
|
|
201
|
+
// was imported or published, and reading it through resolve() would recurse
|
|
202
|
+
// and rewrite the local store
|
|
203
|
+
let record;
|
|
204
|
+
try {
|
|
205
|
+
({ record } = await this.localStore.get(routingKey, options));
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
if (err.name !== 'NotFoundError') {
|
|
209
|
+
throw err;
|
|
210
|
+
}
|
|
211
|
+
throw new NotFoundError('No local record found to republish - import it first');
|
|
212
|
+
}
|
|
213
|
+
// re-validate: a record that was valid when stored can have expired since
|
|
214
|
+
const localRecord = await ipnsValidator(routingKey, record, this.keychain, options);
|
|
215
|
+
// unless we are told not to look, check whether the routing already has a
|
|
216
|
+
// more suitable record; if so, back off
|
|
217
|
+
if (options.skipResolution !== true) {
|
|
218
|
+
const { records } = await findRoutingRecords(this.routers, routingKey, this.keychain, this.log, options);
|
|
219
|
+
const candidates = [localRecord, ...records];
|
|
220
|
+
const best = ipnsSelector(routingKey, candidates);
|
|
221
|
+
if (best !== 0) {
|
|
222
|
+
throw new RecordObsoleteError('A newer record is already published for this key', candidates[best]);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const metadata = {
|
|
226
|
+
upkeep: Upkeep[options.upkeep ?? 'rebroadcast']
|
|
227
|
+
};
|
|
228
|
+
// a publish that fails on every router does not throw; use onProgress to see
|
|
229
|
+
// which routers worked and watch the logs
|
|
230
|
+
await this.#publishToRouters(routingKey, record, {
|
|
231
|
+
...options,
|
|
232
|
+
overwrite: true,
|
|
233
|
+
metadata
|
|
234
|
+
});
|
|
235
|
+
return {
|
|
236
|
+
record: localRecord,
|
|
237
|
+
publicKey: await extractPublicKey(routingKey, localRecord, this.keychain, options)
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
async import(key, record, options) {
|
|
241
|
+
const routingKey = multihashToIPNSRoutingKey(key);
|
|
242
|
+
const entry = record instanceof Uint8Array ? IPNSEntry.decode(record) : record;
|
|
243
|
+
const marshaledRecord = IPNSEntry.encode(entry);
|
|
244
|
+
// validate the record, throws if it is invalid (bad signature, expired, etc)
|
|
245
|
+
await ipnsValidator(routingKey, marshaledRecord, this.keychain, options);
|
|
246
|
+
// do not downgrade a record we already hold
|
|
247
|
+
try {
|
|
248
|
+
const { record: existingBytes } = await this.localStore.get(routingKey, options);
|
|
249
|
+
const existing = IPNSEntry.decode(existingBytes);
|
|
250
|
+
// if the record we already have wins the selector, the incoming one is obsolete
|
|
251
|
+
if (ipnsSelector(routingKey, [entry, existing]) !== 0) {
|
|
252
|
+
throw new RecordObsoleteError('A newer record is already stored for this key', existing);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
// holding no record for this key is the normal case, everything else
|
|
257
|
+
// (the RecordObsoleteError above included) is a real failure
|
|
258
|
+
if (err.name !== 'NotFoundError') {
|
|
259
|
+
throw err;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// store the record locally only, without metadata, so it is served but not
|
|
263
|
+
// automatically republished until republish() gives it an upkeep policy
|
|
264
|
+
await this.localStore.put(routingKey, marshaledRecord, options);
|
|
132
265
|
}
|
|
133
266
|
}
|
|
134
267
|
//# sourceMappingURL=republisher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"republisher.js","sourceRoot":"","sources":["../../../src/ipns/republisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9G,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"republisher.js","sourceRoot":"","sources":["../../../src/ipns/republisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { IPNSEntry } from '../pb/ipns.ts';
|
|
1
2
|
import type { IPNSResolveOptions, IPNSResolveResult } from '../index.ts';
|
|
2
3
|
import type { LocalStore } from '../local-store.ts';
|
|
3
4
|
import type { IPNSRouting } from '../routing/index.ts';
|
|
4
5
|
import type { Routing, Keychain } from '@helia/interface';
|
|
5
|
-
import type { ComponentLogger } from '@libp2p/interface';
|
|
6
|
+
import type { AbortOptions, ComponentLogger, Logger } from '@libp2p/interface';
|
|
6
7
|
import type { Datastore } from 'interface-datastore';
|
|
7
8
|
import type { MultihashDigest } from 'multiformats/hashes/interface';
|
|
8
9
|
export interface IPNSResolverComponents {
|
|
@@ -24,4 +25,15 @@ export declare class IPNSResolver {
|
|
|
24
25
|
constructor(components: IPNSResolverComponents, init: IPNResolverInit);
|
|
25
26
|
resolve(key: MultihashDigest, options?: IPNSResolveOptions): AsyncGenerator<IPNSResolveResult>;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Query the network routers for the records stored under a routing key, plus a
|
|
30
|
+
* count of records that were fetched but failed validation/decoding. Does not
|
|
31
|
+
* touch the local store; the caller selects the record it wants with
|
|
32
|
+
* `ipnsSelector`. Records are validated unless `validate` is false, in which
|
|
33
|
+
* case they are returned decoded without validation.
|
|
34
|
+
*/
|
|
35
|
+
export declare function findRoutingRecords(routers: IPNSRouting[], routingKey: Uint8Array, keychain: Keychain, log: Logger, options?: AbortOptions, validate?: boolean): Promise<{
|
|
36
|
+
records: IPNSEntry[];
|
|
37
|
+
foundInvalid: number;
|
|
38
|
+
}>;
|
|
27
39
|
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/ipns/resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/ipns/resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAKzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEpE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,WAAW,EAAE,CAAA;CACvB;AAED,qBAAa,YAAY;;IACvB,SAAgB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAU;gBAEb,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,eAAe;IAO9D,OAAO,CAAE,GAAG,EAAE,eAAe,EAAE,OAAO,GAAE,kBAAuB,GAAG,cAAc,CAAC,iBAAiB,CAAC;CAyH5G;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAE,OAAO,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,EAAE,QAAQ,UAAO,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC/N"}
|
|
@@ -2,6 +2,7 @@ import { base36 } from 'multiformats/bases/base36';
|
|
|
2
2
|
import { DEFAULT_TTL_NS } from "../constants.js";
|
|
3
3
|
import { InvalidValueError, RecordNotFoundError, RecordsFailedValidationError } from "../errors.js";
|
|
4
4
|
import { IPNSEntry } from "../pb/ipns.js";
|
|
5
|
+
import { isLocalStoreRouting, routerName } from "../routing/index.js";
|
|
5
6
|
import { ipnsSelector } from "../selector.js";
|
|
6
7
|
import { multihashToIPNSRoutingKey, normalizeKey, IPNS_STRING_PREFIX, ipnsRecordValueToString, decodeExtensibleData } from "../utils.js";
|
|
7
8
|
import { ipnsValidator } from "../validator.js";
|
|
@@ -98,37 +99,8 @@ export class IPNSResolver {
|
|
|
98
99
|
throw new RecordNotFoundError('Record was not present in the cache or has expired');
|
|
99
100
|
}
|
|
100
101
|
this.log('did not have record locally');
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
await Promise.all(this.routers.map(async (router) => {
|
|
104
|
-
let marshaledIPNSRecord;
|
|
105
|
-
try {
|
|
106
|
-
marshaledIPNSRecord = await router.get(routingKey, {
|
|
107
|
-
...options,
|
|
108
|
-
validate: false
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
catch (err) {
|
|
112
|
-
this.log.error('error finding IPNS record using router %s - %e', router.toString(), err);
|
|
113
|
-
errors.push(err);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
try {
|
|
117
|
-
let record;
|
|
118
|
-
if (options.validate === false) {
|
|
119
|
-
record = IPNSEntry.decode(marshaledIPNSRecord);
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
record = await ipnsValidator(routingKey, marshaledIPNSRecord, this.keychain, options);
|
|
123
|
-
}
|
|
124
|
-
records.push(record);
|
|
125
|
-
}
|
|
126
|
-
catch (err) {
|
|
127
|
-
// we found a record, but the validator rejected it
|
|
128
|
-
foundInvalid++;
|
|
129
|
-
this.log.error('error validating IPNS record from router %s - %e', router.toString(), err);
|
|
130
|
-
}
|
|
131
|
-
}));
|
|
102
|
+
const { records: networkRecords, foundInvalid } = await findRoutingRecords(this.routers, routingKey, this.keychain, this.log, options, options.validate !== false);
|
|
103
|
+
records.push(...networkRecords);
|
|
132
104
|
if (records.length === 0) {
|
|
133
105
|
if (foundInvalid > 0) {
|
|
134
106
|
throw new RecordsFailedValidationError(`${foundInvalid > 1 ? `${foundInvalid} records` : 'Record'} found for routing key ${foundInvalid > 1 ? 'were' : 'was'} invalid`);
|
|
@@ -140,4 +112,41 @@ export class IPNSResolver {
|
|
|
140
112
|
return record;
|
|
141
113
|
}
|
|
142
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Query the network routers for the records stored under a routing key, plus a
|
|
117
|
+
* count of records that were fetched but failed validation/decoding. Does not
|
|
118
|
+
* touch the local store; the caller selects the record it wants with
|
|
119
|
+
* `ipnsSelector`. Records are validated unless `validate` is false, in which
|
|
120
|
+
* case they are returned decoded without validation.
|
|
121
|
+
*/
|
|
122
|
+
export async function findRoutingRecords(routers, routingKey, keychain, log, options = {}, validate = true) {
|
|
123
|
+
const records = [];
|
|
124
|
+
let foundInvalid = 0;
|
|
125
|
+
await Promise.all(routers.map(async (router) => {
|
|
126
|
+
// the local store is not the network
|
|
127
|
+
if (isLocalStoreRouting(router)) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
let marshaledRecord;
|
|
131
|
+
try {
|
|
132
|
+
marshaledRecord = await router.get(routingKey, { ...options, validate: false });
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
log.error('error finding IPNS record using router %s - %e', routerName(router), err);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
// when the caller opts out of validation, return the record as decoded
|
|
140
|
+
const record = validate
|
|
141
|
+
? await ipnsValidator(routingKey, marshaledRecord, keychain, options)
|
|
142
|
+
: IPNSEntry.decode(marshaledRecord);
|
|
143
|
+
records.push(record);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
foundInvalid++;
|
|
147
|
+
log.error('error reading IPNS record from router %s - %e', routerName(router), err);
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
return { records, foundInvalid };
|
|
151
|
+
}
|
|
143
152
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/ipns/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACxI,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAqB/C,MAAM,OAAO,YAAY;IACP,OAAO,CAAe;IACrB,UAAU,CAAY;IACtB,GAAG,CAAQ;IACpB,QAAQ,CAAU;IAE1B,YAAa,UAAkC,EAAE,IAAqB;QACpE,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;QACvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,CAAE,OAAO,CAAE,GAAoB,EAAE,UAA8B,EAAE;QACrE,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;QAElC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;YACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YAC9D,IAAI,KAAK,GAAG,EAAE,CAAA;YAEd,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC9C,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7C,CAAC;iBAAM,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBAChC,KAAK,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;YACjG,CAAC;YAED,MAAM;gBACJ,MAAM;gBACN,KAAK;aACN,CAAA;YAED,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC1C,yBAAyB;gBACzB,MAAK;YACP,CAAC;YAED,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAE,UAAsB,EAAE,UAA8B,EAAE;QAC7E,MAAM,OAAO,GAAgB,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAE7D,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;YAE1C,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,8BAA8B;oBAC9B,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;oBAE/F,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;oBAEvC,oCAAoC;oBACpC,IAAI,UAAqB,CAAA;oBAEzB,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;wBAC/B,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;wBAClD,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;oBAC1C,CAAC;yBAAM,CAAC;wBACN,UAAU,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,mBAAmB,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;wBACzF,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;oBAC9B,CAAC;oBAED,gBAAgB;oBAChB,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;oBAElD,sEAAsE;oBACtE,OAAO;oBACP,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,QAAU,CAAC,CAAA;oBAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,CAAA;oBAE5C,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;wBAC5B,wDAAwD;wBACxD,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;wBAChC,OAAO,UAAU,CAAA;oBACnB,CAAC;oBAED,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;wBAC7B,6DAA6D;wBAC7D,IAAI,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAA;wBAC3F,OAAO,UAAU,CAAA;oBACnB,CAAC;oBAED,IAAI,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;oBAEtE,gEAAgE;oBAChE,sEAAsE;oBACtE,WAAW;oBACX,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC1B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAA;oBAC/C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;gBACnD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,mBAAmB,CAAC,oDAAoD,CAAC,CAAA;QACrF,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;QAEvC,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/ipns/resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ipns.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid';
|
|
2
|
-
import
|
|
2
|
+
import { IPNSEntry } from './index.ts';
|
|
3
|
+
import type { IPNSComponents, IPNS as IPNSInterface, IPNSOptions, IPNSPublishResult, PublishOptions, RepublishOptions, RepublishResult, IPNSResolveOptions, IPNSResolveResult, UnpublishOptions } from './index.ts';
|
|
3
4
|
import type { IPNSRouting } from './routing/index.ts';
|
|
4
5
|
import type { PublicKey } from '@helia/interface';
|
|
5
6
|
import type { AbortOptions, Startable } from '@libp2p/interface';
|
|
@@ -16,7 +17,9 @@ export declare class IPNS implements IPNSInterface, Startable {
|
|
|
16
17
|
start(): void;
|
|
17
18
|
stop(): void;
|
|
18
19
|
publish(keyName: string, value: PublicKey | CID | MultihashDigest | string, options?: PublishOptions): Promise<IPNSPublishResult>;
|
|
19
|
-
resolve(key:
|
|
20
|
-
unpublish(keyName: string, options?:
|
|
20
|
+
resolve(key: CID<unknown, 0x72> | PublicKey | MultihashDigest | string, options?: IPNSResolveOptions): AsyncGenerator<IPNSResolveResult>;
|
|
21
|
+
unpublish(keyName: CID<unknown, 0x72> | PublicKey | MultihashDigest | string, options?: UnpublishOptions): Promise<void>;
|
|
22
|
+
republish(keyName: CID<unknown, 0x72> | PublicKey | MultihashDigest | string, options?: RepublishOptions): Promise<RepublishResult>;
|
|
23
|
+
import(key: CID<unknown, 0x72> | PublicKey | MultihashDigest | string, record: IPNSEntry | Uint8Array, options?: AbortOptions): Promise<void>;
|
|
21
24
|
}
|
|
22
25
|
//# sourceMappingURL=ipns.d.ts.map
|
package/dist/src/ipns.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipns.d.ts","sourceRoot":"","sources":["../../src/ipns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"ipns.d.ts","sourceRoot":"","sources":["../../src/ipns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAUtC,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,IAAI,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEnN,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAU,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEpE,qBAAa,IAAK,YAAW,aAAa,EAAE,SAAS;IACnD,SAAgB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,cAAc,EAAE,IAAI,GAAE,WAAgB;IAuD/D,KAAK,IAAK,IAAI;IASd,IAAI,IAAK,IAAI;IASP,OAAO,CAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG,GAAG,eAAe,GAAG,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpI,OAAO,CAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,cAAc,CAAC,iBAAiB,CAAC;IAM/I,SAAS,CAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzH,SAAS,CAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAMxI,MAAM,CAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAKrJ"}
|
package/dist/src/ipns.js
CHANGED
|
@@ -7,7 +7,7 @@ import { localStore } from "./local-store.js";
|
|
|
7
7
|
import { heliaIPNSRouting } from "./routing/helia.js";
|
|
8
8
|
import { localStoreIPNSRouting } from "./routing/local-store.js";
|
|
9
9
|
import { ipnsSelector } from "./selector.js";
|
|
10
|
-
import { normalizeKey, normalizeValue } from "./utils.js";
|
|
10
|
+
import { normalizeKey, normalizeKeyName, normalizeValue } from "./utils.js";
|
|
11
11
|
import { ipnsValidator } from "./validator.js";
|
|
12
12
|
export class IPNS {
|
|
13
13
|
routers;
|
|
@@ -31,12 +31,12 @@ export class IPNS {
|
|
|
31
31
|
routers: this.routers,
|
|
32
32
|
localStore: this.localStore
|
|
33
33
|
});
|
|
34
|
-
this.
|
|
34
|
+
this.resolver = new IPNSResolver(components, {
|
|
35
35
|
...init,
|
|
36
36
|
routers: this.routers,
|
|
37
37
|
localStore: this.localStore
|
|
38
38
|
});
|
|
39
|
-
this.
|
|
39
|
+
this.republisher = new IPNSRepublisher(components, {
|
|
40
40
|
...init,
|
|
41
41
|
routers: this.routers,
|
|
42
42
|
localStore: this.localStore
|
|
@@ -86,8 +86,17 @@ export class IPNS {
|
|
|
86
86
|
yield* this.resolver.resolve(digest, options);
|
|
87
87
|
}
|
|
88
88
|
async unpublish(keyName, options) {
|
|
89
|
+
keyName = normalizeKeyName(keyName);
|
|
89
90
|
return this.publisher.unpublish(keyName, options);
|
|
90
91
|
}
|
|
92
|
+
async republish(keyName, options = {}) {
|
|
93
|
+
const { digest } = normalizeKey(keyName);
|
|
94
|
+
return this.republisher.republish(digest, options);
|
|
95
|
+
}
|
|
96
|
+
async import(key, record, options) {
|
|
97
|
+
const { digest } = normalizeKey(key);
|
|
98
|
+
return this.republisher.import(digest, record, options);
|
|
99
|
+
}
|
|
91
100
|
}
|
|
92
101
|
function isLibp2p(obj) {
|
|
93
102
|
return obj?.services != null;
|
package/dist/src/ipns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipns.js","sourceRoot":"","sources":["../../src/ipns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"ipns.js","sourceRoot":"","sources":["../../src/ipns.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,11 @@ export interface LocalStore {
|
|
|
27
27
|
get(routingKey: Uint8Array, options?: IPNSRoutingGetOptions): Promise<GetResult>;
|
|
28
28
|
has(routingKey: Uint8Array, options?: AbortOptions): Promise<boolean>;
|
|
29
29
|
delete(routingKey: Uint8Array, options?: AbortOptions): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Delete only the IPNS metadata for a record, leaving the record itself in
|
|
32
|
+
* place so it is still served but no longer automatically republished
|
|
33
|
+
*/
|
|
34
|
+
deleteMetadata(routingKey: Uint8Array, options?: AbortOptions): Promise<void>;
|
|
30
35
|
/**
|
|
31
36
|
* List all IPNS records in the datastore
|
|
32
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../../src/local-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../../src/local-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAU,MAAM,kBAAkB,CAAA;AAE9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC/G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAC/B,OAAO,EAAE,IAAI,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,IAAI,CAAA;IACb,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,UAAU,CAAC,CAAC,GAAG,EAAE,uBAAuB,GAAG,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxG,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChF,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7E;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;CACvD;AAoDD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CA+GzE"}
|