@dxos/feed-store 2.12.20 → 2.13.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/src/benchmark.js +2 -3
- package/dist/src/benchmark.js.map +1 -1
- package/dist/src/create-batch-stream.test.js +1 -2
- package/dist/src/create-batch-stream.test.js.map +1 -1
- package/dist/src/feed-descriptor.d.ts +9 -27
- package/dist/src/feed-descriptor.d.ts.map +1 -1
- package/dist/src/feed-descriptor.js +9 -39
- package/dist/src/feed-descriptor.js.map +1 -1
- package/dist/src/feed-descriptor.test.js +19 -33
- package/dist/src/feed-descriptor.test.js.map +1 -1
- package/dist/src/feed-store.d.ts +4 -53
- package/dist/src/feed-store.d.ts.map +1 -1
- package/dist/src/feed-store.js +16 -140
- package/dist/src/feed-store.js.map +1 -1
- package/dist/src/feed-store.test.js +34 -96
- package/dist/src/feed-store.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -9
- package/src/benchmark.ts +2 -3
- package/src/create-batch-stream.test.ts +1 -2
- package/src/feed-descriptor.test.ts +20 -41
- package/src/feed-descriptor.ts +20 -59
- package/src/feed-store.test.ts +39 -114
- package/src/feed-store.ts +18 -174
package/dist/src/feed-store.js
CHANGED
|
@@ -29,10 +29,6 @@ class FeedStore {
|
|
|
29
29
|
* @param options Feedstore options.
|
|
30
30
|
*/
|
|
31
31
|
constructor(storage, options = {}) {
|
|
32
|
-
/**
|
|
33
|
-
* Is emitted when data gets appended to one of the FeedStore's feeds represented by FeedDescriptors.
|
|
34
|
-
*/
|
|
35
|
-
this.appendEvent = new async_1.Event();
|
|
36
32
|
/**
|
|
37
33
|
* Is emitted when a new feed represented by FeedDescriptor is opened.
|
|
38
34
|
*/
|
|
@@ -43,13 +39,6 @@ class FeedStore {
|
|
|
43
39
|
this._valueEncoding = valueEncoding && patchBufferCodec(valueEncoding);
|
|
44
40
|
this._hypercore = hypercore;
|
|
45
41
|
this._descriptors = new Map();
|
|
46
|
-
this._open = false;
|
|
47
|
-
}
|
|
48
|
-
get opened() {
|
|
49
|
-
return this._open;
|
|
50
|
-
}
|
|
51
|
-
get closed() {
|
|
52
|
-
return !this._open;
|
|
53
42
|
}
|
|
54
43
|
/**
|
|
55
44
|
* @type {RandomAccessStorage}
|
|
@@ -57,162 +46,49 @@ class FeedStore {
|
|
|
57
46
|
get storage() {
|
|
58
47
|
return this._storage;
|
|
59
48
|
}
|
|
60
|
-
async open() {
|
|
61
|
-
if (this._open) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
this._open = true;
|
|
65
|
-
}
|
|
66
49
|
async close() {
|
|
67
|
-
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
this._open = false;
|
|
71
|
-
await Promise.all(this
|
|
72
|
-
.getDescriptors()
|
|
73
|
-
.map(descriptor => descriptor.close()));
|
|
50
|
+
await Promise.all(Array.from(this._descriptors.values()).map(descriptor => descriptor.close()));
|
|
74
51
|
this._descriptors.clear();
|
|
75
52
|
}
|
|
76
|
-
/**
|
|
77
|
-
* Get the list of descriptors.
|
|
78
|
-
*/
|
|
79
|
-
getDescriptors() {
|
|
80
|
-
return Array.from(this._descriptors.values());
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Get desciptor by its public key
|
|
84
|
-
*/
|
|
85
|
-
getDescriptor(key) {
|
|
86
|
-
return this.getDescriptors().find(descriptor => descriptor.key.equals(key));
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Fast access to a descriptor
|
|
90
|
-
*/
|
|
91
|
-
getDescriptorByDiscoveryKey(discoverKey) {
|
|
92
|
-
return this._descriptors.get(discoverKey.toString('hex'));
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Get the list of opened feeds, with optional filter.
|
|
96
|
-
*/
|
|
97
|
-
getOpenFeeds(callback) {
|
|
98
|
-
const notNull = (value) => Boolean(value);
|
|
99
|
-
return this.getDescriptors()
|
|
100
|
-
.filter(descriptor => descriptor.opened && (!callback || callback(descriptor)))
|
|
101
|
-
.map(descriptor => descriptor.feed)
|
|
102
|
-
.filter(notNull);
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Find an opened feed using a filter callback.
|
|
106
|
-
*/
|
|
107
|
-
getOpenFeed(callback) {
|
|
108
|
-
const descriptor = this.getDescriptors()
|
|
109
|
-
.find(descriptor => descriptor.opened && callback(descriptor));
|
|
110
|
-
if (descriptor && descriptor.feed) {
|
|
111
|
-
return descriptor.feed;
|
|
112
|
-
}
|
|
113
|
-
return undefined;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Checks if feedstore has a feed with specified key.
|
|
117
|
-
*/
|
|
118
|
-
hasFeed(key) {
|
|
119
|
-
return this.getDescriptors().some(fd => fd.key.equals(key));
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Open multiple feeds using a filter callback.
|
|
123
|
-
*/
|
|
124
|
-
async openFeeds(callback) {
|
|
125
|
-
assert_1.default(this._open, 'FeedStore closed');
|
|
126
|
-
const descriptors = this.getDescriptors()
|
|
127
|
-
.filter(descriptor => callback(descriptor));
|
|
128
|
-
return Promise.all(descriptors.map(descriptor => descriptor.open()));
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Open a feed to FeedStore.
|
|
132
|
-
*/
|
|
133
|
-
async openFeed(key) {
|
|
134
|
-
assert_1.default(this._open, 'FeedStore closed');
|
|
135
|
-
const descriptor = this.getDescriptors().find(fd => fd.key.equals(key));
|
|
136
|
-
assert_1.default(descriptor, 'Descriptor not found');
|
|
137
|
-
const feed = await descriptor.open();
|
|
138
|
-
return feed;
|
|
139
|
-
}
|
|
140
53
|
/**
|
|
141
54
|
* Create a feed to Feedstore
|
|
142
55
|
*/
|
|
143
|
-
async
|
|
144
|
-
this.
|
|
145
|
-
|
|
56
|
+
async openReadWriteFeed(key, secretKey) {
|
|
57
|
+
const descriptor = this._descriptors.get(key.toString());
|
|
58
|
+
if (descriptor && descriptor.secretKey) {
|
|
59
|
+
return descriptor;
|
|
60
|
+
}
|
|
61
|
+
return this._createDescriptor({ key, secretKey });
|
|
146
62
|
}
|
|
147
63
|
/**
|
|
148
64
|
* Create a readonly feed to Feedstore
|
|
149
65
|
*/
|
|
150
|
-
async
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Close a feed by the key.
|
|
156
|
-
*/
|
|
157
|
-
async closeFeed(key) {
|
|
158
|
-
assert_1.default(this._open, 'FeedStore closed');
|
|
159
|
-
const descriptor = this.getDescriptors().find(fd => fd.key.equals(key));
|
|
160
|
-
if (!descriptor) {
|
|
161
|
-
throw new Error(`Feed not found: ${key.toString()}`);
|
|
162
|
-
}
|
|
163
|
-
await descriptor.close();
|
|
66
|
+
async openReadOnlyFeed(key) {
|
|
67
|
+
var _a;
|
|
68
|
+
const descriptor = (_a = this._descriptors.get(key.toString())) !== null && _a !== void 0 ? _a : await this._createDescriptor({ key });
|
|
69
|
+
return descriptor;
|
|
164
70
|
}
|
|
165
71
|
/**
|
|
166
72
|
* Factory to create a new FeedDescriptor.
|
|
167
73
|
*/
|
|
168
|
-
_createDescriptor(options) {
|
|
169
|
-
const { key, secretKey
|
|
170
|
-
const existing = this.getDescriptors().find(fd => fd.key.equals(key));
|
|
171
|
-
if (existing) {
|
|
172
|
-
return existing;
|
|
173
|
-
}
|
|
74
|
+
async _createDescriptor(options) {
|
|
75
|
+
const { key, secretKey } = options;
|
|
174
76
|
const descriptor = new feed_descriptor_1.default({
|
|
175
77
|
storage: this._storage,
|
|
176
78
|
key,
|
|
177
79
|
secretKey,
|
|
178
80
|
valueEncoding: this._valueEncoding,
|
|
179
|
-
metadata,
|
|
180
81
|
hypercore: this._hypercore
|
|
181
82
|
});
|
|
182
|
-
this._descriptors.set(descriptor.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (event === 'updated') {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
const { feed } = descriptor;
|
|
189
|
-
if (event === 'opened' && feed) {
|
|
190
|
-
feed.on('append', append);
|
|
191
|
-
this.feedOpenedEvent.emit(descriptor);
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
if (event === 'closed' && feed) {
|
|
195
|
-
feed.removeListener('append', append);
|
|
196
|
-
}
|
|
197
|
-
});
|
|
83
|
+
this._descriptors.set(descriptor.key.toString(), descriptor);
|
|
84
|
+
await descriptor.open();
|
|
85
|
+
this.feedOpenedEvent.emit(descriptor);
|
|
198
86
|
return descriptor;
|
|
199
87
|
}
|
|
200
88
|
}
|
|
201
|
-
__decorate([
|
|
202
|
-
async_1.synchronized
|
|
203
|
-
], FeedStore.prototype, "open", null);
|
|
204
89
|
__decorate([
|
|
205
90
|
async_1.synchronized
|
|
206
91
|
], FeedStore.prototype, "close", null);
|
|
207
|
-
__decorate([
|
|
208
|
-
async_1.synchronized
|
|
209
|
-
], FeedStore.prototype, "openFeeds", null);
|
|
210
|
-
__decorate([
|
|
211
|
-
async_1.synchronized
|
|
212
|
-
], FeedStore.prototype, "openFeed", null);
|
|
213
|
-
__decorate([
|
|
214
|
-
async_1.synchronized
|
|
215
|
-
], FeedStore.prototype, "closeFeed", null);
|
|
216
92
|
exports.FeedStore = FeedStore;
|
|
217
93
|
function patchBufferCodec(encoding) {
|
|
218
94
|
if (typeof encoding === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed-store.js","sourceRoot":"","sources":["../../src/feed-store.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;AAEF,oDAA4B;AAC5B,0DAAyC;AAEzC,uCAAkD;AAIlD,wEAA+C;
|
|
1
|
+
{"version":3,"file":"feed-store.js","sourceRoot":"","sources":["../../src/feed-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
/* eslint-disable jest/no-done-callback */
|
|
10
|
+
const assert_1 = __importDefault(require("assert"));
|
|
10
11
|
const hypercore_1 = __importDefault(require("hypercore"));
|
|
11
12
|
const hypertrie_1 = __importDefault(require("hypertrie"));
|
|
12
13
|
const pify_1 = __importDefault(require("pify"));
|
|
@@ -16,22 +17,19 @@ const crypto_1 = require("@dxos/crypto");
|
|
|
16
17
|
const random_access_multi_storage_1 = require("@dxos/random-access-multi-storage");
|
|
17
18
|
const feed_store_1 = require("./feed-store");
|
|
18
19
|
const feedNames = ['booksFeed', 'usersFeed', 'groupsFeed'];
|
|
19
|
-
const createFeedStore =
|
|
20
|
+
const createFeedStore = (storage, options = {}) => {
|
|
20
21
|
const feedStore = new feed_store_1.FeedStore(storage, options);
|
|
21
|
-
await feedStore.open();
|
|
22
22
|
return feedStore;
|
|
23
23
|
};
|
|
24
24
|
async function createDefault() {
|
|
25
25
|
const directory = tempy_1.default.directory();
|
|
26
26
|
return {
|
|
27
27
|
directory,
|
|
28
|
-
feedStore:
|
|
28
|
+
feedStore: createFeedStore(random_access_multi_storage_1.createStorage(directory, random_access_multi_storage_1.STORAGE_NODE), { valueEncoding: 'utf-8' })
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
async function defaultFeeds(feedStore, keys) {
|
|
32
|
-
return Object.fromEntries(await Promise.all(Object.entries(keys).map(async ([feed, keyPair]) => feed
|
|
33
|
-
? [feed, await feedStore.createReadWriteFeed({ key: keyPair.key, secretKey: keyPair.secretKey, metadata: { topic: 'books' } })]
|
|
34
|
-
: [feed, await feedStore.createReadWriteFeed({ key: keyPair.key, secretKey: keyPair.secretKey })])));
|
|
32
|
+
return Object.fromEntries(await Promise.all(Object.entries(keys).map(async ([feed, keyPair]) => [feed, await feedStore.openReadWriteFeed(keyPair.key, keyPair.secretKey)])));
|
|
35
33
|
}
|
|
36
34
|
function append(feed, message) {
|
|
37
35
|
return pify_1.default(feed.append.bind(feed))(message);
|
|
@@ -50,12 +48,8 @@ describe('FeedStore', () => {
|
|
|
50
48
|
test('Config default', async () => {
|
|
51
49
|
const feedStore = await createFeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM));
|
|
52
50
|
expect(feedStore).toBeInstanceOf(feed_store_1.FeedStore);
|
|
53
|
-
expect(feedStore.opened).toBeTruthy();
|
|
54
51
|
const feedStore2 = new feed_store_1.FeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM));
|
|
55
52
|
expect(feedStore2).toBeInstanceOf(feed_store_1.FeedStore);
|
|
56
|
-
expect(feedStore2.opened).toBeFalsy();
|
|
57
|
-
await feedStore2.open();
|
|
58
|
-
expect(feedStore2.opened).toBeTruthy();
|
|
59
53
|
});
|
|
60
54
|
test('Config default + custom database + custom hypercore', async () => {
|
|
61
55
|
const customHypercore = jest.fn((...args) => {
|
|
@@ -64,107 +58,74 @@ describe('FeedStore', () => {
|
|
|
64
58
|
const storage = random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM);
|
|
65
59
|
const database = hypertrie_1.default(storage.createOrOpen.bind(storage), { valueEncoding: 'json' });
|
|
66
60
|
database.list = jest.fn((_, cb) => cb(null, []));
|
|
67
|
-
const feedStore =
|
|
61
|
+
const feedStore = createFeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM), {
|
|
68
62
|
hypercore: customHypercore
|
|
69
63
|
});
|
|
70
64
|
expect(feedStore).toBeInstanceOf(feed_store_1.FeedStore);
|
|
71
|
-
await feedStore.
|
|
65
|
+
await feedStore.openReadOnlyFeed(crypto_1.PublicKey.random());
|
|
72
66
|
expect(customHypercore.mock.calls.length).toBe(1);
|
|
73
67
|
});
|
|
74
68
|
test('Create feed', async () => {
|
|
75
69
|
const { feedStore } = await createDefault();
|
|
76
|
-
const { booksFeed } = await defaultFeeds(feedStore, keys);
|
|
70
|
+
const { booksFeed: { feed: booksFeed } } = await defaultFeeds(feedStore, keys);
|
|
77
71
|
expect(booksFeed).toBeInstanceOf(hypercore_1.default);
|
|
78
|
-
const booksFeedDescriptor = feedStore.
|
|
72
|
+
const booksFeedDescriptor = await feedStore.openReadWriteFeed(crypto_1.PublicKey.from(booksFeed.key), booksFeed.secretKey);
|
|
79
73
|
expect(booksFeedDescriptor).toHaveProperty('key', crypto_1.PublicKey.from(booksFeed.key));
|
|
80
|
-
expect(booksFeedDescriptor === null || booksFeedDescriptor === void 0 ? void 0 : booksFeedDescriptor.metadata).toHaveProperty('topic', 'books');
|
|
81
74
|
await append(booksFeed, 'Foundation and Empire');
|
|
82
75
|
await expect(head(booksFeed)).resolves.toBe('Foundation and Empire');
|
|
83
76
|
// It should return the same opened instance.
|
|
84
|
-
await expect(feedStore.
|
|
77
|
+
await expect(feedStore.openReadOnlyFeed(crypto_1.PublicKey.from(booksFeed.key))).resolves.toBe(booksFeedDescriptor);
|
|
85
78
|
});
|
|
86
79
|
test('Create duplicate feed', async () => {
|
|
87
80
|
const { feedStore } = await createDefault();
|
|
88
|
-
const fds = await feedStore.
|
|
81
|
+
const { feed: fds } = await feedStore.openReadWriteFeed(keys.usersFeed.key, keys.usersFeed.secretKey);
|
|
82
|
+
assert_1.default(fds.secretKey);
|
|
89
83
|
const [usersFeed, feed2] = await Promise.all([
|
|
90
|
-
feedStore.
|
|
91
|
-
feedStore.
|
|
84
|
+
feedStore.openReadWriteFeed(crypto_1.PublicKey.from(fds.key), fds.secretKey),
|
|
85
|
+
feedStore.openReadWriteFeed(crypto_1.PublicKey.from(fds.key), fds.secretKey)
|
|
92
86
|
]);
|
|
93
|
-
expect(usersFeed).toBe(feed2);
|
|
94
|
-
await append(usersFeed, 'alice');
|
|
95
|
-
await expect(head(usersFeed)).resolves.toBe('alice');
|
|
87
|
+
expect(usersFeed.feed).toBe(feed2.feed);
|
|
88
|
+
await append(usersFeed.feed, 'alice');
|
|
89
|
+
await expect(head(usersFeed.feed)).resolves.toBe('alice');
|
|
96
90
|
});
|
|
97
91
|
test('Create and close a feed', async () => {
|
|
98
92
|
const { feedStore } = await createDefault();
|
|
99
93
|
const publicKey = crypto_1.PublicKey.random();
|
|
100
|
-
await
|
|
101
|
-
const foo = await feedStore.createReadOnlyFeed({ key: publicKey });
|
|
94
|
+
const foo = await feedStore.openReadOnlyFeed(publicKey);
|
|
102
95
|
expect(foo.opened).toBeTruthy();
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
expect(foo.closed).toBeTruthy();
|
|
96
|
+
await feedStore.close();
|
|
97
|
+
expect(foo.opened).toBeFalsy();
|
|
106
98
|
});
|
|
107
99
|
test('Descriptors', async () => {
|
|
108
|
-
var _a;
|
|
109
100
|
const { feedStore } = await createDefault();
|
|
110
|
-
|
|
111
|
-
expect(
|
|
112
|
-
|
|
101
|
+
await defaultFeeds(feedStore, keys);
|
|
102
|
+
expect(Array.from(feedStore._descriptors.values()).map((fd) => fd.key))
|
|
103
|
+
.toEqual(Object.entries(keys).map(([, keyPair]) => keyPair.key));
|
|
113
104
|
});
|
|
114
105
|
test('Feeds', async () => {
|
|
115
106
|
const { feedStore } = await createDefault();
|
|
116
107
|
const { booksFeed, usersFeed, groupsFeed } = await defaultFeeds(feedStore, keys);
|
|
117
|
-
expect(feedStore.
|
|
118
|
-
|
|
119
|
-
expect(feedStore.getOpenFeed(() => false)).toBeUndefined();
|
|
120
|
-
expect(feedStore.getOpenFeeds(fd => fd.key.equals(keys.booksFeed.key))).toEqual([booksFeed]);
|
|
121
|
-
});
|
|
122
|
-
test('Close/Load feed', async () => {
|
|
123
|
-
const { feedStore } = await createDefault();
|
|
124
|
-
const { booksFeed } = await defaultFeeds(feedStore, keys);
|
|
125
|
-
await feedStore.closeFeed(keys.booksFeed.key);
|
|
126
|
-
expect(feedStore.getDescriptors().find(fd => fd.key.equals(keys.booksFeed.key))).toHaveProperty('opened', false);
|
|
127
|
-
const [feed] = await feedStore.openFeeds(fd => fd.key.equals(keys.booksFeed.key));
|
|
128
|
-
expect(feed).toBeDefined();
|
|
129
|
-
expect(feed.key).toEqual(booksFeed.key);
|
|
130
|
-
expect(feedStore.getDescriptors().find(fd => fd.key.equals(keys.booksFeed.key))).toHaveProperty('opened', true);
|
|
108
|
+
expect(Array.from(feedStore._descriptors.values()).map((fd) => fd.key))
|
|
109
|
+
.toEqual([booksFeed.key, usersFeed.key, groupsFeed.key]);
|
|
131
110
|
});
|
|
132
111
|
test('Close feedStore and their feeds', async () => {
|
|
133
112
|
const { feedStore } = await createDefault();
|
|
134
113
|
await defaultFeeds(feedStore, keys);
|
|
135
|
-
expect(feedStore.
|
|
136
|
-
expect(feedStore.closed).toBe(false);
|
|
137
|
-
expect(feedStore.getDescriptors().filter(fd => fd.opened).length).toBe(3);
|
|
114
|
+
expect(Array.from(feedStore._descriptors.values()).map((fd) => fd.key).length).toBe(3);
|
|
138
115
|
await feedStore.close();
|
|
139
|
-
expect(feedStore.
|
|
140
|
-
expect(feedStore.opened).toBe(false);
|
|
141
|
-
expect(feedStore.closed).toBe(true);
|
|
116
|
+
expect(Array.from(feedStore._descriptors.values()).map((fd) => fd.key).length).toBe(0);
|
|
142
117
|
});
|
|
143
118
|
test('Default codec: binary', async () => {
|
|
144
|
-
const feedStore =
|
|
119
|
+
const feedStore = createFeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM));
|
|
145
120
|
expect(feedStore).toBeInstanceOf(feed_store_1.FeedStore);
|
|
146
121
|
const { publicKey, secretKey } = crypto_1.createKeyPair();
|
|
147
|
-
const feed = await feedStore.
|
|
122
|
+
const { feed } = await feedStore.openReadWriteFeed(crypto_1.PublicKey.from(publicKey), secretKey);
|
|
148
123
|
expect(feed).toBeInstanceOf(hypercore_1.default);
|
|
149
124
|
await append(feed, 'test');
|
|
150
125
|
await expect(head(feed)).resolves.toBeInstanceOf(Buffer);
|
|
151
126
|
});
|
|
152
|
-
test('on open error should unlock the descriptor', async () => {
|
|
153
|
-
const feedStore = await createFeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM), {
|
|
154
|
-
hypercore: () => {
|
|
155
|
-
throw new Error('open error');
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
const publicKey = crypto_1.PublicKey.random();
|
|
159
|
-
await expect(feedStore.createReadOnlyFeed({ key: publicKey })).rejects.toThrow(/open error/);
|
|
160
|
-
const fd = feedStore.getDescriptors().find(fd => fd.key.equals(publicKey));
|
|
161
|
-
if (!fd) {
|
|
162
|
-
throw new Error('Descriptor not found');
|
|
163
|
-
}
|
|
164
|
-
await expect(fd.lock.executeSynchronized(async () => 'Unlocked')).resolves.toBe('Unlocked');
|
|
165
|
-
});
|
|
166
127
|
test('on close error should unlock the descriptor', async () => {
|
|
167
|
-
const feedStore =
|
|
128
|
+
const feedStore = createFeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM), {
|
|
168
129
|
hypercore: () => ({
|
|
169
130
|
opened: true,
|
|
170
131
|
ready(cb) {
|
|
@@ -177,31 +138,8 @@ describe('FeedStore', () => {
|
|
|
177
138
|
})
|
|
178
139
|
});
|
|
179
140
|
const publicKey = crypto_1.PublicKey.random();
|
|
180
|
-
await feedStore.
|
|
181
|
-
const fd = feedStore.getDescriptors().find(fd => fd.key.equals(publicKey));
|
|
182
|
-
if (!fd) {
|
|
183
|
-
throw new Error('Descriptor not found');
|
|
184
|
-
}
|
|
185
|
-
await expect(feedStore.closeFeed(publicKey)).rejects.toThrow(/close error/);
|
|
141
|
+
await feedStore.openReadOnlyFeed(publicKey);
|
|
186
142
|
await expect(feedStore.close()).rejects.toThrow(/close error/);
|
|
187
|
-
await expect(fd.lock.executeSynchronized(async () => 'Unlocked')).resolves.toBe('Unlocked');
|
|
188
|
-
});
|
|
189
|
-
test('append event', async (done) => {
|
|
190
|
-
const feedStore = await createFeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM));
|
|
191
|
-
const { publicKey, secretKey } = crypto_1.createKeyPair();
|
|
192
|
-
const feed = await feedStore.createReadWriteFeed({ key: crypto_1.PublicKey.from(publicKey), secretKey });
|
|
193
|
-
feedStore.appendEvent.on((descriptor) => {
|
|
194
|
-
expect(descriptor.feed).toBe(feed);
|
|
195
|
-
done();
|
|
196
|
-
});
|
|
197
|
-
feed.append('test');
|
|
198
|
-
});
|
|
199
|
-
test('openFeed should wait until FeedStore is ready', async () => {
|
|
200
|
-
const feedStore = new feed_store_1.FeedStore(random_access_multi_storage_1.createStorage('', random_access_multi_storage_1.STORAGE_RAM));
|
|
201
|
-
await feedStore.open();
|
|
202
|
-
const publicKey = crypto_1.PublicKey.random();
|
|
203
|
-
const feed = await feedStore.createReadOnlyFeed({ key: publicKey });
|
|
204
|
-
expect(feed).toBeDefined();
|
|
205
143
|
});
|
|
206
144
|
test('feed event does not get called twice', async () => {
|
|
207
145
|
const { feedStore } = await createDefault();
|
|
@@ -210,10 +148,10 @@ describe('FeedStore', () => {
|
|
|
210
148
|
timesCalled++;
|
|
211
149
|
});
|
|
212
150
|
const key = crypto_1.PublicKey.random();
|
|
213
|
-
await feedStore.
|
|
214
|
-
await feedStore.
|
|
215
|
-
await feedStore.
|
|
216
|
-
await feedStore.
|
|
151
|
+
await feedStore.openReadOnlyFeed(key);
|
|
152
|
+
await feedStore.openReadOnlyFeed(key);
|
|
153
|
+
await feedStore.openReadOnlyFeed(key);
|
|
154
|
+
await feedStore.openReadOnlyFeed(key);
|
|
217
155
|
await async_1.sleep(20); // To flush events
|
|
218
156
|
expect(timesCalled).toEqual(1);
|
|
219
157
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed-store.test.js","sourceRoot":"","sources":["../../src/feed-store.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"feed-store.test.js","sourceRoot":"","sources":["../../src/feed-store.test.ts"],"names":[],"mappings":"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"}
|