@fireproof/core-test 0.0.0-smoke-1b31059-1752074105

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.
Files changed (162) hide show
  1. package/LICENSE.md +232 -0
  2. package/blockstore/fp-envelope.test.ts-off +65 -0
  3. package/blockstore/fragment-gateway.test.ts-off +106 -0
  4. package/blockstore/interceptor-gateway.test.d.ts +19 -0
  5. package/blockstore/interceptor-gateway.test.js +217 -0
  6. package/blockstore/interceptor-gateway.test.js.map +1 -0
  7. package/blockstore/interceptor-gateway.test.ts +259 -0
  8. package/blockstore/keyed-crypto-indexeddb-file.test.d.ts +1 -0
  9. package/blockstore/keyed-crypto-indexeddb-file.test.js +114 -0
  10. package/blockstore/keyed-crypto-indexeddb-file.test.js.map +1 -0
  11. package/blockstore/keyed-crypto-indexeddb-file.test.ts +134 -0
  12. package/blockstore/keyed-crypto.test.d.ts +1 -0
  13. package/blockstore/keyed-crypto.test.js +310 -0
  14. package/blockstore/keyed-crypto.test.js.map +1 -0
  15. package/blockstore/keyed-crypto.test.ts +382 -0
  16. package/blockstore/loader.test.d.ts +1 -0
  17. package/blockstore/loader.test.js +241 -0
  18. package/blockstore/loader.test.js.map +1 -0
  19. package/blockstore/loader.test.ts +313 -0
  20. package/blockstore/standalone.test.d.ts +1 -0
  21. package/blockstore/standalone.test.js +112 -0
  22. package/blockstore/standalone.test.js.map +1 -0
  23. package/blockstore/standalone.test.ts +156 -0
  24. package/blockstore/store.test.d.ts +1 -0
  25. package/blockstore/store.test.js +152 -0
  26. package/blockstore/store.test.js.map +1 -0
  27. package/blockstore/store.test.ts +199 -0
  28. package/blockstore/transaction.test.d.ts +1 -0
  29. package/blockstore/transaction.test.js +109 -0
  30. package/blockstore/transaction.test.js.map +1 -0
  31. package/blockstore/transaction.test.ts +132 -0
  32. package/fireproof/all-gateway.test.d.ts +1 -0
  33. package/fireproof/all-gateway.test.js +333 -0
  34. package/fireproof/all-gateway.test.js.map +1 -0
  35. package/fireproof/all-gateway.test.ts +477 -0
  36. package/fireproof/attachable.test.d.ts +1 -0
  37. package/fireproof/attachable.test.js +438 -0
  38. package/fireproof/attachable.test.js.map +1 -0
  39. package/fireproof/attachable.test.ts +677 -0
  40. package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.car +0 -0
  41. package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.d.ts +4 -0
  42. package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.js +325 -0
  43. package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.js.map +1 -0
  44. package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +324 -0
  45. package/fireproof/charwise-boolean.test.d.ts +1 -0
  46. package/fireproof/charwise-boolean.test.js +43 -0
  47. package/fireproof/charwise-boolean.test.js.map +1 -0
  48. package/fireproof/charwise-boolean.test.ts +68 -0
  49. package/fireproof/crdt.test.d.ts +1 -0
  50. package/fireproof/crdt.test.js +509 -0
  51. package/fireproof/crdt.test.js.map +1 -0
  52. package/fireproof/crdt.test.ts +572 -0
  53. package/fireproof/database.test.d.ts +1 -0
  54. package/fireproof/database.test.js +658 -0
  55. package/fireproof/database.test.js.map +1 -0
  56. package/fireproof/database.test.ts +772 -0
  57. package/fireproof/deleted-docs-handling.test.d.ts +1 -0
  58. package/fireproof/deleted-docs-handling.test.js +69 -0
  59. package/fireproof/deleted-docs-handling.test.js.map +1 -0
  60. package/fireproof/deleted-docs-handling.test.ts +112 -0
  61. package/fireproof/fireproof.test.d.ts +3 -0
  62. package/fireproof/fireproof.test.fixture.d.ts +15 -0
  63. package/fireproof/fireproof.test.fixture.js +134 -0
  64. package/fireproof/fireproof.test.fixture.js.map +1 -0
  65. package/fireproof/fireproof.test.fixture.ts +133 -0
  66. package/fireproof/fireproof.test.js +574 -0
  67. package/fireproof/fireproof.test.js.map +1 -0
  68. package/fireproof/fireproof.test.ts +767 -0
  69. package/fireproof/hello.test.d.ts +1 -0
  70. package/fireproof/hello.test.js +67 -0
  71. package/fireproof/hello.test.js.map +1 -0
  72. package/fireproof/hello.test.ts +75 -0
  73. package/fireproof/indexer.test.d.ts +1 -0
  74. package/fireproof/indexer.test.js +408 -0
  75. package/fireproof/indexer.test.js.map +1 -0
  76. package/fireproof/indexer.test.ts +459 -0
  77. package/fireproof/multiple-ledger.test.d.ts +1 -0
  78. package/fireproof/multiple-ledger.test.js +51 -0
  79. package/fireproof/multiple-ledger.test.js.map +1 -0
  80. package/fireproof/multiple-ledger.test.ts +67 -0
  81. package/fireproof/query-docs.test.d.ts +1 -0
  82. package/fireproof/query-docs.test.js +69 -0
  83. package/fireproof/query-docs.test.js.map +1 -0
  84. package/fireproof/query-docs.test.ts +117 -0
  85. package/fireproof/query-limit-issue.test.d.ts +1 -0
  86. package/fireproof/query-limit-issue.test.js +89 -0
  87. package/fireproof/query-limit-issue.test.js.map +1 -0
  88. package/fireproof/query-limit-issue.test.ts +147 -0
  89. package/fireproof/query-property-inconsistency.test.d.ts +1 -0
  90. package/fireproof/query-property-inconsistency.test.js +52 -0
  91. package/fireproof/query-property-inconsistency.test.js.map +1 -0
  92. package/fireproof/query-property-inconsistency.test.ts +90 -0
  93. package/fireproof/query-result-properties.test.d.ts +1 -0
  94. package/fireproof/query-result-properties.test.js +25 -0
  95. package/fireproof/query-result-properties.test.js.map +1 -0
  96. package/fireproof/query-result-properties.test.ts +43 -0
  97. package/fireproof/stable-cid.test.d.ts +1 -0
  98. package/fireproof/stable-cid.test.js +52 -0
  99. package/fireproof/stable-cid.test.js.map +1 -0
  100. package/fireproof/stable-cid.test.ts +72 -0
  101. package/fireproof/utils.test.d.ts +1 -0
  102. package/fireproof/utils.test.js +124 -0
  103. package/fireproof/utils.test.js.map +1 -0
  104. package/fireproof/utils.test.ts +137 -0
  105. package/gateway/file/loader-config.test.d.ts +1 -0
  106. package/gateway/file/loader-config.test.js +255 -0
  107. package/gateway/file/loader-config.test.js.map +1 -0
  108. package/gateway/file/loader-config.test.ts +309 -0
  109. package/gateway/indexeddb/loader-config.test.d.ts +1 -0
  110. package/gateway/indexeddb/loader-config.test.js +77 -0
  111. package/gateway/indexeddb/loader-config.test.js.map +1 -0
  112. package/gateway/indexeddb/loader-config.test.ts +80 -0
  113. package/global-setup.d.ts +2 -0
  114. package/global-setup.js +9 -0
  115. package/global-setup.js.map +1 -0
  116. package/global-setup.ts +11 -0
  117. package/helpers.d.ts +31 -0
  118. package/helpers.js +140 -0
  119. package/helpers.js.map +1 -0
  120. package/helpers.ts +177 -0
  121. package/package.json +75 -0
  122. package/protocols/cloud/msger.test.d.ts +1 -0
  123. package/protocols/cloud/msger.test.js +464 -0
  124. package/protocols/cloud/msger.test.js.map +1 -0
  125. package/protocols/cloud/msger.test.ts +559 -0
  126. package/runtime/fp-envelope-serialize.test.d.ts +1 -0
  127. package/runtime/fp-envelope-serialize.test.js +223 -0
  128. package/runtime/fp-envelope-serialize.test.js.map +1 -0
  129. package/runtime/fp-envelope-serialize.test.ts +266 -0
  130. package/runtime/meta-key-hack.test.d.ts +1 -0
  131. package/runtime/meta-key-hack.test.js +85 -0
  132. package/runtime/meta-key-hack.test.js.map +1 -0
  133. package/runtime/meta-key-hack.test.ts +103 -0
  134. package/setup.file.d.ts +1 -0
  135. package/setup.file.js +3 -0
  136. package/setup.file.js.map +1 -0
  137. package/setup.file.ts +1 -0
  138. package/setup.indexeddb.d.ts +1 -0
  139. package/setup.indexeddb.js +2 -0
  140. package/setup.indexeddb.js.map +1 -0
  141. package/setup.indexeddb.ts +0 -0
  142. package/setup.memory.d.ts +1 -0
  143. package/setup.memory.js +4 -0
  144. package/setup.memory.js.map +1 -0
  145. package/setup.memory.ts +2 -0
  146. package/tsconfig.json +18 -0
  147. package/vitest.config.d.ts +2 -0
  148. package/vitest.config.js +8 -0
  149. package/vitest.config.js.map +1 -0
  150. package/vitest.config.ts +8 -0
  151. package/vitest.file.config.d.ts +2 -0
  152. package/vitest.file.config.js +11 -0
  153. package/vitest.file.config.js.map +1 -0
  154. package/vitest.file.config.ts +11 -0
  155. package/vitest.indexeddb.config.d.ts +2 -0
  156. package/vitest.indexeddb.config.js +21 -0
  157. package/vitest.indexeddb.config.js.map +1 -0
  158. package/vitest.indexeddb.config.ts +34 -0
  159. package/vitest.memory.config.d.ts +2 -0
  160. package/vitest.memory.config.js +24 -0
  161. package/vitest.memory.config.js.map +1 -0
  162. package/vitest.memory.config.ts +24 -0
@@ -0,0 +1,259 @@
1
+ import { BuildURI, Result, URI } from "@adviser/cement";
2
+ import { fireproof, SuperThis } from "@fireproof/core";
3
+ import * as bs from "@fireproof/core-types-blockstore";
4
+ import { describe, expect, it, vitest } from "vitest";
5
+ import { PassThroughGateway, URIInterceptor } from "@fireproof/core-gateways-base";
6
+ import { MemoryGateway } from "@fireproof/core-gateways-memory";
7
+ import { registerStoreProtocol } from "@fireproof/core-blockstore";
8
+
9
+ class TestInterceptor extends PassThroughGateway {
10
+ readonly fn = vitest.fn();
11
+
12
+ async buildUrl(ctx: bs.SerdeGatewayCtx, baseUrl: URI, key: string): Promise<Result<bs.SerdeGatewayBuildUrlReturn>> {
13
+ const ret = await super.buildUrl(ctx, baseUrl, key);
14
+ this.fn("buildUrl", ret);
15
+ return ret;
16
+ }
17
+
18
+ async start(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayStartReturn>> {
19
+ const ret = await super.start(ctx, baseUrl);
20
+ this.fn("start", ret);
21
+ return ret;
22
+ }
23
+ async close(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayCloseReturn>> {
24
+ const ret = await super.close(ctx, baseUrl);
25
+ this.fn("close", ret);
26
+ return ret;
27
+ }
28
+ async delete(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayDeleteReturn>> {
29
+ const ret = await super.delete(ctx, baseUrl);
30
+ this.fn("delete", ret);
31
+ return ret;
32
+ }
33
+ async destroy(ctx: bs.SerdeGatewayCtx, baseUrl: URI): Promise<Result<bs.SerdeGatewayDestroyReturn>> {
34
+ const ret = await super.destroy(ctx, baseUrl);
35
+ this.fn("destroy", ret);
36
+ return ret;
37
+ }
38
+ async put<T>(ctx: bs.SerdeGatewayCtx, url: URI, body: bs.FPEnvelope<T>): Promise<Result<bs.SerdeGatewayPutReturn<T>>> {
39
+ const ret = await super.put<T>(ctx, url, body);
40
+ this.fn("put", ret);
41
+ return ret;
42
+ }
43
+ async get<S>(ctx: bs.SerdeGatewayCtx, url: URI): Promise<Result<bs.SerdeGatewayGetReturn<S>>> {
44
+ const ret = await super.get<S>(ctx, url);
45
+ this.fn("get", ret);
46
+ return ret;
47
+ }
48
+ async subscribe(
49
+ ctx: bs.SerdeGatewayCtx,
50
+ url: URI,
51
+ callback: (meta: bs.FPEnvelopeMeta) => Promise<void>,
52
+ ): Promise<Result<bs.SerdeGatewaySubscribeReturn>> {
53
+ const ret = await super.subscribe(ctx, url, callback);
54
+ this.fn("subscribe", ret);
55
+ return ret;
56
+ }
57
+ }
58
+
59
+ export class URITrackGateway implements bs.Gateway {
60
+ readonly uris: Set<string>;
61
+ readonly memgw: MemoryGateway;
62
+
63
+ constructor(sthis: SuperThis, memorys: Map<string, Uint8Array>, uris: Set<string>) {
64
+ this.memgw = new MemoryGateway(sthis, memorys);
65
+ this.uris = uris;
66
+ }
67
+
68
+ uriAdd(uri: URI) {
69
+ if (!uri.getParam("itis")) {
70
+ throw new Error("itis not set");
71
+ }
72
+ if (this.uris.has(uri.toString())) {
73
+ throw new Error(`uri already added:${uri.toString()}`);
74
+ }
75
+ this.uris.add(uri.toString());
76
+ }
77
+
78
+ buildUrl(baseUrl: URI, key: string): Promise<Result<URI>> {
79
+ this.uriAdd(baseUrl);
80
+ return this.memgw.buildUrl(baseUrl, key);
81
+ }
82
+ start(baseUrl: URI): Promise<Result<URI>> {
83
+ this.uriAdd(baseUrl);
84
+ return this.memgw.start(baseUrl);
85
+ }
86
+ close(uri: URI): Promise<bs.VoidResult> {
87
+ this.uriAdd(uri);
88
+ return this.memgw.close(uri);
89
+ }
90
+ destroy(baseUrl: URI): Promise<bs.VoidResult> {
91
+ this.uriAdd(baseUrl);
92
+ return this.memgw.destroy(baseUrl);
93
+ }
94
+
95
+ put(url: URI, bytes: Uint8Array, sthis: SuperThis): Promise<bs.VoidResult> {
96
+ // console.log("put", url.getParam(PARAM.KEY), url.toString());
97
+ this.uriAdd(url);
98
+ return this.memgw.put(url.build().cleanParams("itis").URI(), bytes, sthis);
99
+ }
100
+
101
+ async get(url: URI, sthis: SuperThis): Promise<bs.GetResult> {
102
+ this.uriAdd(url);
103
+ const ret = await this.memgw.get(url.build().cleanParams("itis").URI(), sthis);
104
+ // if (ret.isErr()) {
105
+ // console.log("get-err", url.getParam(PARAM.KEY), url.toString());
106
+ // }
107
+ return ret;
108
+ }
109
+ delete(url: URI): Promise<bs.VoidResult> {
110
+ this.uriAdd(url);
111
+ return this.memgw.delete(url);
112
+ }
113
+
114
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
115
+ subscribe(url: URI, callback: (meta: Uint8Array) => void, sthis: SuperThis): Promise<bs.UnsubscribeResult> {
116
+ this.uriAdd(url);
117
+ return Promise.resolve(
118
+ Result.Ok(() => {
119
+ /* noop */
120
+ }),
121
+ );
122
+ }
123
+
124
+ async getPlain(url: URI, key: string): Promise<Result<Uint8Array>> {
125
+ this.uriAdd(url);
126
+ return this.memgw.getPlain(url, key);
127
+ }
128
+ }
129
+
130
+ describe("InterceptorGateway", () => {
131
+ it("passthrough", async () => {
132
+ const gwi = new TestInterceptor();
133
+ const db = fireproof("interceptor-gateway", {
134
+ gatewayInterceptor: gwi,
135
+ });
136
+ expect(
137
+ await db.put({
138
+ _id: "foo",
139
+ foo: 4,
140
+ }),
141
+ );
142
+ expect(await db.get("foo")).toEqual({
143
+ _id: "foo",
144
+ foo: 4,
145
+ });
146
+ await db.close();
147
+ await db.destroy();
148
+ // await sleep(1000);
149
+ expect(gwi.fn.mock.calls.length).toBe(54);
150
+ // might be a stupid test
151
+ expect(gwi.fn.mock.calls.map((i) => i[0]).sort() /* not ok there are some operation */).toEqual(
152
+ [
153
+ "start",
154
+ "start",
155
+ "buildUrl",
156
+ "get",
157
+ "buildUrl",
158
+ "buildUrl",
159
+ "buildUrl",
160
+ "buildUrl",
161
+ "buildUrl",
162
+ "buildUrl",
163
+ "buildUrl",
164
+ "buildUrl",
165
+ "get",
166
+ "get",
167
+ "start",
168
+ "start",
169
+ "buildUrl",
170
+ "get",
171
+ "get",
172
+ "buildUrl",
173
+ "put",
174
+ "put",
175
+ "buildUrl",
176
+ "put",
177
+ "buildUrl",
178
+ "put",
179
+ "put",
180
+ "put",
181
+ "put",
182
+ "put",
183
+ "start",
184
+ "start",
185
+ "start",
186
+ "start",
187
+ "close",
188
+ "close",
189
+ "close",
190
+ "close",
191
+ "buildUrl",
192
+ "get",
193
+ "close",
194
+ "close",
195
+ "close",
196
+ "close",
197
+ "destroy",
198
+ "destroy",
199
+ "destroy",
200
+ "destroy",
201
+ "destroy",
202
+ "destroy",
203
+ "destroy",
204
+ "destroy",
205
+ "subscribe",
206
+ "subscribe",
207
+ ].sort() /* not ok there are some operation */,
208
+ );
209
+ });
210
+
211
+ it("use the uri-interceptor", async () => {
212
+ let callCount = 0;
213
+ const gwUris = new Set<string>();
214
+ const unreg = registerStoreProtocol({
215
+ protocol: "uriTest:",
216
+ isDefault: false,
217
+ defaultURI: () => {
218
+ return BuildURI.from("uriTest://").pathname("ram").URI();
219
+ },
220
+ gateway: async (sthis) => {
221
+ return new URITrackGateway(sthis, new Map<string, Uint8Array>(), gwUris);
222
+ },
223
+ });
224
+ const db = fireproof("interceptor-gateway", {
225
+ storeUrls: {
226
+ base: "uriTest://inspector-gateway",
227
+ },
228
+ gatewayInterceptor: URIInterceptor.withMapper(async (uri: URI) =>
229
+ uri
230
+ .build()
231
+ .setParam("itis", "" + ++callCount)
232
+ .URI(),
233
+ ),
234
+ });
235
+ await Promise.all(
236
+ Array(5)
237
+ .fill(0)
238
+ .map((_, i) => db.put({ _id: "foo" + i, foo: i })),
239
+ );
240
+ expect((await db.allDocs<{ foo: number }>()).rows.map((i) => i.value.foo)).toEqual(
241
+ Array(5)
242
+ .fill(0)
243
+ .map((_, i) => i),
244
+ );
245
+ await db.close();
246
+ expect(callCount).toBe(gwUris.size);
247
+ expect(
248
+ Array.from(gwUris)
249
+ .map((i) => URI.from(i).getParam("itis"))
250
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
251
+ .sort((a, b) => +a! - +b!),
252
+ ).toEqual(
253
+ Array(gwUris.size)
254
+ .fill(1)
255
+ .map((_, i) => "" + (i + 1)),
256
+ );
257
+ unreg();
258
+ });
259
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,114 @@
1
+ import { runtimeFn, toCryptoRuntime, URI } from "@adviser/cement";
2
+ import { base58btc } from "multiformats/bases/base58";
3
+ import { mockLoader, mockSuperThis } from "../helpers.js";
4
+ import { ensureSuperThis } from "@fireproof/core-runtime";
5
+ import { PARAM } from "@fireproof/core-types-base";
6
+ import { describe, beforeAll, it, expect, beforeEach } from "vitest";
7
+ import { getKeyBag, toKeyWithFingerPrint } from "@fireproof/core-keybag";
8
+ import { createAttachedStores } from "@fireproof/core-blockstore";
9
+ describe("KeyBag indexeddb and file", () => {
10
+ let url;
11
+ const sthis = mockSuperThis();
12
+ beforeAll(async () => {
13
+ await sthis.start();
14
+ if (runtimeFn().isBrowser) {
15
+ url = URI.from("indexeddb://fp-keybag");
16
+ }
17
+ else {
18
+ url = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
19
+ }
20
+ });
21
+ it("default-path", async () => {
22
+ const old = sthis.env.get("FP_KEYBAG_URL");
23
+ sthis.env.delete("FP_KEYBAG_URL");
24
+ const kb = await getKeyBag(sthis);
25
+ if (runtimeFn().isBrowser) {
26
+ expect(kb.rt.url.toString()).toBe(`indexeddb://fp-keybag`);
27
+ }
28
+ else {
29
+ expect(kb.rt.url.toString()).toBe(`file://${sthis.env.get("HOME")}/.fireproof/keybag`);
30
+ }
31
+ sthis.env.set("FP_KEYBAG_URL", old);
32
+ });
33
+ it("from env", async () => {
34
+ const old = sthis.env.get("FP_KEYBAG_URL");
35
+ sthis.env.set("FP_KEYBAG_URL", url.toString());
36
+ const kb = await getKeyBag(sthis);
37
+ expect(kb.rt.url.toString()).toBe(url.toString());
38
+ sthis.env.set("FP_KEYBAG_URL", old);
39
+ });
40
+ it("simple add", async () => {
41
+ const kb = await getKeyBag(sthis, {
42
+ url: url.toString(),
43
+ crypto: toCryptoRuntime({
44
+ randomBytes: (size) => new Uint8Array(size).map((_, i) => i),
45
+ }),
46
+ });
47
+ const name = "setkey" + Math.random();
48
+ expect((await kb.getNamedKey(name, true)).isErr()).toBeTruthy();
49
+ const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
50
+ const res = await kb.getNamedKey(name, false, key);
51
+ expect(res.isOk()).toBeTruthy();
52
+ expect((await kb.getNamedKey(name, true)).Ok()).toEqual(res.Ok());
53
+ const name2 = "implicit" + Math.random();
54
+ const created = await kb.getNamedKey(name2);
55
+ expect(created.isOk()).toBeTruthy();
56
+ expect((await kb.getNamedKey(name2)).Ok()).toEqual(created.Ok());
57
+ let diskBag;
58
+ let diskBag2;
59
+ const provider = await kb.rt.getBagProvider();
60
+ if (runtimeFn().isBrowser) {
61
+ const p = provider;
62
+ diskBag = await p._prepare().then((db) => db.get("bag", name));
63
+ diskBag2 = await p._prepare().then((db) => db.get("bag", name2));
64
+ }
65
+ else {
66
+ const p = provider;
67
+ const { sysFS } = await p._prepare(name);
68
+ diskBag = await sysFS.readfile((await p._prepare(name)).fName).then((data) => {
69
+ return JSON.parse(sthis.txt.decode(data));
70
+ });
71
+ diskBag2 = await sysFS.readfile((await p._prepare(name2)).fName).then((data) => {
72
+ return JSON.parse(sthis.txt.decode(data));
73
+ });
74
+ }
75
+ expect((await toKeyWithFingerPrint(kb, Object.values(diskBag.keys)[0].key)).Ok().fingerPrint).toEqual((await res.Ok().get())?.fingerPrint);
76
+ expect((await toKeyWithFingerPrint(kb, Object.values(diskBag2.keys)[0].key)).Ok().fingerPrint).toEqual((await created.Ok().get())?.fingerPrint);
77
+ const algo = {
78
+ name: "AES-GCM",
79
+ iv: kb.rt.crypto.randomBytes(12),
80
+ tagLength: 128,
81
+ };
82
+ const data = kb.rt.crypto.randomBytes(122);
83
+ const rkc = (await res.Ok().get());
84
+ const ckc = (await created.Ok().get());
85
+ expect(await kb.rt.crypto.encrypt(algo, rkc.key, data)).toEqual(await kb.rt.crypto.encrypt(algo, ckc.key, data));
86
+ expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag.keys)[0].key), data)).toEqual(await kb.rt.crypto.encrypt(algo, ckc.key, data));
87
+ expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag2.keys)[0].key), data)).toEqual(await kb.rt.crypto.encrypt(algo, ckc.key, data));
88
+ });
89
+ });
90
+ describe("KeyedCryptoStore", () => {
91
+ let loader;
92
+ let baseUrl;
93
+ const sthis = ensureSuperThis();
94
+ beforeEach(async () => {
95
+ await sthis.start();
96
+ if (runtimeFn().isBrowser) {
97
+ baseUrl = URI.from("indexeddb://fp-keyed-crypto-store");
98
+ }
99
+ else {
100
+ baseUrl = URI.merge("file://./dist/tests/keyed-crypto-store", sthis.env.get("FP_STORAGE_URL"));
101
+ }
102
+ baseUrl = baseUrl.build().defParam(PARAM.NAME, "test").URI();
103
+ loader = mockLoader(sthis);
104
+ });
105
+ it("no crypto", async () => {
106
+ const url = baseUrl.build().setParam(PARAM.STORE_KEY, "insecure").URI();
107
+ for (const pstore of (await createAttachedStores(url, loader, "insecure")).stores.baseStores) {
108
+ const store = await pstore;
109
+ const kc = await store.keyedCrypto();
110
+ expect(kc.constructor.name).toBe("noCrypto");
111
+ }
112
+ });
113
+ });
114
+ //# sourceMappingURL=keyed-crypto-indexeddb-file.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-crypto-indexeddb-file.test.js","sourceRoot":"","sources":["keyed-crypto-indexeddb-file.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { runtimeFn, toCryptoRuntime, URI } from "@adviser/cement";
2
+ import { base58btc } from "multiformats/bases/base58";
3
+ import { mockLoader, mockSuperThis } from "../helpers.js";
4
+ import { ensureSuperThis } from "@fireproof/core-runtime";
5
+ import { KeysItem, PARAM } from "@fireproof/core-types-base";
6
+ import { describe, beforeAll, it, expect, beforeEach } from "vitest";
7
+ import { getKeyBag, toKeyWithFingerPrint } from "@fireproof/core-keybag";
8
+ import { KeyBagProviderIndexedDB } from "@fireproof/core-gateways-indexeddb";
9
+ import { KeyBagProviderFile } from "@fireproof/core-gateways-file";
10
+ import { KeyWithFingerPrint, Loadable } from "@fireproof/core-types-blockstore";
11
+ import { createAttachedStores } from "@fireproof/core-blockstore";
12
+
13
+ describe("KeyBag indexeddb and file", () => {
14
+ let url: URI;
15
+ const sthis = mockSuperThis();
16
+ beforeAll(async () => {
17
+ await sthis.start();
18
+ if (runtimeFn().isBrowser) {
19
+ url = URI.from("indexeddb://fp-keybag");
20
+ } else {
21
+ url = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
22
+ }
23
+ });
24
+ it("default-path", async () => {
25
+ const old = sthis.env.get("FP_KEYBAG_URL");
26
+ sthis.env.delete("FP_KEYBAG_URL");
27
+ const kb = await getKeyBag(sthis);
28
+ if (runtimeFn().isBrowser) {
29
+ expect(kb.rt.url.toString()).toBe(`indexeddb://fp-keybag`);
30
+ } else {
31
+ expect(kb.rt.url.toString()).toBe(`file://${sthis.env.get("HOME")}/.fireproof/keybag`);
32
+ }
33
+ sthis.env.set("FP_KEYBAG_URL", old);
34
+ });
35
+ it("from env", async () => {
36
+ const old = sthis.env.get("FP_KEYBAG_URL");
37
+ sthis.env.set("FP_KEYBAG_URL", url.toString());
38
+ const kb = await getKeyBag(sthis);
39
+ expect(kb.rt.url.toString()).toBe(url.toString());
40
+ sthis.env.set("FP_KEYBAG_URL", old);
41
+ });
42
+ it("simple add", async () => {
43
+ const kb = await getKeyBag(sthis, {
44
+ url: url.toString(),
45
+ crypto: toCryptoRuntime({
46
+ randomBytes: (size) => new Uint8Array(size).map((_, i) => i),
47
+ }),
48
+ });
49
+ const name = "setkey" + Math.random();
50
+ expect((await kb.getNamedKey(name, true)).isErr()).toBeTruthy();
51
+
52
+ const key = base58btc.encode(kb.rt.crypto.randomBytes(kb.rt.keyLength));
53
+ const res = await kb.getNamedKey(name, false, key);
54
+ expect(res.isOk()).toBeTruthy();
55
+ expect((await kb.getNamedKey(name, true)).Ok()).toEqual(res.Ok());
56
+
57
+ const name2 = "implicit" + Math.random();
58
+ const created = await kb.getNamedKey(name2);
59
+ expect(created.isOk()).toBeTruthy();
60
+
61
+ expect((await kb.getNamedKey(name2)).Ok()).toEqual(created.Ok());
62
+
63
+ let diskBag: KeysItem;
64
+ let diskBag2: KeysItem;
65
+ const provider = await kb.rt.getBagProvider();
66
+ if (runtimeFn().isBrowser) {
67
+ const p = provider as KeyBagProviderIndexedDB;
68
+ diskBag = await p._prepare().then((db) => db.get("bag", name));
69
+ diskBag2 = await p._prepare().then((db) => db.get("bag", name2));
70
+ } else {
71
+ const p = provider as KeyBagProviderFile;
72
+ const { sysFS } = await p._prepare(name);
73
+
74
+ diskBag = await sysFS.readfile((await p._prepare(name)).fName).then((data) => {
75
+ return JSON.parse(sthis.txt.decode(data)) as KeysItem;
76
+ });
77
+ diskBag2 = await sysFS.readfile((await p._prepare(name2)).fName).then((data) => {
78
+ return JSON.parse(sthis.txt.decode(data)) as KeysItem;
79
+ });
80
+ }
81
+ expect((await toKeyWithFingerPrint(kb, Object.values(diskBag.keys)[0].key)).Ok().fingerPrint).toEqual(
82
+ (await res.Ok().get())?.fingerPrint,
83
+ );
84
+ expect((await toKeyWithFingerPrint(kb, Object.values(diskBag2.keys)[0].key)).Ok().fingerPrint).toEqual(
85
+ (await created.Ok().get())?.fingerPrint,
86
+ );
87
+ const algo = {
88
+ name: "AES-GCM",
89
+ iv: kb.rt.crypto.randomBytes(12),
90
+ tagLength: 128,
91
+ };
92
+ const data = kb.rt.crypto.randomBytes(122);
93
+ const rkc = (await res.Ok().get()) as KeyWithFingerPrint;
94
+ const ckc = (await created.Ok().get()) as KeyWithFingerPrint;
95
+ expect(await kb.rt.crypto.encrypt(algo, rkc.key, data)).toEqual(await kb.rt.crypto.encrypt(algo, ckc.key, data));
96
+ expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag.keys)[0].key), data)).toEqual(
97
+ await kb.rt.crypto.encrypt(algo, ckc.key, data),
98
+ );
99
+ expect(await kb.rt.crypto.encrypt(algo, await kb.subtleKey(Object.values(diskBag2.keys)[0].key), data)).toEqual(
100
+ await kb.rt.crypto.encrypt(algo, ckc.key, data),
101
+ );
102
+ });
103
+ });
104
+
105
+ describe("KeyedCryptoStore", () => {
106
+ let loader: Loadable;
107
+ // let logger: Logger;
108
+ let baseUrl: URI;
109
+ const sthis = ensureSuperThis();
110
+ beforeEach(async () => {
111
+ await sthis.start();
112
+ // logger = MockLogger().logger;
113
+ // let kbUrl: URI;
114
+ if (runtimeFn().isBrowser) {
115
+ // kbUrl = URI.from("indexeddb://fp-keybag");
116
+ baseUrl = URI.from("indexeddb://fp-keyed-crypto-store");
117
+ } else {
118
+ // kbUrl = URI.merge(`file://./dist/tests/key.bag`, sthis.env.get("FP_KEYBAG_URL"));
119
+ baseUrl = URI.merge("file://./dist/tests/keyed-crypto-store", sthis.env.get("FP_STORAGE_URL"));
120
+ }
121
+ baseUrl = baseUrl.build().defParam(PARAM.NAME, "test").URI();
122
+ loader = mockLoader(sthis);
123
+ });
124
+ it("no crypto", async () => {
125
+ const url = baseUrl.build().setParam(PARAM.STORE_KEY, "insecure").URI();
126
+ for (const pstore of (await createAttachedStores(url, loader, "insecure")).stores.baseStores) {
127
+ const store = await pstore;
128
+ // await store.start();
129
+ const kc = await store.keyedCrypto();
130
+ expect(kc.constructor.name).toBe("noCrypto");
131
+ // expect(kc.isEncrypting).toBe(false);
132
+ }
133
+ });
134
+ });
@@ -0,0 +1 @@
1
+ export {};