@fireproof/core 0.20.0-dev-preview-17 → 0.20.0-dev-preview-19
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/index.cjs +107 -128
- package/index.cjs.map +1 -1
- package/index.d.cts +102 -93
- package/index.d.ts +102 -93
- package/index.js +107 -128
- package/index.js.map +1 -1
- package/metafile-cjs.json +1 -1
- package/metafile-esm.json +1 -1
- package/package.json +1 -1
- package/tests/blockstore/interceptor-gateway.test.ts +17 -17
- package/tests/blockstore/keyed-crypto-indexdb-file.test.ts +7 -6
- package/tests/blockstore/keyed-crypto.test.ts +14 -13
- package/tests/blockstore/store.test.ts +19 -11
- package/tests/fireproof/all-gateway.test.ts +67 -60
@@ -1,51 +1,51 @@
|
|
1
1
|
import { Result, URI } from "@adviser/cement";
|
2
|
-
import { bs, fireproof
|
2
|
+
import { bs, fireproof } from "@fireproof/core";
|
3
3
|
|
4
4
|
class TestInterceptor extends bs.PassThroughGateway {
|
5
5
|
readonly fn = vitest.fn();
|
6
6
|
|
7
|
-
async buildUrl(
|
8
|
-
const ret = await super.buildUrl(
|
7
|
+
async buildUrl(ctx: bs.SerdeGatewayCtx, baseUrl: URI, key: string): Promise<Result<bs.SerdeGatewayBuildUrlReturn>> {
|
8
|
+
const ret = await super.buildUrl(ctx, baseUrl, key);
|
9
9
|
this.fn("buildUrl", ret);
|
10
10
|
return ret;
|
11
11
|
}
|
12
12
|
|
13
|
-
async start(
|
14
|
-
const ret = await super.start(
|
13
|
+
async start(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayStartReturn>> {
|
14
|
+
const ret = await super.start(ctx, baseUrl);
|
15
15
|
this.fn("start", ret);
|
16
16
|
return ret;
|
17
17
|
}
|
18
|
-
async close(
|
19
|
-
const ret = await super.close(
|
18
|
+
async close(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayCloseReturn>> {
|
19
|
+
const ret = await super.close(ctx, baseUrl);
|
20
20
|
this.fn("close", ret);
|
21
21
|
return ret;
|
22
22
|
}
|
23
|
-
async delete(
|
24
|
-
const ret = await super.delete(
|
23
|
+
async delete(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayDeleteReturn>> {
|
24
|
+
const ret = await super.delete(ctx, baseUrl);
|
25
25
|
this.fn("delete", ret);
|
26
26
|
return ret;
|
27
27
|
}
|
28
|
-
async destroy(
|
29
|
-
const ret = await super.destroy(
|
28
|
+
async destroy(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayDestroyReturn>> {
|
29
|
+
const ret = await super.destroy(ctx, baseUrl);
|
30
30
|
this.fn("destroy", ret);
|
31
31
|
return ret;
|
32
32
|
}
|
33
|
-
async put<T>(
|
34
|
-
const ret = await super.put<T>(
|
33
|
+
async put<T>(ctx: bs.SerdeGatewayCtx, url: URI, body: bs.FPEnvelope<T>): Promise<Result<bs.SerdeGatewayPutReturn<T>>> {
|
34
|
+
const ret = await super.put<T>(ctx, url, body);
|
35
35
|
this.fn("put", ret);
|
36
36
|
return ret;
|
37
37
|
}
|
38
|
-
async get<S>(
|
39
|
-
const ret = await super.get<S>(
|
38
|
+
async get<S>(ctx: bs.SerdeGatewayCtx, url: URI): Promise<Result<bs.SerdeGatewayGetReturn<S>>> {
|
39
|
+
const ret = await super.get<S>(ctx, url);
|
40
40
|
this.fn("get", ret);
|
41
41
|
return ret;
|
42
42
|
}
|
43
43
|
async subscribe(
|
44
|
-
|
44
|
+
ctx: bs.SerdeGatewayCtx,
|
45
45
|
url: URI,
|
46
46
|
callback: (meta: bs.FPEnvelopeMeta) => Promise<void>,
|
47
47
|
): Promise<Result<bs.SerdeGatewaySubscribeReturn>> {
|
48
|
-
const ret = await super.subscribe(
|
48
|
+
const ret = await super.subscribe(ctx, url, callback);
|
49
49
|
this.fn("subscribe", ret);
|
50
50
|
return ret;
|
51
51
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { bs, PARAM, rt } from "@fireproof/core";
|
1
|
+
import { bs, ensureSuperThis, PARAM, rt } from "@fireproof/core";
|
2
2
|
import { runtimeFn, toCryptoRuntime, URI } from "@adviser/cement";
|
3
3
|
import { base58btc } from "multiformats/bases/base58";
|
4
4
|
import { mockSuperThis } from "../helpers.js";
|
@@ -56,7 +56,7 @@ describe("KeyBag indexdb and file", () => {
|
|
56
56
|
|
57
57
|
let diskBag: rt.kb.KeyItem;
|
58
58
|
let diskBag2: rt.kb.KeyItem;
|
59
|
-
const provider = await kb.rt.
|
59
|
+
const provider = await kb.rt.getBagProvider();
|
60
60
|
if (runtimeFn().isBrowser) {
|
61
61
|
const p = provider as KeyBagProviderIndexDB;
|
62
62
|
diskBag = await p._prepare().then((db) => db.get("bag", name));
|
@@ -94,7 +94,7 @@ describe("KeyedCryptoStore", () => {
|
|
94
94
|
let loader: bs.Loadable;
|
95
95
|
// let logger: Logger;
|
96
96
|
let baseUrl: URI;
|
97
|
-
const sthis =
|
97
|
+
const sthis = ensureSuperThis();
|
98
98
|
beforeEach(async () => {
|
99
99
|
await sthis.start();
|
100
100
|
// logger = MockLogger().logger;
|
@@ -108,6 +108,7 @@ describe("KeyedCryptoStore", () => {
|
|
108
108
|
}
|
109
109
|
baseUrl = baseUrl.build().defParam(PARAM.NAME, "test").URI();
|
110
110
|
loader = {
|
111
|
+
sthis,
|
111
112
|
keyBag: () => rt.kb.getKeyBag(sthis, { url: kbUrl }),
|
112
113
|
} as bs.Loadable;
|
113
114
|
});
|
@@ -116,9 +117,9 @@ describe("KeyedCryptoStore", () => {
|
|
116
117
|
const url = baseUrl.build().setParam(PARAM.STORE_KEY, "insecure").URI();
|
117
118
|
|
118
119
|
for (const pstore of [
|
119
|
-
strt.makeDataStore({
|
120
|
-
strt.makeMetaStore({
|
121
|
-
strt.makeWALStore({
|
120
|
+
strt.makeDataStore({ url, loader }),
|
121
|
+
strt.makeMetaStore({ url, loader }),
|
122
|
+
strt.makeWALStore({ url, loader }),
|
122
123
|
]) {
|
123
124
|
const store = await pstore;
|
124
125
|
// await store.start();
|
@@ -87,7 +87,7 @@ describe("KeyBag", () => {
|
|
87
87
|
|
88
88
|
let diskBag: rt.kb.KeyItem;
|
89
89
|
let diskBag2: rt.kb.KeyItem;
|
90
|
-
const provider = await kb.rt.
|
90
|
+
const provider = await kb.rt.getBagProvider();
|
91
91
|
if (runtimeFn().isBrowser) {
|
92
92
|
const p = provider as KeyBagProviderIndexDB;
|
93
93
|
diskBag = await p._prepare().then((db) => db.get("bag", name));
|
@@ -152,6 +152,7 @@ describe("KeyedCryptoStore", () => {
|
|
152
152
|
baseUrl = baseUrl.build().setParam(PARAM.NAME, "test").URI();
|
153
153
|
kb = await rt.kb.getKeyBag(sthis, {});
|
154
154
|
loader = {
|
155
|
+
sthis,
|
155
156
|
keyBag: async () => kb,
|
156
157
|
} as bs.Loadable;
|
157
158
|
});
|
@@ -160,9 +161,9 @@ describe("KeyedCryptoStore", () => {
|
|
160
161
|
const url = baseUrl.build().setParam(PARAM.STORE_KEY, "insecure").URI();
|
161
162
|
|
162
163
|
for (const pstore of [
|
163
|
-
strt.makeDataStore({
|
164
|
-
strt.makeMetaStore({
|
165
|
-
strt.makeWALStore({
|
164
|
+
strt.makeDataStore({ url, loader }),
|
165
|
+
strt.makeMetaStore({ url, loader }),
|
166
|
+
strt.makeWALStore({ url, loader }),
|
166
167
|
]) {
|
167
168
|
const store = await pstore;
|
168
169
|
// await store.start();
|
@@ -177,9 +178,9 @@ describe("KeyedCryptoStore", () => {
|
|
177
178
|
it("create key", async () => {
|
178
179
|
const strt = bs.toStoreRuntime(sthis);
|
179
180
|
for (const pstore of [
|
180
|
-
strt.makeDataStore({
|
181
|
-
strt.makeMetaStore({
|
182
|
-
strt.makeWALStore({
|
181
|
+
strt.makeDataStore({ url: baseUrl, loader }),
|
182
|
+
strt.makeMetaStore({ url: baseUrl, loader }),
|
183
|
+
strt.makeWALStore({ url: baseUrl, loader }),
|
183
184
|
]) {
|
184
185
|
const store = await pstore; // await bs.ensureStart(await pstore, logger);
|
185
186
|
const kc = await store.keyedCrypto();
|
@@ -195,9 +196,9 @@ describe("KeyedCryptoStore", () => {
|
|
195
196
|
const url = baseUrl.build().setParam(PARAM.STORE_KEY, "@heute@").URI();
|
196
197
|
const strt = bs.toStoreRuntime(sthis);
|
197
198
|
for (const pstore of [
|
198
|
-
strt.makeDataStore({
|
199
|
-
strt.makeMetaStore({
|
200
|
-
strt.makeWALStore({
|
199
|
+
strt.makeDataStore({ url, loader }),
|
200
|
+
strt.makeMetaStore({ url, loader }),
|
201
|
+
strt.makeWALStore({ url, loader }),
|
201
202
|
]) {
|
202
203
|
const store = await pstore;
|
203
204
|
// await store.start();
|
@@ -220,9 +221,9 @@ describe("KeyedCryptoStore", () => {
|
|
220
221
|
const strt = bs.toStoreRuntime(sthis);
|
221
222
|
const url = baseUrl.build().setParam(PARAM.STORE_KEY, key).URI();
|
222
223
|
for (const pstore of [
|
223
|
-
strt.makeDataStore({
|
224
|
-
strt.makeMetaStore({
|
225
|
-
strt.makeWALStore({
|
224
|
+
strt.makeDataStore({ url, loader }),
|
225
|
+
strt.makeMetaStore({ url, loader }),
|
226
|
+
strt.makeWALStore({ url, loader }),
|
226
227
|
]) {
|
227
228
|
// for (const pstore of [strt.makeDataStore(loader), strt.makeMetaStore(loader), strt.makeWALStore(loader)]) {
|
228
229
|
const store = await pstore;
|
@@ -10,9 +10,10 @@ function runtime(sthis: SuperThis) {
|
|
10
10
|
async function mockLoader(sthis: SuperThis, name?: string): Promise<bs.StoreFactoryItem> {
|
11
11
|
const url = noopUrl(name);
|
12
12
|
return {
|
13
|
-
sthis,
|
13
|
+
// sthis,
|
14
14
|
url: url,
|
15
15
|
loader: {
|
16
|
+
sthis,
|
16
17
|
keyBag: () => rt.kb.getKeyBag(sthis),
|
17
18
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
18
19
|
handleDbMetasFromStore: (metas: DbMeta[]): Promise<void> => Promise.resolve(),
|
@@ -22,8 +23,9 @@ async function mockLoader(sthis: SuperThis, name?: string): Promise<bs.StoreFact
|
|
22
23
|
|
23
24
|
describe("DataStore", function () {
|
24
25
|
let store: bs.DataStore;
|
25
|
-
|
26
26
|
const sthis = ensureSuperThis();
|
27
|
+
let loader: bs.StoreFactoryItem;
|
28
|
+
|
27
29
|
afterEach(async () => {
|
28
30
|
await store.close();
|
29
31
|
await store.destroy();
|
@@ -31,7 +33,8 @@ describe("DataStore", function () {
|
|
31
33
|
|
32
34
|
beforeEach(async () => {
|
33
35
|
await sthis.start();
|
34
|
-
|
36
|
+
loader = await mockLoader(sthis);
|
37
|
+
store = await runtime(sthis).makeDataStore(loader);
|
35
38
|
await store.start();
|
36
39
|
});
|
37
40
|
|
@@ -45,7 +48,7 @@ describe("DataStore", function () {
|
|
45
48
|
bytes: new Uint8Array([55, 56, 57]),
|
46
49
|
};
|
47
50
|
await store.save(car);
|
48
|
-
const data = (await store.realGateway.getPlain(
|
51
|
+
const data = (await store.realGateway.getPlain(loader, store.url(), car.cid.toString())).Ok();
|
49
52
|
expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
|
50
53
|
});
|
51
54
|
});
|
@@ -53,6 +56,7 @@ describe("DataStore", function () {
|
|
53
56
|
describe("DataStore with a saved car", function () {
|
54
57
|
let store: bs.DataStore;
|
55
58
|
let car: bs.AnyBlock;
|
59
|
+
let loader: bs.StoreFactoryItem;
|
56
60
|
|
57
61
|
const sthis = ensureSuperThis();
|
58
62
|
|
@@ -63,7 +67,8 @@ describe("DataStore with a saved car", function () {
|
|
63
67
|
|
64
68
|
beforeEach(async function () {
|
65
69
|
await sthis.start();
|
66
|
-
|
70
|
+
loader = await mockLoader(sthis, "test2");
|
71
|
+
store = await runtime(sthis).makeDataStore(loader);
|
67
72
|
await store.start();
|
68
73
|
car = {
|
69
74
|
cid: "cid" as unknown as CID,
|
@@ -73,7 +78,7 @@ describe("DataStore with a saved car", function () {
|
|
73
78
|
});
|
74
79
|
|
75
80
|
it("should have a car", async function () {
|
76
|
-
const data = (await store.realGateway.getPlain(
|
81
|
+
const data = (await store.realGateway.getPlain(loader, store.url(), car.cid.toString())).Ok();
|
77
82
|
expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
|
78
83
|
});
|
79
84
|
|
@@ -93,8 +98,8 @@ describe("DataStore with a saved car", function () {
|
|
93
98
|
|
94
99
|
describe("MetaStore", function () {
|
95
100
|
let store: bs.MetaStore;
|
96
|
-
|
97
101
|
const sthis = ensureSuperThis();
|
102
|
+
let loader: bs.StoreFactoryItem;
|
98
103
|
|
99
104
|
afterEach(async () => {
|
100
105
|
await store.close();
|
@@ -103,7 +108,8 @@ describe("MetaStore", function () {
|
|
103
108
|
|
104
109
|
beforeEach(async function () {
|
105
110
|
await sthis.start();
|
106
|
-
|
111
|
+
loader = await mockLoader(sthis, "test");
|
112
|
+
store = await runtime(sthis).makeMetaStore(loader);
|
107
113
|
await store.start();
|
108
114
|
});
|
109
115
|
|
@@ -118,7 +124,7 @@ describe("MetaStore", function () {
|
|
118
124
|
// key: undefined,
|
119
125
|
};
|
120
126
|
await store.save(h);
|
121
|
-
const file = await store.realGateway.getPlain(
|
127
|
+
const file = await store.realGateway.getPlain(loader, store.url(), "main");
|
122
128
|
const blockMeta = (await rt.gw.fpDeserialize(sthis, store.url(), file)) as Result<bs.FPEnvelopeMeta>;
|
123
129
|
expect(blockMeta.Ok()).toBeTruthy();
|
124
130
|
expect(blockMeta.Ok().payload.length).toEqual(1);
|
@@ -133,6 +139,7 @@ describe("MetaStore with a saved header", function () {
|
|
133
139
|
let store: bs.MetaStore;
|
134
140
|
let cid: CID;
|
135
141
|
const sthis = ensureSuperThis();
|
142
|
+
let loader: bs.StoreFactoryItem;
|
136
143
|
|
137
144
|
afterEach(async () => {
|
138
145
|
await store.close();
|
@@ -141,7 +148,8 @@ describe("MetaStore with a saved header", function () {
|
|
141
148
|
|
142
149
|
beforeEach(async function () {
|
143
150
|
await sthis.start();
|
144
|
-
|
151
|
+
loader = await mockLoader(sthis, "test-saved-header");
|
152
|
+
store = await runtime(sthis).makeMetaStore(loader);
|
145
153
|
await store.start();
|
146
154
|
cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
147
155
|
await store.save({ cars: [cid] /*, key: undefined */ });
|
@@ -154,7 +162,7 @@ describe("MetaStore with a saved header", function () {
|
|
154
162
|
// });
|
155
163
|
|
156
164
|
it("should have a header", async function () {
|
157
|
-
const bytes = await store.realGateway.getPlain(
|
165
|
+
const bytes = await store.realGateway.getPlain(loader, store.url(), "main");
|
158
166
|
const data = sthis.txt.decode(bytes.Ok());
|
159
167
|
expect(data).toMatch(/parents/);
|
160
168
|
const header = JSON.parse(data)[0];
|
@@ -41,6 +41,7 @@ describe("noop Gateway", function () {
|
|
41
41
|
let fileGateway: bs.SerdeGateway;
|
42
42
|
let walGateway: bs.SerdeGateway;
|
43
43
|
const sthis = ensureSuperThis();
|
44
|
+
let ctx: { loader: bs.Loadable };
|
44
45
|
|
45
46
|
afterEach(async function () {
|
46
47
|
await db.close();
|
@@ -50,12 +51,13 @@ describe("noop Gateway", function () {
|
|
50
51
|
db = LedgerFactory("test-gateway-" + sthis.nextId().str, {
|
51
52
|
logger: sthis.logger,
|
52
53
|
});
|
54
|
+
ctx = { loader: await db.crdt.blockstore.loader };
|
53
55
|
|
54
56
|
// Extract stores from the loader
|
55
|
-
carStore = (await
|
56
|
-
metaStore = (await
|
57
|
-
fileStore = (await
|
58
|
-
walStore = (await
|
57
|
+
carStore = (await ctx.loader.carStore()) as bs.DataStore;
|
58
|
+
metaStore = (await ctx.loader.metaStore()) as bs.MetaStore;
|
59
|
+
fileStore = (await ctx.loader.fileStore()) as bs.DataStore;
|
60
|
+
walStore = (await ctx.loader.WALStore()) as bs.WALStore;
|
59
61
|
|
60
62
|
// Extract and log gateways
|
61
63
|
carGateway = carStore.realGateway;
|
@@ -112,19 +114,19 @@ describe("noop Gateway", function () {
|
|
112
114
|
|
113
115
|
it("should build CAR Gateway URL", async function () {
|
114
116
|
const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
|
115
|
-
const carUrl = await carGateway.buildUrl(
|
117
|
+
const carUrl = await carGateway.buildUrl(ctx, carStore.url(), testKey);
|
116
118
|
expect(carUrl.Ok().hasParam("key")).toBeTruthy();
|
117
119
|
});
|
118
120
|
|
119
121
|
it("should start CAR Gateway", async function () {
|
120
|
-
const url = await carGateway.start(
|
122
|
+
const url = await carGateway.start(ctx, carStore.url());
|
121
123
|
expect(url.Ok().asObj()).toEqual(carStore.url().asObj());
|
122
124
|
});
|
123
125
|
|
124
126
|
it("should put data in CAR Gateway", async function () {
|
125
|
-
const carUrl = await carGateway.buildUrl(
|
126
|
-
await carGateway.start(
|
127
|
-
const carPutResult = await carGateway.put(
|
127
|
+
const carUrl = await carGateway.buildUrl(ctx, carStore.url(), fileContent.cid);
|
128
|
+
await carGateway.start(ctx, carStore.url());
|
129
|
+
const carPutResult = await carGateway.put(ctx, carUrl.Ok(), {
|
128
130
|
type: bs.FPEnvelopeType.CAR,
|
129
131
|
payload: fileContent.block,
|
130
132
|
});
|
@@ -132,59 +134,59 @@ describe("noop Gateway", function () {
|
|
132
134
|
});
|
133
135
|
|
134
136
|
it("should get data from CAR Gateway", async function () {
|
135
|
-
const carUrl = await carGateway.buildUrl(
|
136
|
-
await carGateway.start(
|
137
|
-
await carGateway.put(
|
137
|
+
const carUrl = await carGateway.buildUrl(ctx, carStore.url(), fileContent.cid);
|
138
|
+
await carGateway.start(ctx, carStore.url());
|
139
|
+
await carGateway.put(ctx, carUrl.Ok(), {
|
138
140
|
type: bs.FPEnvelopeType.CAR,
|
139
141
|
payload: fileContent.block,
|
140
142
|
});
|
141
|
-
const carGetResult = await carGateway.get(
|
143
|
+
const carGetResult = await carGateway.get(ctx, carUrl.Ok());
|
142
144
|
expect(carGetResult.Ok().type).toEqual("car");
|
143
145
|
expect(carGetResult.Ok().payload).toEqual(fileContent.block);
|
144
146
|
// customExpect(carGetResult.Ok(), (v) => expect(v).toEqual(testData), "carGetResult should match testData");
|
145
147
|
});
|
146
148
|
|
147
149
|
it("should delete data from CAR Gateway", async function () {
|
148
|
-
const carUrl = await carGateway.buildUrl(
|
149
|
-
await carGateway.start(
|
150
|
-
await carGateway.put(
|
150
|
+
const carUrl = await carGateway.buildUrl(ctx, carStore.url(), fileContent.cid);
|
151
|
+
await carGateway.start(ctx, carStore.url());
|
152
|
+
await carGateway.put(ctx, carUrl.Ok(), {
|
151
153
|
type: bs.FPEnvelopeType.CAR,
|
152
154
|
payload: fileContent.block,
|
153
155
|
});
|
154
|
-
const carDeleteResult = await carGateway.delete(
|
156
|
+
const carDeleteResult = await carGateway.delete(ctx, carUrl.Ok());
|
155
157
|
expect(carDeleteResult.isOk()).toBeTruthy();
|
156
158
|
});
|
157
159
|
|
158
160
|
it("should close CAR Gateway", async function () {
|
159
|
-
await carGateway.close(
|
161
|
+
await carGateway.close(ctx, carStore.url());
|
160
162
|
});
|
161
163
|
it("should build Meta Gateway URL", async function () {
|
162
|
-
const metaUrl = await metaGateway.buildUrl(
|
164
|
+
const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
|
163
165
|
expect(metaUrl.Ok()).toBeTruthy();
|
164
166
|
});
|
165
167
|
|
166
168
|
it("should start Meta Gateway", async function () {
|
167
|
-
await metaGateway.start(
|
169
|
+
await metaGateway.start(ctx, metaStore.url());
|
168
170
|
});
|
169
171
|
|
170
172
|
it("should close Meta Gateway", async function () {
|
171
|
-
await metaGateway.start(
|
172
|
-
await metaGateway.close(
|
173
|
+
await metaGateway.start(ctx, metaStore.url());
|
174
|
+
await metaGateway.close(ctx, metaStore.url());
|
173
175
|
});
|
174
176
|
|
175
177
|
it("should build File Gateway URL", async function () {
|
176
|
-
const fileUrl = await fileGateway.buildUrl(
|
178
|
+
const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
|
177
179
|
expect(fileUrl.Ok()).toBeTruthy();
|
178
180
|
});
|
179
181
|
|
180
182
|
it("should start File Gateway", async function () {
|
181
|
-
await fileGateway.start(
|
183
|
+
await fileGateway.start(ctx, fileStore.url());
|
182
184
|
});
|
183
185
|
|
184
186
|
it("should put data to File Gateway", async function () {
|
185
|
-
const fileUrl = await fileGateway.buildUrl(
|
186
|
-
await fileGateway.start(
|
187
|
-
const filePutResult = await fileGateway.put(
|
187
|
+
const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
|
188
|
+
await fileGateway.start(ctx, fileStore.url());
|
189
|
+
const filePutResult = await fileGateway.put(ctx, fileUrl.Ok(), {
|
188
190
|
type: bs.FPEnvelopeType.FILE,
|
189
191
|
payload: fileContent.block,
|
190
192
|
});
|
@@ -192,48 +194,48 @@ describe("noop Gateway", function () {
|
|
192
194
|
});
|
193
195
|
|
194
196
|
it("should get data from File Gateway", async function () {
|
195
|
-
const fileUrl = await fileGateway.buildUrl(
|
196
|
-
await fileGateway.start(
|
197
|
-
await fileGateway.put(
|
197
|
+
const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
|
198
|
+
await fileGateway.start(ctx, fileStore.url());
|
199
|
+
await fileGateway.put(ctx, fileUrl.Ok(), {
|
198
200
|
type: bs.FPEnvelopeType.FILE,
|
199
201
|
payload: fileContent.block,
|
200
202
|
});
|
201
|
-
const fileGetResult = await fileGateway.get(
|
203
|
+
const fileGetResult = await fileGateway.get(ctx, fileUrl.Ok());
|
202
204
|
expect(fileGetResult.Ok().type).toEqual("file");
|
203
205
|
expect(fileGetResult.Ok().payload).toEqual(fileContent.block);
|
204
206
|
});
|
205
207
|
|
206
208
|
it("should delete data from File Gateway", async function () {
|
207
|
-
const fileUrl = await fileGateway.buildUrl(
|
208
|
-
await fileGateway.start(
|
209
|
-
await fileGateway.put(
|
209
|
+
const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
|
210
|
+
await fileGateway.start(ctx, fileStore.url());
|
211
|
+
await fileGateway.put(ctx, fileUrl.Ok(), {
|
210
212
|
type: bs.FPEnvelopeType.FILE,
|
211
213
|
payload: fileContent.block,
|
212
214
|
});
|
213
|
-
const fileDeleteResult = await fileGateway.delete(
|
215
|
+
const fileDeleteResult = await fileGateway.delete(ctx, fileUrl.Ok());
|
214
216
|
expect(fileDeleteResult.isOk()).toBeTruthy();
|
215
217
|
});
|
216
218
|
|
217
219
|
it("should close File Gateway", async function () {
|
218
|
-
await fileGateway.close(
|
220
|
+
await fileGateway.close(ctx, fileStore.url());
|
219
221
|
});
|
220
222
|
it("should build WAL Gateway URL", async function () {
|
221
223
|
const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
|
222
|
-
const walUrl = await walGateway.buildUrl(
|
224
|
+
const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
|
223
225
|
expect(walUrl.Ok()).toBeTruthy();
|
224
226
|
});
|
225
227
|
|
226
228
|
it("should start WAL Gateway", async function () {
|
227
|
-
await walGateway.start(
|
229
|
+
await walGateway.start(ctx, walStore.url());
|
228
230
|
});
|
229
231
|
|
230
232
|
it("should put data to WAL Gateway", async function () {
|
231
233
|
const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
|
232
|
-
const walUrl = await walGateway.buildUrl(
|
233
|
-
await walGateway.start(
|
234
|
+
const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
|
235
|
+
await walGateway.start(ctx, walStore.url());
|
234
236
|
// const walTestDataString = JSON.stringify();
|
235
237
|
// const walTestData = sthis.txt.encode(walTestDataString);
|
236
|
-
const walPutResult = await walGateway.put(
|
238
|
+
const walPutResult = await walGateway.put(ctx, walUrl.Ok(), {
|
237
239
|
type: bs.FPEnvelopeType.WAL,
|
238
240
|
payload: {
|
239
241
|
operations: [],
|
@@ -246,8 +248,8 @@ describe("noop Gateway", function () {
|
|
246
248
|
|
247
249
|
it("should get data from WAL Gateway", async function () {
|
248
250
|
const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
|
249
|
-
const walUrl = await walGateway.buildUrl(
|
250
|
-
await walGateway.start(
|
251
|
+
const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
|
252
|
+
await walGateway.start(ctx, walStore.url());
|
251
253
|
const ref: bs.WALState = {
|
252
254
|
operations: [
|
253
255
|
{
|
@@ -272,11 +274,11 @@ describe("noop Gateway", function () {
|
|
272
274
|
// fileOperations: [],
|
273
275
|
// });
|
274
276
|
// const walTestData = sthis.txt.encode(walTestDataString);
|
275
|
-
await walGateway.put(
|
277
|
+
await walGateway.put(ctx, walUrl.Ok(), {
|
276
278
|
type: bs.FPEnvelopeType.WAL,
|
277
279
|
payload: ref,
|
278
280
|
});
|
279
|
-
const walGetResult = await walGateway.get(
|
281
|
+
const walGetResult = await walGateway.get(ctx, walUrl.Ok());
|
280
282
|
expect(walGetResult.isOk()).toBeTruthy();
|
281
283
|
// const okResult = walGetResult.Ok();
|
282
284
|
// const decodedResult = sthis.txt.decode(okResult);
|
@@ -285,8 +287,8 @@ describe("noop Gateway", function () {
|
|
285
287
|
|
286
288
|
it("should delete data from WAL Gateway", async function () {
|
287
289
|
const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
|
288
|
-
const walUrl = await walGateway.buildUrl(
|
289
|
-
await walGateway.start(
|
290
|
+
const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
|
291
|
+
await walGateway.start(ctx, walStore.url());
|
290
292
|
const ref: bs.WALState = {
|
291
293
|
operations: [
|
292
294
|
{
|
@@ -305,17 +307,17 @@ describe("noop Gateway", function () {
|
|
305
307
|
},
|
306
308
|
],
|
307
309
|
};
|
308
|
-
await walGateway.put(
|
310
|
+
await walGateway.put(ctx, walUrl.Ok(), {
|
309
311
|
type: bs.FPEnvelopeType.WAL,
|
310
312
|
payload: ref,
|
311
313
|
});
|
312
|
-
const walDeleteResult = await walGateway.delete(
|
314
|
+
const walDeleteResult = await walGateway.delete(ctx, walUrl.Ok());
|
313
315
|
expect(walDeleteResult.isOk()).toBeTruthy();
|
314
316
|
});
|
315
317
|
|
316
318
|
it("should close WAL Gateway", async function () {
|
317
|
-
await walGateway.start(
|
318
|
-
await walGateway.close(
|
319
|
+
await walGateway.start(ctx, walStore.url());
|
320
|
+
await walGateway.close(ctx, walStore.url());
|
319
321
|
});
|
320
322
|
|
321
323
|
// it("should have correct CAR Gateway properties", async function () {
|
@@ -370,6 +372,7 @@ describe("noop Gateway subscribe", function () {
|
|
370
372
|
|
371
373
|
let metaGateway: bs.SerdeGateway;
|
372
374
|
const sthis = ensureSuperThis();
|
375
|
+
let ctx: bs.SerdeGatewayCtx;
|
373
376
|
|
374
377
|
afterEach(async function () {
|
375
378
|
await db.close();
|
@@ -378,19 +381,20 @@ describe("noop Gateway subscribe", function () {
|
|
378
381
|
beforeEach(async function () {
|
379
382
|
db = fireproof("test-gateway-" + sthis.nextId().str);
|
380
383
|
|
384
|
+
ctx = { loader: db.ledger.crdt.blockstore.loader };
|
381
385
|
// Extract stores from the loader
|
382
386
|
metaStore = (await db.ledger.crdt.blockstore.loader?.metaStore()) as bs.MetaStore;
|
383
387
|
|
384
388
|
metaGateway = metaStore.realGateway;
|
385
389
|
});
|
386
390
|
it("should subscribe to meta Gateway", async function () {
|
387
|
-
const metaUrl = await metaGateway.buildUrl(
|
388
|
-
await metaGateway.start(
|
391
|
+
const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
|
392
|
+
await metaGateway.start(ctx, metaStore.url());
|
389
393
|
|
390
394
|
let didCall = false;
|
391
395
|
const p = new Future<void>();
|
392
396
|
|
393
|
-
const metaSubscribeResult = (await metaGateway.subscribe(
|
397
|
+
const metaSubscribeResult = (await metaGateway.subscribe(ctx, metaUrl.Ok(), async (data: bs.FPEnvelopeMeta) => {
|
394
398
|
// const decodedData = sthis.txt.decode(data);
|
395
399
|
expect(Array.isArray(data.payload)).toBeTruthy();
|
396
400
|
didCall = true;
|
@@ -417,12 +421,15 @@ describe("Gateway", function () {
|
|
417
421
|
// let walGateway: ExtendedGateway;
|
418
422
|
const sthis = ensureSuperThis();
|
419
423
|
|
424
|
+
let ctx: bs.SerdeGatewayCtx;
|
425
|
+
|
420
426
|
afterEach(async function () {
|
421
427
|
await db.close();
|
422
428
|
await db.destroy();
|
423
429
|
});
|
424
430
|
beforeEach(async function () {
|
425
431
|
db = fireproof("test-gateway-" + sthis.nextId().str);
|
432
|
+
ctx = { loader: db.ledger.crdt.blockstore.loader };
|
426
433
|
const ok = await db.put({ _id: "test", foo: "bar" });
|
427
434
|
expect(ok).toBeTruthy();
|
428
435
|
expect(ok.id).toBe("test");
|
@@ -441,9 +448,9 @@ describe("Gateway", function () {
|
|
441
448
|
});
|
442
449
|
|
443
450
|
it("should get data from Meta Gateway", async function () {
|
444
|
-
const metaUrl = await metaGateway.buildUrl(
|
445
|
-
await metaGateway.start(
|
446
|
-
const metaGetResult = await metaGateway.get(
|
451
|
+
const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
|
452
|
+
await metaGateway.start(ctx, metaStore.url());
|
453
|
+
const metaGetResult = await metaGateway.get(ctx, metaUrl.Ok());
|
447
454
|
expect(metaGetResult.isOk()).toBeTruthy();
|
448
455
|
const meta = metaGetResult.Ok().payload as bs.DbMetaEvent[];
|
449
456
|
// const metaGetResultOk = metaGetResult.Ok();
|
@@ -453,10 +460,10 @@ describe("Gateway", function () {
|
|
453
460
|
});
|
454
461
|
|
455
462
|
it("should delete data from Meta Gateway", async function () {
|
456
|
-
const metaUrl = await metaGateway.buildUrl(
|
457
|
-
await metaGateway.start(
|
463
|
+
const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
|
464
|
+
await metaGateway.start(ctx, metaStore.url());
|
458
465
|
// should we be testing .destroy() instead?
|
459
|
-
const metaDeleteResult = await metaGateway.delete(
|
466
|
+
const metaDeleteResult = await metaGateway.delete(ctx, metaUrl.Ok());
|
460
467
|
expect(metaDeleteResult.isOk()).toBeTruthy();
|
461
468
|
});
|
462
469
|
});
|