@fireproof/core 0.20.0-dev-preview-52 → 0.20.0-dev-preview-54
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/deno.json +1 -3
- package/index.cjs +225 -255
- package/index.cjs.map +1 -1
- package/index.d.cts +17 -17
- package/index.d.ts +17 -17
- package/index.js +169 -199
- package/index.js.map +1 -1
- package/metafile-cjs.json +1 -1
- package/metafile-esm.json +1 -1
- package/package.json +3 -5
- package/react/index.d.cts +1 -1
- package/react/index.d.ts +1 -1
- package/tests/fireproof/database.test.ts +39 -0
package/index.cjs
CHANGED
@@ -74,7 +74,7 @@ __export(index_exports, {
|
|
74
74
|
module.exports = __toCommonJS(index_exports);
|
75
75
|
|
76
76
|
// src/ledger.ts
|
77
|
-
var
|
77
|
+
var import_cement21 = require("@adviser/cement");
|
78
78
|
|
79
79
|
// src/utils.ts
|
80
80
|
var import_cement = require("@adviser/cement");
|
@@ -569,70 +569,34 @@ __export(files_exports, {
|
|
569
569
|
decodeFile: () => decodeFile,
|
570
570
|
encodeFile: () => encodeFile
|
571
571
|
});
|
572
|
-
var UnixFS = __toESM(require("@ipld/unixfs"), 1);
|
573
572
|
var raw = __toESM(require("multiformats/codecs/raw"), 1);
|
574
|
-
var
|
575
|
-
var
|
576
|
-
var
|
577
|
-
var queuingStrategy = UnixFS.withCapacity();
|
578
|
-
var settings = UnixFS.configure({
|
579
|
-
fileChunkEncoder: raw,
|
580
|
-
smallFileEncoder: raw,
|
581
|
-
chunker: (0, import_fixed.withMaxChunkSize)(1024 * 1024),
|
582
|
-
fileLayout: (0, import_balanced.withWidth)(1024)
|
583
|
-
});
|
584
|
-
async function collect(collectable) {
|
585
|
-
const chunks = [];
|
586
|
-
await collectable.pipeTo(
|
587
|
-
new WritableStream({
|
588
|
-
write(chunk) {
|
589
|
-
chunks.push(chunk);
|
590
|
-
}
|
591
|
-
})
|
592
|
-
);
|
593
|
-
return chunks;
|
594
|
-
}
|
573
|
+
var import_cid = require("multiformats/cid");
|
574
|
+
var import_sha2 = require("multiformats/hashes/sha2");
|
575
|
+
var import_cement3 = require("@adviser/cement");
|
595
576
|
async function encodeFile(blob) {
|
596
|
-
const
|
597
|
-
const
|
598
|
-
|
577
|
+
const data = await (0, import_cement3.top_uint8)(blob);
|
578
|
+
const bytes = raw.encode(data);
|
579
|
+
const hash = await import_sha2.sha256.digest(bytes);
|
580
|
+
const cid = import_cid.CID.create(1, raw.code, hash);
|
581
|
+
const block = { cid, bytes };
|
582
|
+
return { cid, blocks: [block] };
|
599
583
|
}
|
600
|
-
|
601
|
-
|
602
|
-
const chunks = [];
|
603
|
-
for await (const chunk of entry.content()) {
|
604
|
-
chunks.push(chunk);
|
605
|
-
}
|
606
|
-
return new File(chunks, entry.name, { type: meta.type, lastModified: 0 });
|
584
|
+
function isHasBlockAGet(obj) {
|
585
|
+
return typeof obj.get === "function";
|
607
586
|
}
|
608
|
-
function
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
await
|
614
|
-
|
615
|
-
|
616
|
-
|
587
|
+
async function decodeFile(blocks, cid, meta) {
|
588
|
+
if (!isHasBlockAGet(blocks)) {
|
589
|
+
return import_cement3.Result.Err(new Error("Invalid block storage"));
|
590
|
+
}
|
591
|
+
return (0, import_cement3.exception2Result)(async () => {
|
592
|
+
const bytes = await blocks.get(cid);
|
593
|
+
const data = raw.decode(bytes);
|
594
|
+
return new File([data], "file", {
|
595
|
+
type: meta.type,
|
596
|
+
lastModified: meta.lastModified || 0
|
597
|
+
});
|
598
|
+
});
|
617
599
|
}
|
618
|
-
var UnixFSFileBuilder = class {
|
619
|
-
#file;
|
620
|
-
constructor(name, file) {
|
621
|
-
this.name = name;
|
622
|
-
this.#file = file;
|
623
|
-
}
|
624
|
-
async finalize(writer) {
|
625
|
-
const unixfsFileWriter = UnixFS.createFileWriter(writer);
|
626
|
-
await this.#file.stream().pipeTo(
|
627
|
-
new WritableStream({
|
628
|
-
async write(chunk) {
|
629
|
-
await unixfsFileWriter.write(chunk);
|
630
|
-
}
|
631
|
-
})
|
632
|
-
);
|
633
|
-
return await unixfsFileWriter.close();
|
634
|
-
}
|
635
|
-
};
|
636
600
|
|
637
601
|
// src/runtime/key-bag.ts
|
638
602
|
var key_bag_exports = {};
|
@@ -645,13 +609,13 @@ __export(key_bag_exports, {
|
|
645
609
|
registerKeyBagProviderFactory: () => registerKeyBagProviderFactory,
|
646
610
|
toKeyWithFingerPrint: () => toKeyWithFingerPrint
|
647
611
|
});
|
648
|
-
var
|
612
|
+
var import_cement5 = require("@adviser/cement");
|
649
613
|
var import_base582 = require("multiformats/bases/base58");
|
650
614
|
|
651
615
|
// src/runtime/gateways/file/sys-file-system-factory.ts
|
652
|
-
var
|
616
|
+
var import_cement4 = require("@adviser/cement");
|
653
617
|
function sysFileSystemFactory(uri) {
|
654
|
-
const rt = (0,
|
618
|
+
const rt = (0, import_cement4.runtimeFn)();
|
655
619
|
switch (true) {
|
656
620
|
case rt.isNodeIsh:
|
657
621
|
return import("@fireproof/core/node").then((m) => m.getSysFileSystem(uri));
|
@@ -771,7 +735,7 @@ async function toKeyWithFingerPrint(keybag, materialStrOrUint8) {
|
|
771
735
|
}
|
772
736
|
const key = await keybag.subtleKey(material);
|
773
737
|
const fpr = await keybag.rt.crypto.digestSHA256(material);
|
774
|
-
return
|
738
|
+
return import_cement5.Result.Ok({
|
775
739
|
key,
|
776
740
|
fingerPrint: import_base582.base58btc.encode(new Uint8Array(fpr)),
|
777
741
|
extract: async () => {
|
@@ -827,13 +791,13 @@ var keysByFingerprint = class _keysByFingerprint {
|
|
827
791
|
def = !!def;
|
828
792
|
const rKfp = await toKeyWithFingerPrint(this.keybag, materialStrOrUint8);
|
829
793
|
if (rKfp.isErr()) {
|
830
|
-
return
|
794
|
+
return import_cement5.Result.Err(rKfp);
|
831
795
|
}
|
832
796
|
const kfp = rKfp.Ok();
|
833
797
|
let found = this.keys[kfp.fingerPrint];
|
834
798
|
if (found) {
|
835
799
|
if (found.default === def) {
|
836
|
-
return
|
800
|
+
return import_cement5.Result.Ok({
|
837
801
|
modified: false,
|
838
802
|
kfp: found
|
839
803
|
});
|
@@ -853,7 +817,7 @@ var keysByFingerprint = class _keysByFingerprint {
|
|
853
817
|
if (keyBagAction) {
|
854
818
|
this.keybag._upsertNamedKey(this);
|
855
819
|
}
|
856
|
-
return
|
820
|
+
return import_cement5.Result.Ok({
|
857
821
|
modified: keyBagAction && true,
|
858
822
|
kfp: found
|
859
823
|
});
|
@@ -883,8 +847,8 @@ var keysByFingerprint = class _keysByFingerprint {
|
|
883
847
|
};
|
884
848
|
var KeyBag = class {
|
885
849
|
constructor(rt) {
|
886
|
-
this._warnOnce = new
|
887
|
-
this._seq = new
|
850
|
+
this._warnOnce = new import_cement5.ResolveOnce();
|
851
|
+
this._seq = new import_cement5.ResolveSeq();
|
888
852
|
// async getNamedExtractableKey(name: string, failIfNotFound = false): Promise<Result<KeysByFingerprint>> {
|
889
853
|
// const ret = await this.getNamedKey(name, failIfNotFound);
|
890
854
|
// if (ret.isErr()) {
|
@@ -902,7 +866,7 @@ var KeyBag = class {
|
|
902
866
|
// },
|
903
867
|
// });
|
904
868
|
// }
|
905
|
-
this._namedKeyCache = new
|
869
|
+
this._namedKeyCache = new import_cement5.KeyedResolvOnce();
|
906
870
|
this.rt = rt;
|
907
871
|
this.logger = ensureLogger(rt.sthis, "KeyBag");
|
908
872
|
}
|
@@ -932,24 +896,24 @@ var KeyBag = class {
|
|
932
896
|
async ensureKeyFromUrl(url, keyFactory) {
|
933
897
|
const storeKey = url.getParam(PARAM.STORE_KEY);
|
934
898
|
if (storeKey === "insecure") {
|
935
|
-
return
|
899
|
+
return import_cement5.Result.Ok(url);
|
936
900
|
}
|
937
901
|
if (!storeKey) {
|
938
902
|
const keyName = `@${keyFactory()}@`;
|
939
903
|
const ret = await this.getNamedKey(keyName);
|
940
904
|
if (ret.isErr()) {
|
941
|
-
return
|
905
|
+
return import_cement5.Result.Err(ret);
|
942
906
|
}
|
943
907
|
const urb = url.build().setParam(PARAM.STORE_KEY, keyName);
|
944
|
-
return
|
908
|
+
return import_cement5.Result.Ok(urb.URI());
|
945
909
|
}
|
946
910
|
if (storeKey.startsWith("@") && storeKey.endsWith("@")) {
|
947
911
|
const ret = await this.getNamedKey(storeKey);
|
948
912
|
if (ret.isErr()) {
|
949
|
-
return
|
913
|
+
return import_cement5.Result.Err(ret);
|
950
914
|
}
|
951
915
|
}
|
952
|
-
return
|
916
|
+
return import_cement5.Result.Ok(url);
|
953
917
|
}
|
954
918
|
async toKeysItem(ki) {
|
955
919
|
if (!ki) return void 0;
|
@@ -1008,7 +972,7 @@ var KeyBag = class {
|
|
1008
972
|
this._namedKeyCache.unget(ksi.name);
|
1009
973
|
}
|
1010
974
|
await bag.set(await ksi.asKeysItem());
|
1011
|
-
return
|
975
|
+
return import_cement5.Result.Ok(ksi);
|
1012
976
|
});
|
1013
977
|
}
|
1014
978
|
async _getNamedKey(name, failIfNotFound, material) {
|
@@ -1018,7 +982,7 @@ var KeyBag = class {
|
|
1018
982
|
const named = await this.toKeysItem(await bag.get(name));
|
1019
983
|
if (named) {
|
1020
984
|
this.logger.Debug().Str("id", id).Str("name", name).Any("fprs", Object.keys(named.keys)).Msg("fingerPrint getNamedKey");
|
1021
|
-
return
|
985
|
+
return import_cement5.Result.Ok(await keysByFingerprint.from(this, named));
|
1022
986
|
}
|
1023
987
|
if (!named && failIfNotFound) {
|
1024
988
|
this._namedKeyCache.unget(name);
|
@@ -1039,10 +1003,10 @@ var KeyBag = class {
|
|
1039
1003
|
}
|
1040
1004
|
const res = await kp.upsert(keyMaterial, true);
|
1041
1005
|
if (res.isErr()) {
|
1042
|
-
return
|
1006
|
+
return import_cement5.Result.Err(res);
|
1043
1007
|
}
|
1044
1008
|
this.logger.Debug().Str("id", id).Str("name", name).Str("fpr", res.Ok().kfp.fingerPrint).Msg("createKey getNamedKey-post");
|
1045
|
-
return
|
1009
|
+
return import_cement5.Result.Ok(kp);
|
1046
1010
|
});
|
1047
1011
|
}
|
1048
1012
|
async getNamedKey(name, failIfNotFound = false, material) {
|
@@ -1084,15 +1048,15 @@ function registerKeyBagProviderFactory(item) {
|
|
1084
1048
|
function defaultKeyBagUrl(sthis) {
|
1085
1049
|
let bagFnameOrUrl = sthis.env.get("FP_KEYBAG_URL");
|
1086
1050
|
let url;
|
1087
|
-
if ((0,
|
1088
|
-
url =
|
1051
|
+
if ((0, import_cement5.runtimeFn)().isBrowser) {
|
1052
|
+
url = import_cement5.URI.from(bagFnameOrUrl || "indexeddb://fp-keybag");
|
1089
1053
|
} else {
|
1090
1054
|
if (!bagFnameOrUrl) {
|
1091
1055
|
const home = sthis.env.get("HOME");
|
1092
1056
|
bagFnameOrUrl = `${home}/.fireproof/keybag`;
|
1093
|
-
url =
|
1057
|
+
url = import_cement5.URI.from(`file://${bagFnameOrUrl}`);
|
1094
1058
|
} else {
|
1095
|
-
url =
|
1059
|
+
url = import_cement5.URI.from(bagFnameOrUrl);
|
1096
1060
|
}
|
1097
1061
|
}
|
1098
1062
|
const logger = ensureLogger(sthis, "defaultKeyBagUrl");
|
@@ -1107,19 +1071,19 @@ function defaultKeyBagOpts(sthis, kbo) {
|
|
1107
1071
|
const logger = ensureLogger(sthis, "KeyBag");
|
1108
1072
|
let url;
|
1109
1073
|
if (kbo.url) {
|
1110
|
-
url =
|
1074
|
+
url = import_cement5.URI.from(kbo.url);
|
1111
1075
|
logger.Debug().Url(url).Msg("from opts");
|
1112
1076
|
} else {
|
1113
1077
|
let bagFnameOrUrl = sthis.env.get("FP_KEYBAG_URL");
|
1114
|
-
if ((0,
|
1115
|
-
url =
|
1078
|
+
if ((0, import_cement5.runtimeFn)().isBrowser) {
|
1079
|
+
url = import_cement5.URI.from(bagFnameOrUrl || "indexeddb://fp-keybag");
|
1116
1080
|
} else {
|
1117
1081
|
if (!bagFnameOrUrl) {
|
1118
1082
|
const home = sthis.env.get("HOME");
|
1119
1083
|
bagFnameOrUrl = `${home}/.fireproof/keybag`;
|
1120
|
-
url =
|
1084
|
+
url = import_cement5.URI.from(`file://${bagFnameOrUrl}`);
|
1121
1085
|
} else {
|
1122
|
-
url =
|
1086
|
+
url = import_cement5.URI.from(bagFnameOrUrl);
|
1123
1087
|
}
|
1124
1088
|
}
|
1125
1089
|
logger.Debug().Url(url).Msg("from env");
|
@@ -1133,7 +1097,7 @@ function defaultKeyBagOpts(sthis, kbo) {
|
|
1133
1097
|
}
|
1134
1098
|
return {
|
1135
1099
|
url,
|
1136
|
-
crypto: kbo.crypto || (0,
|
1100
|
+
crypto: kbo.crypto || (0, import_cement5.toCryptoRuntime)({}),
|
1137
1101
|
sthis,
|
1138
1102
|
logger,
|
1139
1103
|
keyLength: kbo.keyLength || 16,
|
@@ -1143,7 +1107,7 @@ function defaultKeyBagOpts(sthis, kbo) {
|
|
1143
1107
|
}
|
1144
1108
|
};
|
1145
1109
|
}
|
1146
|
-
var _keyBags = new
|
1110
|
+
var _keyBags = new import_cement5.KeyedResolvOnce();
|
1147
1111
|
async function getKeyBag(sthis, kbo = {}) {
|
1148
1112
|
await sthis.start();
|
1149
1113
|
const rt = defaultKeyBagOpts(sthis, kbo);
|
@@ -1151,7 +1115,7 @@ async function getKeyBag(sthis, kbo = {}) {
|
|
1151
1115
|
}
|
1152
1116
|
|
1153
1117
|
// src/blockstore/register-store-protocol.ts
|
1154
|
-
var
|
1118
|
+
var import_cement11 = require("@adviser/cement");
|
1155
1119
|
|
1156
1120
|
// src/runtime/gateways/file/version.ts
|
1157
1121
|
var FILESTORE_VERSION = "v0.19-file";
|
@@ -1160,10 +1124,9 @@ var FILESTORE_VERSION = "v0.19-file";
|
|
1160
1124
|
var INDEXEDDB_VERSION = "v0.19-indexeddb";
|
1161
1125
|
|
1162
1126
|
// src/runtime/gateways/file/gateway-impl.ts
|
1163
|
-
var
|
1127
|
+
var import_cement6 = require("@adviser/cement");
|
1164
1128
|
|
1165
1129
|
// src/runtime/gateways/file/utils.ts
|
1166
|
-
var import_core = require("@fireproof/core");
|
1167
1130
|
function getPath(url, sthis) {
|
1168
1131
|
const basePath = url.pathname;
|
1169
1132
|
const name = url.getParam("name");
|
@@ -1175,7 +1138,7 @@ function getPath(url, sthis) {
|
|
1175
1138
|
function getFileName(url, sthis) {
|
1176
1139
|
const key = url.getParam("key");
|
1177
1140
|
if (!key) throw sthis.logger.Error().Url(url).Msg(`key not found`).AsError();
|
1178
|
-
const res =
|
1141
|
+
const res = getStore(url, sthis, (...a) => a.join("-"));
|
1179
1142
|
switch (res.fromUrl) {
|
1180
1143
|
case "file":
|
1181
1144
|
return sthis.pathOps.join(res.name, key);
|
@@ -1190,7 +1153,7 @@ function getFileName(url, sthis) {
|
|
1190
1153
|
}
|
1191
1154
|
|
1192
1155
|
// src/runtime/gateways/file/gateway-impl.ts
|
1193
|
-
var versionFiles = new
|
1156
|
+
var versionFiles = new import_cement6.KeyedResolvOnce();
|
1194
1157
|
var FileGateway = class {
|
1195
1158
|
constructor(sthis, fs) {
|
1196
1159
|
this.fs = fs;
|
@@ -1215,7 +1178,7 @@ var FileGateway = class {
|
|
1215
1178
|
});
|
1216
1179
|
}
|
1217
1180
|
start(baseURL, sthis) {
|
1218
|
-
return (0,
|
1181
|
+
return (0, import_cement6.exception2Result)(async () => {
|
1219
1182
|
await this.fs.start();
|
1220
1183
|
const url = baseURL.build();
|
1221
1184
|
url.defParam(PARAM.VERSION, FILESTORE_VERSION);
|
@@ -1229,10 +1192,10 @@ var FileGateway = class {
|
|
1229
1192
|
});
|
1230
1193
|
}
|
1231
1194
|
async buildUrl(baseUrl, key) {
|
1232
|
-
return
|
1195
|
+
return import_cement6.Result.Ok(baseUrl.build().setParam(PARAM.KEY, key).URI());
|
1233
1196
|
}
|
1234
1197
|
async close() {
|
1235
|
-
return
|
1198
|
+
return import_cement6.Result.Ok(void 0);
|
1236
1199
|
}
|
1237
1200
|
getFilePath(url, sthis) {
|
1238
1201
|
const key = url.getParam(PARAM.KEY);
|
@@ -1240,7 +1203,7 @@ var FileGateway = class {
|
|
1240
1203
|
return sthis.pathOps.join(getPath(url, sthis), getFileName(url, sthis));
|
1241
1204
|
}
|
1242
1205
|
async put(url, bytes, sthis) {
|
1243
|
-
return (0,
|
1206
|
+
return (0, import_cement6.exception2Result)(async () => {
|
1244
1207
|
const file = await this.getFilePath(url, sthis);
|
1245
1208
|
sthis.logger.Debug().Str("url", url.toString()).Str("file", file).Msg("put");
|
1246
1209
|
await this.fs.writefile(file, bytes);
|
@@ -1252,17 +1215,17 @@ var FileGateway = class {
|
|
1252
1215
|
try {
|
1253
1216
|
sthis.logger.Debug().Url(url).Str("file", file).Msg("get");
|
1254
1217
|
const res = await this.fs.readfile(file);
|
1255
|
-
return
|
1218
|
+
return import_cement6.Result.Ok(res);
|
1256
1219
|
} catch (e) {
|
1257
1220
|
if (isNotFoundError(e)) {
|
1258
|
-
return
|
1221
|
+
return import_cement6.Result.Err(new NotFoundError(`file not found: ${file}`));
|
1259
1222
|
}
|
1260
|
-
return
|
1223
|
+
return import_cement6.Result.Err(e);
|
1261
1224
|
}
|
1262
1225
|
});
|
1263
1226
|
}
|
1264
1227
|
async delete(url, sthis) {
|
1265
|
-
return (0,
|
1228
|
+
return (0, import_cement6.exception2Result)(async () => {
|
1266
1229
|
await this.fs.unlink(this.getFilePath(url, sthis));
|
1267
1230
|
});
|
1268
1231
|
}
|
@@ -1288,7 +1251,7 @@ var FileGateway = class {
|
|
1288
1251
|
}
|
1289
1252
|
}
|
1290
1253
|
}
|
1291
|
-
return
|
1254
|
+
return import_cement6.Result.Ok(void 0);
|
1292
1255
|
}
|
1293
1256
|
async getPlain(iurl, key, sthis) {
|
1294
1257
|
const url = iurl.build().setParam(PARAM.KEY, key).URI();
|
@@ -1296,7 +1259,7 @@ var FileGateway = class {
|
|
1296
1259
|
sthis.logger.Debug().Url(url).Str("dbFile", dbFile).Msg("get");
|
1297
1260
|
const buffer = await this.fs.readfile(dbFile);
|
1298
1261
|
sthis.logger.Debug().Url(url).Str("dbFile", dbFile).Len(buffer).Msg("got");
|
1299
|
-
return
|
1262
|
+
return import_cement6.Result.Ok(buffer);
|
1300
1263
|
}
|
1301
1264
|
};
|
1302
1265
|
|
@@ -1305,7 +1268,7 @@ var gateway_exports = {};
|
|
1305
1268
|
__export(gateway_exports, {
|
1306
1269
|
MemoryGateway: () => MemoryGateway
|
1307
1270
|
});
|
1308
|
-
var
|
1271
|
+
var import_cement7 = require("@adviser/cement");
|
1309
1272
|
|
1310
1273
|
// src/runtime/gateways/memory/version.ts
|
1311
1274
|
var MEMORY_VERSION = "v0.19-memory";
|
@@ -1318,14 +1281,14 @@ var MemoryGateway = class {
|
|
1318
1281
|
this.sthis = sthis;
|
1319
1282
|
}
|
1320
1283
|
buildUrl(baseUrl, key) {
|
1321
|
-
return Promise.resolve(
|
1284
|
+
return Promise.resolve(import_cement7.Result.Ok(baseUrl.build().setParam(PARAM.KEY, key).URI()));
|
1322
1285
|
}
|
1323
1286
|
start(baseUrl) {
|
1324
|
-
return Promise.resolve(
|
1287
|
+
return Promise.resolve(import_cement7.Result.Ok(baseUrl.build().setParam(PARAM.VERSION, MEMORY_VERSION).URI()));
|
1325
1288
|
}
|
1326
1289
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
1327
1290
|
close(baseUrl) {
|
1328
|
-
return Promise.resolve(
|
1291
|
+
return Promise.resolve(import_cement7.Result.Ok(void 0));
|
1329
1292
|
}
|
1330
1293
|
destroy(baseUrl) {
|
1331
1294
|
const keyUrl = baseUrl.toString();
|
@@ -1335,38 +1298,38 @@ var MemoryGateway = class {
|
|
1335
1298
|
}
|
1336
1299
|
}
|
1337
1300
|
this.memorys.clear();
|
1338
|
-
return Promise.resolve(
|
1301
|
+
return Promise.resolve(import_cement7.Result.Ok(void 0));
|
1339
1302
|
}
|
1340
1303
|
async put(url, bytes) {
|
1341
1304
|
this.memorys.set(url.toString(), bytes);
|
1342
|
-
return
|
1305
|
+
return import_cement7.Result.Ok(void 0);
|
1343
1306
|
}
|
1344
1307
|
// get could return a NotFoundError if the key is not found
|
1345
1308
|
get(url) {
|
1346
1309
|
const x = this.memorys.get(url.toString());
|
1347
1310
|
if (!x) {
|
1348
|
-
return Promise.resolve(
|
1311
|
+
return Promise.resolve(import_cement7.Result.Err(new NotFoundError(`not found: ${url.toString()}`)));
|
1349
1312
|
}
|
1350
|
-
return Promise.resolve(
|
1313
|
+
return Promise.resolve(import_cement7.Result.Ok(x));
|
1351
1314
|
}
|
1352
1315
|
delete(url) {
|
1353
1316
|
this.memorys.delete(url.toString());
|
1354
|
-
return Promise.resolve(
|
1317
|
+
return Promise.resolve(import_cement7.Result.Ok(void 0));
|
1355
1318
|
}
|
1356
1319
|
async getPlain(url, key) {
|
1357
1320
|
const x = this.memorys.get(url.build().setParam(PARAM.KEY, key).toString());
|
1358
1321
|
if (!x) {
|
1359
|
-
return
|
1322
|
+
return import_cement7.Result.Err(new NotFoundError("not found"));
|
1360
1323
|
}
|
1361
|
-
return
|
1324
|
+
return import_cement7.Result.Ok(x);
|
1362
1325
|
}
|
1363
1326
|
};
|
1364
1327
|
|
1365
1328
|
// src/runtime/gateways/def-serde-gateway.ts
|
1366
|
-
var
|
1329
|
+
var import_cement10 = require("@adviser/cement");
|
1367
1330
|
|
1368
1331
|
// src/blockstore/fp-envelope.ts
|
1369
|
-
var
|
1332
|
+
var import_cement8 = require("@adviser/cement");
|
1370
1333
|
var FPEnvelopeTypes = {
|
1371
1334
|
CAR: "car",
|
1372
1335
|
FILE: "file",
|
@@ -1374,14 +1337,14 @@ var FPEnvelopeTypes = {
|
|
1374
1337
|
WAL: "wal"
|
1375
1338
|
};
|
1376
1339
|
function Car2FPMsg(fpcar) {
|
1377
|
-
return
|
1340
|
+
return import_cement8.Result.Ok({ type: FPEnvelopeTypes.CAR, payload: fpcar });
|
1378
1341
|
}
|
1379
1342
|
function File2FPMsg(fpfile) {
|
1380
|
-
return
|
1343
|
+
return import_cement8.Result.Ok({ type: FPEnvelopeTypes.FILE, payload: fpfile });
|
1381
1344
|
}
|
1382
1345
|
|
1383
1346
|
// src/runtime/gateways/fp-envelope-serialize.ts
|
1384
|
-
var
|
1347
|
+
var import_cement9 = require("@adviser/cement");
|
1385
1348
|
var import_clock = require("@fireproof/vendor/@web3-storage/pail/clock");
|
1386
1349
|
var import_base64 = require("multiformats/bases/base64");
|
1387
1350
|
var import_multiformats = require("multiformats");
|
@@ -1420,10 +1383,10 @@ function WALState2Serialized(sthis, wal) {
|
|
1420
1383
|
return serializedWAL;
|
1421
1384
|
}
|
1422
1385
|
var defaultEncoder = {
|
1423
|
-
car: async (sthis, payload) =>
|
1424
|
-
file: async (sthis, payload) =>
|
1425
|
-
meta: async (sthis, payload) =>
|
1426
|
-
wal: async (sthis, payload) =>
|
1386
|
+
car: async (sthis, payload) => import_cement9.Result.Ok(payload),
|
1387
|
+
file: async (sthis, payload) => import_cement9.Result.Ok(payload),
|
1388
|
+
meta: async (sthis, payload) => import_cement9.Result.Ok(sthis.txt.encode(JSON.stringify(payload))),
|
1389
|
+
wal: async (sthis, payload) => import_cement9.Result.Ok(sthis.txt.encode(JSON.stringify(payload)))
|
1427
1390
|
};
|
1428
1391
|
async function fpSerialize(sthis, env, pencoder) {
|
1429
1392
|
const encoder = {
|
@@ -1445,13 +1408,13 @@ async function fpSerialize(sthis, env, pencoder) {
|
|
1445
1408
|
}
|
1446
1409
|
async function decode2DbMetaEvents(sthis, rserializedMeta) {
|
1447
1410
|
if (rserializedMeta.isErr()) {
|
1448
|
-
return
|
1411
|
+
return import_cement9.Result.Err(rserializedMeta.Err());
|
1449
1412
|
}
|
1450
1413
|
const serializedMeta = rserializedMeta.unwrap();
|
1451
1414
|
if (!Array.isArray(serializedMeta)) {
|
1452
1415
|
return sthis.logger.Debug().Any("metaEntries", serializedMeta).Msg("No data in MetaEntries").ResultError();
|
1453
1416
|
}
|
1454
|
-
return
|
1417
|
+
return import_cement9.Result.Ok(
|
1455
1418
|
await Promise.all(
|
1456
1419
|
serializedMeta.map(async (metaEntry) => {
|
1457
1420
|
const eventBlock = await (0, import_clock.decodeEventBlock)(import_base64.base64pad.decode(metaEntry.data));
|
@@ -1473,10 +1436,10 @@ function toCid(sthis, link) {
|
|
1473
1436
|
}
|
1474
1437
|
async function decode2WalState(sthis, rserializedWAL) {
|
1475
1438
|
if (rserializedWAL.isErr()) {
|
1476
|
-
return
|
1439
|
+
return import_cement9.Result.Err(rserializedWAL.Err());
|
1477
1440
|
}
|
1478
1441
|
const serializedWAL = rserializedWAL.unwrap();
|
1479
|
-
return
|
1442
|
+
return import_cement9.Result.Ok({
|
1480
1443
|
fileOperations: (serializedWAL.fileOperations || []).map((fop) => ({
|
1481
1444
|
cid: toCid(sthis, fop.cid),
|
1482
1445
|
public: !!fop.public
|
@@ -1490,16 +1453,16 @@ async function decode2WalState(sthis, rserializedWAL) {
|
|
1490
1453
|
});
|
1491
1454
|
}
|
1492
1455
|
var defaultDecoder = {
|
1493
|
-
car: async (sthis, payload) =>
|
1494
|
-
file: async (sthis, payload) =>
|
1495
|
-
meta: async (sthis, payload) => (0,
|
1496
|
-
wal: async (sthis, payload) => (0,
|
1456
|
+
car: async (sthis, payload) => import_cement9.Result.Ok(payload),
|
1457
|
+
file: async (sthis, payload) => import_cement9.Result.Ok(payload),
|
1458
|
+
meta: async (sthis, payload) => (0, import_cement9.exception2Result)(() => JSON.parse(sthis.txt.decode(payload))),
|
1459
|
+
wal: async (sthis, payload) => (0, import_cement9.exception2Result)(() => JSON.parse(sthis.txt.decode(payload)))
|
1497
1460
|
};
|
1498
1461
|
function makeFPEnvelope(type, payload) {
|
1499
1462
|
if (payload.isErr()) {
|
1500
|
-
return
|
1463
|
+
return import_cement9.Result.Err(payload.Err());
|
1501
1464
|
}
|
1502
|
-
return
|
1465
|
+
return import_cement9.Result.Ok({
|
1503
1466
|
type,
|
1504
1467
|
payload: payload.unwrap()
|
1505
1468
|
});
|
@@ -1507,7 +1470,7 @@ function makeFPEnvelope(type, payload) {
|
|
1507
1470
|
async function fpDeserialize(sthis, url, intoRaw, pdecoder) {
|
1508
1471
|
const rraw = await coercePromiseIntoUint8(intoRaw);
|
1509
1472
|
if (rraw.isErr()) {
|
1510
|
-
return
|
1473
|
+
return import_cement9.Result.Err(rraw.Err());
|
1511
1474
|
}
|
1512
1475
|
const raw2 = rraw.unwrap();
|
1513
1476
|
const decoder = {
|
@@ -1558,12 +1521,12 @@ var DefSerdeGateway = class {
|
|
1558
1521
|
}
|
1559
1522
|
async get({ loader: { sthis }, decoder }, url) {
|
1560
1523
|
const res = await this.gw.get(url, sthis);
|
1561
|
-
if (res.isErr()) return
|
1524
|
+
if (res.isErr()) return import_cement10.Result.Err(res.Err());
|
1562
1525
|
return fpDeserialize(sthis, url, res, decoder);
|
1563
1526
|
}
|
1564
1527
|
async subscribe({ loader: { sthis }, decoder }, url, callback) {
|
1565
1528
|
function rawCallback(raw2) {
|
1566
|
-
return fpDeserialize(sthis, url,
|
1529
|
+
return fpDeserialize(sthis, url, import_cement10.Result.Ok(raw2), decoder).then((res) => {
|
1567
1530
|
if (res.isErr()) {
|
1568
1531
|
sthis.logger.Error().Err(res).Msg("Failed to deserialize");
|
1569
1532
|
return;
|
@@ -1573,12 +1536,12 @@ var DefSerdeGateway = class {
|
|
1573
1536
|
}
|
1574
1537
|
if (!this.gw.subscribe) {
|
1575
1538
|
if (!url.hasParam(PARAM.SELF_REFLECT)) {
|
1576
|
-
return
|
1539
|
+
return import_cement10.Result.Ok(() => {
|
1577
1540
|
});
|
1578
1541
|
}
|
1579
1542
|
const urlWithoutKey = url.build().delParam(PARAM.KEY).delParam(PARAM.SELF_REFLECT).toString();
|
1580
1543
|
this.subscribeFn.set(urlWithoutKey, rawCallback);
|
1581
|
-
return
|
1544
|
+
return import_cement10.Result.Ok(() => {
|
1582
1545
|
this.subscribeFn.delete(urlWithoutKey);
|
1583
1546
|
});
|
1584
1547
|
}
|
@@ -1655,10 +1618,10 @@ function defaultGatewayFactoryItem() {
|
|
1655
1618
|
return found;
|
1656
1619
|
}
|
1657
1620
|
function defaultURI(sthis) {
|
1658
|
-
const rt = (0,
|
1659
|
-
return
|
1621
|
+
const rt = (0, import_cement11.runtimeFn)();
|
1622
|
+
return import_cement11.BuildURI.from("file://").pathname(`${sthis.env.get("HOME")}/.fireproof/${FILESTORE_VERSION.replace(/-.*$/, "")}`).setParam(PARAM.VERSION, FILESTORE_VERSION).setParam(PARAM.URL_GEN, "default").setParam(PARAM.RUNTIME, rt.isNodeIsh ? "node" : rt.isDeno ? "deno" : "unknown").URI();
|
1660
1623
|
}
|
1661
|
-
if ((0,
|
1624
|
+
if ((0, import_cement11.runtimeFn)().isNodeIsh || (0, import_cement11.runtimeFn)().isDeno) {
|
1662
1625
|
registerStoreProtocol({
|
1663
1626
|
protocol: "file:",
|
1664
1627
|
isDefault: true,
|
@@ -1668,12 +1631,12 @@ if ((0, import_cement10.runtimeFn)().isNodeIsh || (0, import_cement10.runtimeFn)
|
|
1668
1631
|
}
|
1669
1632
|
});
|
1670
1633
|
}
|
1671
|
-
if ((0,
|
1634
|
+
if ((0, import_cement11.runtimeFn)().isBrowser) {
|
1672
1635
|
registerStoreProtocol({
|
1673
1636
|
protocol: "indexeddb:",
|
1674
1637
|
isDefault: true,
|
1675
1638
|
defaultURI: () => {
|
1676
|
-
return
|
1639
|
+
return import_cement11.BuildURI.from("indexeddb://").pathname("fp").setParam(PARAM.VERSION, INDEXEDDB_VERSION).setParam(PARAM.RUNTIME, "browser").URI();
|
1677
1640
|
},
|
1678
1641
|
gateway: async () => {
|
1679
1642
|
const { GatewayImpl } = await import("@fireproof/core/indexeddb");
|
@@ -1686,7 +1649,7 @@ registerStoreProtocol({
|
|
1686
1649
|
protocol: "memory:",
|
1687
1650
|
isDefault: false,
|
1688
1651
|
defaultURI: () => {
|
1689
|
-
return
|
1652
|
+
return import_cement11.BuildURI.from("memory://").pathname("ram").URI();
|
1690
1653
|
},
|
1691
1654
|
gateway: async (sthis) => {
|
1692
1655
|
return new MemoryGateway(sthis, memory);
|
@@ -1699,44 +1662,44 @@ __export(block_exports, {
|
|
1699
1662
|
Block: () => Block,
|
1700
1663
|
create: () => create,
|
1701
1664
|
createUnsafe: () => createUnsafe,
|
1702
|
-
decode: () =>
|
1703
|
-
encode: () =>
|
1665
|
+
decode: () => decode2,
|
1666
|
+
encode: () => encode2
|
1704
1667
|
});
|
1705
1668
|
var import_multiformats2 = require("multiformats");
|
1706
1669
|
var import_block = require("multiformats/block");
|
1707
1670
|
var Block = import_block.Block;
|
1708
|
-
async function
|
1671
|
+
async function decode2({
|
1709
1672
|
bytes,
|
1710
1673
|
codec: codec3,
|
1711
|
-
hasher:
|
1674
|
+
hasher: hasher7
|
1712
1675
|
}) {
|
1713
1676
|
if (bytes == null) throw new Error('Missing required argument "bytes"');
|
1714
|
-
if (codec3 == null ||
|
1677
|
+
if (codec3 == null || hasher7 == null) throw new Error("Missing required argument: codec or hasher");
|
1715
1678
|
const value = await Promise.resolve(codec3.decode(bytes));
|
1716
1679
|
let toHash = bytes;
|
1717
1680
|
if (codec3.valueToHashBytes) {
|
1718
1681
|
toHash = await Promise.resolve(codec3.valueToHashBytes(value));
|
1719
1682
|
}
|
1720
|
-
const hash = await
|
1683
|
+
const hash = await hasher7.digest(toHash);
|
1721
1684
|
const cid = import_multiformats2.CID.create(1, codec3.code, hash);
|
1722
1685
|
return new import_block.Block({ value, bytes: toHash, cid });
|
1723
1686
|
}
|
1724
|
-
async function
|
1687
|
+
async function encode2({
|
1725
1688
|
value,
|
1726
1689
|
codec: codec3,
|
1727
|
-
hasher:
|
1690
|
+
hasher: hasher7
|
1728
1691
|
}) {
|
1729
1692
|
if (typeof value === "undefined") throw new Error('Missing required argument "value"');
|
1730
|
-
if (codec3 == null ||
|
1693
|
+
if (codec3 == null || hasher7 == null) throw new Error("Missing required argument: codec or hasher");
|
1731
1694
|
let bytes;
|
1732
1695
|
let hash;
|
1733
1696
|
if (codec3.bytesToHash) {
|
1734
1697
|
const hashable = await Promise.resolve(codec3.bytesToHash(value));
|
1735
|
-
hash = await
|
1698
|
+
hash = await hasher7.digest(hashable);
|
1736
1699
|
bytes = await Promise.resolve(codec3.encode(value));
|
1737
1700
|
} else {
|
1738
1701
|
bytes = await Promise.resolve(codec3.encode(value));
|
1739
|
-
hash = await
|
1702
|
+
hash = await hasher7.digest(bytes);
|
1740
1703
|
}
|
1741
1704
|
const cid = import_multiformats2.CID.create(1, codec3.code, hash);
|
1742
1705
|
return new Block({ value, bytes, cid });
|
@@ -1744,13 +1707,13 @@ async function encode({
|
|
1744
1707
|
async function create({
|
1745
1708
|
bytes,
|
1746
1709
|
cid,
|
1747
|
-
hasher:
|
1710
|
+
hasher: hasher7,
|
1748
1711
|
codec: codec3
|
1749
1712
|
}) {
|
1750
1713
|
if (bytes == null) throw new Error('Missing required argument "bytes"');
|
1751
|
-
if (
|
1714
|
+
if (hasher7 == null) throw new Error('Missing required argument "hasher"');
|
1752
1715
|
const value = await Promise.resolve(codec3.decode(bytes));
|
1753
|
-
const hash = await
|
1716
|
+
const hash = await hasher7.digest(bytes);
|
1754
1717
|
if (!import_multiformats2.bytes.equals(cid.multihash.bytes, hash.bytes)) {
|
1755
1718
|
throw new Error("CID hash does not match bytes");
|
1756
1719
|
}
|
@@ -1777,11 +1740,11 @@ async function createUnsafe({
|
|
1777
1740
|
}
|
1778
1741
|
|
1779
1742
|
// src/indexer-helpers.ts
|
1780
|
-
var
|
1743
|
+
var import_sha22 = require("multiformats/hashes/sha2");
|
1781
1744
|
var codec = __toESM(require("@ipld/dag-cbor"), 1);
|
1782
1745
|
var import_charwise = __toESM(require("charwise"), 1);
|
1783
1746
|
var DbIndex = __toESM(require("prolly-trees/db-index"), 1);
|
1784
|
-
var
|
1747
|
+
var import_utils9 = require("prolly-trees/utils");
|
1785
1748
|
var import_cache = require("prolly-trees/cache");
|
1786
1749
|
var IndexTree = class {
|
1787
1750
|
};
|
@@ -1789,17 +1752,17 @@ function refCompare(aRef, bRef) {
|
|
1789
1752
|
if (Number.isNaN(aRef)) return -1;
|
1790
1753
|
if (Number.isNaN(bRef)) throw new Error("ref may not be Infinity or NaN");
|
1791
1754
|
if (aRef === Infinity) return 1;
|
1792
|
-
return (0,
|
1755
|
+
return (0, import_utils9.simpleCompare)(aRef, bRef);
|
1793
1756
|
}
|
1794
1757
|
function compare(a, b) {
|
1795
1758
|
const [aKey, aRef] = a;
|
1796
1759
|
const [bKey, bRef] = b;
|
1797
|
-
const comp = (0,
|
1760
|
+
const comp = (0, import_utils9.simpleCompare)(aKey, bKey);
|
1798
1761
|
if (comp !== 0) return comp;
|
1799
1762
|
return refCompare(aRef, bRef);
|
1800
1763
|
}
|
1801
|
-
var byKeyOpts = { cache: import_cache.nocache, chunker: (0,
|
1802
|
-
var byIdOpts = { cache: import_cache.nocache, chunker: (0,
|
1764
|
+
var byKeyOpts = { cache: import_cache.nocache, chunker: (0, import_utils9.bf)(30), codec, hasher: import_sha22.sha256, compare };
|
1765
|
+
var byIdOpts = { cache: import_cache.nocache, chunker: (0, import_utils9.bf)(30), codec, hasher: import_sha22.sha256, compare: import_utils9.simpleCompare };
|
1803
1766
|
function indexEntriesForChanges(changes, mapFn) {
|
1804
1767
|
const indexEntries = [];
|
1805
1768
|
changes.forEach(({ id: key, value, del }) => {
|
@@ -1827,7 +1790,7 @@ function makeProllyGetBlock(blocks) {
|
|
1827
1790
|
const block = await blocks.get(address);
|
1828
1791
|
if (!block) throw new Error(`Missing block ${address.toString()}`);
|
1829
1792
|
const { cid, bytes } = block;
|
1830
|
-
return create({ cid, bytes, hasher:
|
1793
|
+
return create({ cid, bytes, hasher: import_sha22.sha256, codec });
|
1831
1794
|
};
|
1832
1795
|
}
|
1833
1796
|
async function bulkIndex(logger, tblocks, inIndex, indexEntries, opts) {
|
@@ -2213,6 +2176,7 @@ var DatabaseImpl = class {
|
|
2213
2176
|
}
|
2214
2177
|
async allDocs(opts = {}) {
|
2215
2178
|
await this.ready();
|
2179
|
+
void opts;
|
2216
2180
|
this.logger.Debug().Msg("allDocs");
|
2217
2181
|
const { result, head } = await this.ledger.crdt.allDocs();
|
2218
2182
|
const rows = result.map(({ id: key, value, del }) => ({
|
@@ -2241,7 +2205,7 @@ var DatabaseImpl = class {
|
|
2241
2205
|
};
|
2242
2206
|
|
2243
2207
|
// src/crdt.ts
|
2244
|
-
var
|
2208
|
+
var import_cement20 = require("@adviser/cement");
|
2245
2209
|
|
2246
2210
|
// src/blockstore/index.ts
|
2247
2211
|
var blockstore_exports = {};
|
@@ -2332,24 +2296,24 @@ var WALActiveStore = class extends BaseActiveStore {
|
|
2332
2296
|
};
|
2333
2297
|
|
2334
2298
|
// src/blockstore/store-factory.ts
|
2335
|
-
var
|
2299
|
+
var import_cement18 = require("@adviser/cement");
|
2336
2300
|
|
2337
2301
|
// src/blockstore/store.ts
|
2338
|
-
var
|
2302
|
+
var import_cement17 = require("@adviser/cement");
|
2339
2303
|
|
2340
2304
|
// src/blockstore/loader.ts
|
2341
2305
|
var import_p_limit = __toESM(require("p-limit"), 1);
|
2342
2306
|
var import_reader = require("@ipld/car/reader");
|
2343
|
-
var
|
2307
|
+
var import_cement15 = require("@adviser/cement");
|
2344
2308
|
|
2345
2309
|
// src/blockstore/loader-helpers.ts
|
2346
|
-
var
|
2310
|
+
var import_sha23 = require("multiformats/hashes/sha2");
|
2347
2311
|
var dagCodec = __toESM(require("@ipld/dag-cbor"), 1);
|
2348
2312
|
async function parseCarFile(reader, logger) {
|
2349
2313
|
const roots = await reader.roots;
|
2350
2314
|
const header = reader.blocks.find((i) => i.cid.equals(roots[0]));
|
2351
2315
|
if (!header) throw logger.Error().Msg("missing header block").AsError();
|
2352
|
-
const dec = await
|
2316
|
+
const dec = await decode2({ bytes: header.bytes, hasher: import_sha23.sha256, codec: dagCodec });
|
2353
2317
|
const fpvalue = dec.value;
|
2354
2318
|
if (fpvalue && !fpvalue.fp) {
|
2355
2319
|
throw logger.Error().Msg("missing fp").AsError();
|
@@ -2359,7 +2323,7 @@ async function parseCarFile(reader, logger) {
|
|
2359
2323
|
|
2360
2324
|
// src/blockstore/transaction.ts
|
2361
2325
|
var import_block4 = require("@fireproof/vendor/@web3-storage/pail/block");
|
2362
|
-
var
|
2326
|
+
var import_cement12 = require("@adviser/cement");
|
2363
2327
|
var CarTransactionImpl = class {
|
2364
2328
|
#memblock = new import_block4.MemoryBlockstore();
|
2365
2329
|
#hackUnshift;
|
@@ -2414,7 +2378,7 @@ function defaultedBlockstoreRuntime(sthis, opts, component, ctx) {
|
|
2414
2378
|
...opts,
|
2415
2379
|
logger,
|
2416
2380
|
keyBag: opts.keyBag || {},
|
2417
|
-
crypto: (0,
|
2381
|
+
crypto: (0, import_cement12.toCryptoRuntime)(opts.crypto),
|
2418
2382
|
storeUrls: opts.storeUrls,
|
2419
2383
|
taskManager: {
|
2420
2384
|
removeAfter: 3,
|
@@ -2590,7 +2554,7 @@ var CompactionFetcher = class {
|
|
2590
2554
|
};
|
2591
2555
|
|
2592
2556
|
// src/blockstore/commit-queue.ts
|
2593
|
-
var
|
2557
|
+
var import_cement13 = require("@adviser/cement");
|
2594
2558
|
var CommitQueue = class {
|
2595
2559
|
constructor() {
|
2596
2560
|
this.queue = [];
|
@@ -2601,7 +2565,7 @@ var CommitQueue = class {
|
|
2601
2565
|
if (this.queue.length === 0 && !this.processing) {
|
2602
2566
|
return Promise.resolve();
|
2603
2567
|
}
|
2604
|
-
const fn = new
|
2568
|
+
const fn = new import_cement13.Future();
|
2605
2569
|
this._waitIdleItems.add(fn);
|
2606
2570
|
return fn.asPromise();
|
2607
2571
|
}
|
@@ -2643,7 +2607,7 @@ var CommitQueue = class {
|
|
2643
2607
|
// src/blockstore/commitor.ts
|
2644
2608
|
var CBW = __toESM(require("@ipld/car/buffer-writer"), 1);
|
2645
2609
|
var dagCodec2 = __toESM(require("@ipld/dag-cbor"), 1);
|
2646
|
-
var
|
2610
|
+
var import_sha24 = require("multiformats/hashes/sha2");
|
2647
2611
|
async function encodeCarFile(roots, t, codec3) {
|
2648
2612
|
let size = 0;
|
2649
2613
|
const headerSize = CBW.headerLength({ roots });
|
@@ -2660,7 +2624,7 @@ async function encodeCarFile(roots, t, codec3) {
|
|
2660
2624
|
writer.write({ cid, bytes });
|
2661
2625
|
}
|
2662
2626
|
writer.close();
|
2663
|
-
return await
|
2627
|
+
return await encode2({ value: writer.bytes, hasher: import_sha24.sha256, codec: codec3 });
|
2664
2628
|
}
|
2665
2629
|
async function createCarFile(encoder, cid, t) {
|
2666
2630
|
return encodeCarFile([cid], t, encoder);
|
@@ -2698,9 +2662,9 @@ function makeCarHeader(meta, cars, compact = false) {
|
|
2698
2662
|
return { ...coreHeader, meta };
|
2699
2663
|
}
|
2700
2664
|
async function encodeCarHeader(fp) {
|
2701
|
-
return await
|
2665
|
+
return await encode2({
|
2702
2666
|
value: { fp },
|
2703
|
-
hasher:
|
2667
|
+
hasher: import_sha24.sha256,
|
2704
2668
|
codec: dagCodec2
|
2705
2669
|
});
|
2706
2670
|
}
|
@@ -2743,7 +2707,7 @@ async function prepareCarFiles(encoder, threshold, rootBlock, t) {
|
|
2743
2707
|
}
|
2744
2708
|
|
2745
2709
|
// src/blockstore/loader.ts
|
2746
|
-
var
|
2710
|
+
var import_sha25 = require("multiformats/hashes/sha2");
|
2747
2711
|
|
2748
2712
|
// src/blockstore/task-manager.ts
|
2749
2713
|
var TaskManager = class {
|
@@ -2794,7 +2758,7 @@ var TaskManager = class {
|
|
2794
2758
|
};
|
2795
2759
|
|
2796
2760
|
// src/blockstore/attachable-store.ts
|
2797
|
-
var
|
2761
|
+
var import_cement14 = require("@adviser/cement");
|
2798
2762
|
var AttachedImpl = class {
|
2799
2763
|
constructor(gws, stores, unreg) {
|
2800
2764
|
this.gatewayUrls = gws;
|
@@ -2961,7 +2925,7 @@ async function createAttachedStores(urlOrGup, arOrLoadable, name = "local") {
|
|
2961
2925
|
if (!urlOrGup) {
|
2962
2926
|
throw new Error("urlOrGup is required");
|
2963
2927
|
}
|
2964
|
-
if ((0,
|
2928
|
+
if ((0, import_cement14.isCoerceURI)(urlOrGup)) {
|
2965
2929
|
const url = urlOrGup;
|
2966
2930
|
gup = {
|
2967
2931
|
car: { url },
|
@@ -2979,7 +2943,7 @@ async function createAttachedStores(urlOrGup, arOrLoadable, name = "local") {
|
|
2979
2943
|
}
|
2980
2944
|
var AttachedRemotesImpl = class {
|
2981
2945
|
constructor(loadable) {
|
2982
|
-
this._remotes = new
|
2946
|
+
this._remotes = new import_cement14.KeyedResolvOnce();
|
2983
2947
|
this.loadable = loadable;
|
2984
2948
|
}
|
2985
2949
|
forRemotes(action) {
|
@@ -2995,8 +2959,8 @@ var AttachedRemotesImpl = class {
|
|
2995
2959
|
return new ActiveStoreImpl(this._local.stores, this);
|
2996
2960
|
}
|
2997
2961
|
activate(store) {
|
2998
|
-
if ((0,
|
2999
|
-
const activateUrl =
|
2962
|
+
if ((0, import_cement14.isCoerceURI)(store)) {
|
2963
|
+
const activateUrl = import_cement14.URI.from(store);
|
3000
2964
|
let maxScore = 0;
|
3001
2965
|
let maxStore;
|
3002
2966
|
for (const { value } of this._remotes.values()) {
|
@@ -3032,19 +2996,19 @@ var AttachedRemotesImpl = class {
|
|
3032
2996
|
const gws = {
|
3033
2997
|
car: {
|
3034
2998
|
...gwp.car,
|
3035
|
-
url: ensureURIDefaults(this.loadable.sthis, attached.name, gwp.car.url,
|
2999
|
+
url: ensureURIDefaults(this.loadable.sthis, attached.name, gwp.car.url, import_cement14.URI.from(gwp.car.url), "car")
|
3036
3000
|
},
|
3037
3001
|
file: {
|
3038
3002
|
...gwp.file,
|
3039
|
-
url: ensureURIDefaults(this.loadable.sthis, attached.name, void 0,
|
3003
|
+
url: ensureURIDefaults(this.loadable.sthis, attached.name, void 0, import_cement14.URI.from(gwp.file.url), "file", { file: true })
|
3040
3004
|
},
|
3041
3005
|
meta: {
|
3042
3006
|
...gwp.meta,
|
3043
|
-
url: ensureURIDefaults(this.loadable.sthis, attached.name, void 0,
|
3007
|
+
url: ensureURIDefaults(this.loadable.sthis, attached.name, void 0, import_cement14.URI.from(gwp.meta.url), "meta")
|
3044
3008
|
},
|
3045
3009
|
wal: gwp.wal ? {
|
3046
3010
|
...gwp.wal,
|
3047
|
-
url: ensureURIDefaults(this.loadable.sthis, attached.name, void 0,
|
3011
|
+
url: ensureURIDefaults(this.loadable.sthis, attached.name, void 0, import_cement14.URI.from(gwp.wal.url), "wal")
|
3048
3012
|
} : void 0
|
3049
3013
|
};
|
3050
3014
|
const key = JSON.stringify(
|
@@ -3085,7 +3049,7 @@ function carLogIncludesGroup(list, cids) {
|
|
3085
3049
|
(arr) => cidSet === arr.map((cid) => cid.toString()).sort().join(",")
|
3086
3050
|
);
|
3087
3051
|
}
|
3088
|
-
function uniqueCids(list, remove = new
|
3052
|
+
function uniqueCids(list, remove = new import_cement15.LRUSet()) {
|
3089
3053
|
const byString = /* @__PURE__ */ new Map();
|
3090
3054
|
for (const cid of list) {
|
3091
3055
|
if (remove.has(cid.toString())) continue;
|
@@ -3099,7 +3063,7 @@ var Loader = class {
|
|
3099
3063
|
this.isCompacting = false;
|
3100
3064
|
this.maxConcurrentWrite = (0, import_p_limit.default)(1);
|
3101
3065
|
this.carLog = new CarLog();
|
3102
|
-
this.onceReady = new
|
3066
|
+
this.onceReady = new import_cement15.ResolveOnce();
|
3103
3067
|
this.sthis = sthis;
|
3104
3068
|
this.ebOpts = defaultedBlockstoreRuntime(
|
3105
3069
|
sthis,
|
@@ -3110,15 +3074,15 @@ var Loader = class {
|
|
3110
3074
|
"Loader"
|
3111
3075
|
);
|
3112
3076
|
this.logger = ensureLogger(sthis, "Loader");
|
3113
|
-
this.cidCache = new
|
3077
|
+
this.cidCache = new import_cement15.KeyedResolvOnce({
|
3114
3078
|
lru: {
|
3115
3079
|
maxEntries: parseInt(this.ebOpts.storeUrls.car.getParam(PARAM.CAR_CACHE_SIZE, "1000"), 10)
|
3116
3080
|
}
|
3117
3081
|
});
|
3118
|
-
this.seenMeta = new
|
3082
|
+
this.seenMeta = new import_cement15.LRUSet({
|
3119
3083
|
maxEntries: parseInt(this.ebOpts.storeUrls.meta.getParam(PARAM.CAR_META_CACHE_SIZE, "1000"), 10)
|
3120
3084
|
});
|
3121
|
-
this.seenCompacted = new
|
3085
|
+
this.seenCompacted = new import_cement15.LRUSet({
|
3122
3086
|
maxEntries: parseInt(this.ebOpts.storeUrls.car.getParam(PARAM.CAR_COMPACT_CACHE_SIZE, "1000"), 10)
|
3123
3087
|
});
|
3124
3088
|
this.maxConcurrentCarReader = (0, import_p_limit.default)(parseInt(this.ebOpts.storeUrls.car.getParam(PARAM.CAR_PARALLEL, "5"), 10));
|
@@ -3423,7 +3387,7 @@ var Loader = class {
|
|
3423
3387
|
if (!loadedCar) {
|
3424
3388
|
throw this.logger.Error().Url(store.local().url()).Str("cid", carCidStr).Msg("missing car files").AsError();
|
3425
3389
|
}
|
3426
|
-
const bytes = await
|
3390
|
+
const bytes = await decode2({ bytes: loadedCar.bytes, hasher: import_sha25.sha256, codec: (await activeStore.keyedCrypto()).codec() });
|
3427
3391
|
const rawReader = await import_reader.CarReader.fromBytes(bytes.value.data);
|
3428
3392
|
const blocks = [];
|
3429
3393
|
for await (const block of rawReader.blocks()) {
|
@@ -3464,7 +3428,7 @@ __export(keyed_crypto_exports, {
|
|
3464
3428
|
keyedCryptoFactory: () => keyedCryptoFactory
|
3465
3429
|
});
|
3466
3430
|
var import_base583 = require("multiformats/bases/base58");
|
3467
|
-
var
|
3431
|
+
var import_sha26 = require("multiformats/hashes/sha2");
|
3468
3432
|
var CBOR = __toESM(require("cborg"), 1);
|
3469
3433
|
var generateIV = {
|
3470
3434
|
random: {
|
@@ -3479,7 +3443,7 @@ var generateIV = {
|
|
3479
3443
|
},
|
3480
3444
|
hash: {
|
3481
3445
|
calc: async (ko, crypto, data) => {
|
3482
|
-
const hash = await
|
3446
|
+
const hash = await import_sha26.sha256.digest(data);
|
3483
3447
|
const hashBytes = new Uint8Array(hash.bytes);
|
3484
3448
|
const hashArray = new Uint8Array(ko.ivLength);
|
3485
3449
|
for (let i = 0; i < hashBytes.length; i++) {
|
@@ -3667,39 +3631,39 @@ var import_p_retry = __toESM(require("p-retry"), 1);
|
|
3667
3631
|
var import_p_map = __toESM(require("p-map"), 1);
|
3668
3632
|
|
3669
3633
|
// src/blockstore/interceptor-gateway.ts
|
3670
|
-
var
|
3634
|
+
var import_cement16 = require("@adviser/cement");
|
3671
3635
|
var PassThroughGateway = class {
|
3672
3636
|
async buildUrl(ctx, url, key) {
|
3673
3637
|
const op = { url, key };
|
3674
|
-
return
|
3638
|
+
return import_cement16.Result.Ok({ op });
|
3675
3639
|
}
|
3676
3640
|
async start(ctx, url) {
|
3677
3641
|
const op = { url };
|
3678
|
-
return
|
3642
|
+
return import_cement16.Result.Ok({ op });
|
3679
3643
|
}
|
3680
3644
|
async close(ctx, url) {
|
3681
3645
|
const op = { url };
|
3682
|
-
return
|
3646
|
+
return import_cement16.Result.Ok({ op });
|
3683
3647
|
}
|
3684
3648
|
async delete(ctx, url) {
|
3685
3649
|
const op = { url };
|
3686
|
-
return
|
3650
|
+
return import_cement16.Result.Ok({ op });
|
3687
3651
|
}
|
3688
3652
|
async destroy(ctx, url) {
|
3689
3653
|
const op = { url };
|
3690
|
-
return
|
3654
|
+
return import_cement16.Result.Ok({ op });
|
3691
3655
|
}
|
3692
3656
|
async put(ctx, url, body) {
|
3693
3657
|
const op = { url, body };
|
3694
|
-
return
|
3658
|
+
return import_cement16.Result.Ok({ op });
|
3695
3659
|
}
|
3696
3660
|
async get(ctx, url) {
|
3697
3661
|
const op = { url };
|
3698
|
-
return
|
3662
|
+
return import_cement16.Result.Ok({ op });
|
3699
3663
|
}
|
3700
3664
|
async subscribe(ctx, url, callback) {
|
3701
3665
|
const op = { url, callback };
|
3702
|
-
return
|
3666
|
+
return import_cement16.Result.Ok({ op });
|
3703
3667
|
}
|
3704
3668
|
};
|
3705
3669
|
var passThrougthGateway = new PassThroughGateway();
|
@@ -3711,7 +3675,7 @@ var InterceptorGateway = class {
|
|
3711
3675
|
async buildUrl(ctx, baseUrl, key) {
|
3712
3676
|
const rret = await this.interceptor.buildUrl(ctx, baseUrl, key);
|
3713
3677
|
if (rret.isErr()) {
|
3714
|
-
return
|
3678
|
+
return import_cement16.Result.Err(rret.Err());
|
3715
3679
|
}
|
3716
3680
|
const ret = rret.unwrap();
|
3717
3681
|
if (ret.stop && ret.value) {
|
@@ -3722,7 +3686,7 @@ var InterceptorGateway = class {
|
|
3722
3686
|
async destroy(ctx, iurl) {
|
3723
3687
|
const rret = await this.interceptor.destroy(ctx, iurl);
|
3724
3688
|
if (rret.isErr()) {
|
3725
|
-
return
|
3689
|
+
return import_cement16.Result.Err(rret.Err());
|
3726
3690
|
}
|
3727
3691
|
const ret = rret.unwrap();
|
3728
3692
|
if (ret.stop && ret.value) {
|
@@ -3733,7 +3697,7 @@ var InterceptorGateway = class {
|
|
3733
3697
|
async start(ctx, url) {
|
3734
3698
|
const rret = await this.interceptor.start(ctx, url);
|
3735
3699
|
if (rret.isErr()) {
|
3736
|
-
return
|
3700
|
+
return import_cement16.Result.Err(rret.Err());
|
3737
3701
|
}
|
3738
3702
|
const ret = rret.unwrap();
|
3739
3703
|
if (ret.stop && ret.value) {
|
@@ -3744,7 +3708,7 @@ var InterceptorGateway = class {
|
|
3744
3708
|
async close(ctx, url) {
|
3745
3709
|
const rret = await this.interceptor.close(ctx, url);
|
3746
3710
|
if (rret.isErr()) {
|
3747
|
-
return
|
3711
|
+
return import_cement16.Result.Err(rret.Err());
|
3748
3712
|
}
|
3749
3713
|
const ret = rret.unwrap();
|
3750
3714
|
if (ret.stop && ret.value) {
|
@@ -3755,7 +3719,7 @@ var InterceptorGateway = class {
|
|
3755
3719
|
async put(ctx, url, fpEnv) {
|
3756
3720
|
const rret = await this.interceptor.put(ctx, url, fpEnv);
|
3757
3721
|
if (rret.isErr()) {
|
3758
|
-
return
|
3722
|
+
return import_cement16.Result.Err(rret.Err());
|
3759
3723
|
}
|
3760
3724
|
const ret = rret.unwrap();
|
3761
3725
|
if (ret.stop && ret.value) {
|
@@ -3766,7 +3730,7 @@ var InterceptorGateway = class {
|
|
3766
3730
|
async get(ctx, url) {
|
3767
3731
|
const rret = await this.interceptor.get(ctx, url);
|
3768
3732
|
if (rret.isErr()) {
|
3769
|
-
return
|
3733
|
+
return import_cement16.Result.Err(rret.Err());
|
3770
3734
|
}
|
3771
3735
|
const ret = rret.unwrap();
|
3772
3736
|
if (ret.stop && ret.value) {
|
@@ -3776,11 +3740,11 @@ var InterceptorGateway = class {
|
|
3776
3740
|
}
|
3777
3741
|
async subscribe(ctx, url, callback) {
|
3778
3742
|
if (!this.innerGW.subscribe) {
|
3779
|
-
return
|
3743
|
+
return import_cement16.Result.Err(ctx.loader.sthis.logger.Error().Url(url).Msg("subscribe not supported").AsError());
|
3780
3744
|
}
|
3781
3745
|
const rret = await this.interceptor.subscribe(ctx, url, callback);
|
3782
3746
|
if (rret.isErr()) {
|
3783
|
-
return
|
3747
|
+
return import_cement16.Result.Err(rret.Err());
|
3784
3748
|
}
|
3785
3749
|
const ret = rret.unwrap();
|
3786
3750
|
if (ret.stop && ret.value) {
|
@@ -3791,7 +3755,7 @@ var InterceptorGateway = class {
|
|
3791
3755
|
async delete(ctx, url) {
|
3792
3756
|
const rret = await this.interceptor.delete(ctx, url);
|
3793
3757
|
if (rret.isErr()) {
|
3794
|
-
return
|
3758
|
+
return import_cement16.Result.Err(rret.Err());
|
3795
3759
|
}
|
3796
3760
|
const ret = rret.unwrap();
|
3797
3761
|
if (ret.stop && ret.value) {
|
@@ -3807,9 +3771,9 @@ var InterceptorGateway = class {
|
|
3807
3771
|
// src/blockstore/store.ts
|
3808
3772
|
function guardVersion(url) {
|
3809
3773
|
if (!url.hasParam("version")) {
|
3810
|
-
return
|
3774
|
+
return import_cement17.Result.Err(`missing version: ${url.toString()}`);
|
3811
3775
|
}
|
3812
|
-
return
|
3776
|
+
return import_cement17.Result.Ok(url);
|
3813
3777
|
}
|
3814
3778
|
var BaseStoreImpl = class {
|
3815
3779
|
// readonly loader: Loadable;
|
@@ -3869,7 +3833,7 @@ var BaseStoreImpl = class {
|
|
3869
3833
|
}
|
3870
3834
|
if (this.ready) {
|
3871
3835
|
const fn = this.ready.bind(this);
|
3872
|
-
const ready = await (0,
|
3836
|
+
const ready = await (0, import_cement17.exception2Result)(fn);
|
3873
3837
|
if (ready.isErr()) {
|
3874
3838
|
await this.close();
|
3875
3839
|
return ready;
|
@@ -3976,7 +3940,7 @@ var MetaStoreImpl = class extends BaseStoreImpl {
|
|
3976
3940
|
async close() {
|
3977
3941
|
await this.gateway.close({ loader: this.loader }, this.url());
|
3978
3942
|
this._onClosed.forEach((fn) => fn());
|
3979
|
-
return
|
3943
|
+
return import_cement17.Result.Ok(void 0);
|
3980
3944
|
}
|
3981
3945
|
async destroy() {
|
3982
3946
|
this.logger.Debug().Msg("destroy");
|
@@ -4043,7 +4007,7 @@ var DataStoreImpl = class extends BaseStoreImpl {
|
|
4043
4007
|
async close() {
|
4044
4008
|
await this.gateway.close({ loader: this.loader }, this.url());
|
4045
4009
|
this._onClosed.forEach((fn) => fn());
|
4046
|
-
return
|
4010
|
+
return import_cement17.Result.Ok(void 0);
|
4047
4011
|
}
|
4048
4012
|
destroy() {
|
4049
4013
|
this.logger.Debug().Msg("destroy");
|
@@ -4068,7 +4032,7 @@ var WALStoreImpl = class extends BaseStoreImpl {
|
|
4068
4032
|
this.storeType = "wal";
|
4069
4033
|
// readonly tag: string = "rwal-base";
|
4070
4034
|
// readonly loader: Loadable;
|
4071
|
-
this._ready = new
|
4035
|
+
this._ready = new import_cement17.ResolveOnce();
|
4072
4036
|
this.walState = { operations: [], noLoaderOps: [], fileOperations: [] };
|
4073
4037
|
this.processing = void 0;
|
4074
4038
|
this.processQueue = new CommitQueue();
|
@@ -4245,7 +4209,7 @@ var WALStoreImpl = class extends BaseStoreImpl {
|
|
4245
4209
|
async close() {
|
4246
4210
|
await this.gateway.close({ loader: this.loader }, this.url());
|
4247
4211
|
this._onClosed.forEach((fn) => fn());
|
4248
|
-
return
|
4212
|
+
return import_cement17.Result.Ok(void 0);
|
4249
4213
|
}
|
4250
4214
|
destroy() {
|
4251
4215
|
this.logger.Debug().Msg("destroy");
|
@@ -4254,8 +4218,8 @@ var WALStoreImpl = class extends BaseStoreImpl {
|
|
4254
4218
|
};
|
4255
4219
|
|
4256
4220
|
// src/blockstore/store-factory.ts
|
4257
|
-
var onceGateway = new
|
4258
|
-
var gatewayInstances = new
|
4221
|
+
var onceGateway = new import_cement18.KeyedResolvOnce();
|
4222
|
+
var gatewayInstances = new import_cement18.KeyedResolvOnce();
|
4259
4223
|
async function getStartedGateway(ctx, url) {
|
4260
4224
|
return onceGateway.get(url.toString()).once(async () => {
|
4261
4225
|
const item = getGatewayFactoryItem(url.protocol);
|
@@ -4268,12 +4232,12 @@ async function getStartedGateway(ctx, url) {
|
|
4268
4232
|
};
|
4269
4233
|
const res = await ret.gateway.start(ctx, url);
|
4270
4234
|
if (res.isErr()) {
|
4271
|
-
return
|
4235
|
+
return import_cement18.Result.Err(ctx.loader.sthis.logger.Error().Result("start", res).Msg("start failed").AsError());
|
4272
4236
|
}
|
4273
4237
|
ret.url = res.Ok();
|
4274
|
-
return
|
4238
|
+
return import_cement18.Result.Ok(ret);
|
4275
4239
|
}
|
4276
|
-
return
|
4240
|
+
return import_cement18.Result.Err(ctx.loader.sthis.logger.Warn().Url(url).Msg("unsupported protocol").AsError());
|
4277
4241
|
});
|
4278
4242
|
}
|
4279
4243
|
async function carStoreFactory(ctx, uai) {
|
@@ -4377,7 +4341,7 @@ function toStoreRuntime(sthis, endeOpts = {}) {
|
|
4377
4341
|
|
4378
4342
|
// src/crdt-helpers.ts
|
4379
4343
|
var import_link2 = require("multiformats/link");
|
4380
|
-
var
|
4344
|
+
var import_sha27 = require("multiformats/hashes/sha2");
|
4381
4345
|
var codec2 = __toESM(require("@ipld/dag-cbor"), 1);
|
4382
4346
|
var import_crdt = require("@fireproof/vendor/@web3-storage/pail/crdt");
|
4383
4347
|
var import_clock3 = require("@fireproof/vendor/@web3-storage/pail/clock");
|
@@ -4464,7 +4428,7 @@ async function writeDocContent(store, blocks, update, logger) {
|
|
4464
4428
|
await processFiles(store, blocks, update.value, logger);
|
4465
4429
|
value = { doc: update.value };
|
4466
4430
|
}
|
4467
|
-
const block = await
|
4431
|
+
const block = await encode2({ value, hasher: import_sha27.sha256, codec: codec2 });
|
4468
4432
|
blocks.putSync(block.cid, block.bytes);
|
4469
4433
|
return block.cid;
|
4470
4434
|
}
|
@@ -4495,11 +4459,11 @@ async function processFileset(logger, store, blocks, files) {
|
|
4495
4459
|
for (const block of fileBlocks) {
|
4496
4460
|
t.putSync(block.cid, block.bytes);
|
4497
4461
|
}
|
4498
|
-
files[filename] = { cid, type: file.type, size: file.size };
|
4462
|
+
files[filename] = { cid, type: file.type, size: file.size, lastModified: file.lastModified };
|
4499
4463
|
} else {
|
4500
|
-
const { cid, type, size, car } = files[filename];
|
4464
|
+
const { cid, type, size, car, lastModified } = files[filename];
|
4501
4465
|
if (cid && type && size && car) {
|
4502
|
-
files[filename] = { cid, type, size, car };
|
4466
|
+
files[filename] = { cid, type, size, car, lastModified };
|
4503
4467
|
}
|
4504
4468
|
}
|
4505
4469
|
}
|
@@ -4539,15 +4503,21 @@ function readFileset(blocks, files, isPublic = false) {
|
|
4539
4503
|
fileMeta.url = `https://${fileMeta.cid.toString()}.ipfs.w3s.link/`;
|
4540
4504
|
}
|
4541
4505
|
if (fileMeta.car) {
|
4542
|
-
fileMeta.file = async () =>
|
4543
|
-
|
4544
|
-
|
4545
|
-
|
4546
|
-
|
4547
|
-
|
4548
|
-
|
4549
|
-
|
4550
|
-
|
4506
|
+
fileMeta.file = async () => {
|
4507
|
+
const result = await blocks.ebOpts.storeRuntime.decodeFile(
|
4508
|
+
{
|
4509
|
+
get: async (cid) => {
|
4510
|
+
return await blocks.getFile(throwFalsy(fileMeta.car), cid);
|
4511
|
+
}
|
4512
|
+
},
|
4513
|
+
fileMeta.cid,
|
4514
|
+
fileMeta
|
4515
|
+
);
|
4516
|
+
if (result.isErr()) {
|
4517
|
+
throw blocks.logger.Error().Any("error", result.Err()).Any("cid", fileMeta.cid).Msg("Error decoding file").AsError();
|
4518
|
+
}
|
4519
|
+
return result.unwrap();
|
4520
|
+
};
|
4551
4521
|
}
|
4552
4522
|
}
|
4553
4523
|
files[filename] = fileMeta;
|
@@ -4556,7 +4526,7 @@ function readFileset(blocks, files, isPublic = false) {
|
|
4556
4526
|
async function getValueFromLink(blocks, link, logger) {
|
4557
4527
|
const block = await blocks.get(link);
|
4558
4528
|
if (!block) throw logger.Error().Str("link", link.toString()).Msg(`Missing linked block`).AsError();
|
4559
|
-
const { value } = await
|
4529
|
+
const { value } = await decode2({ bytes: block.bytes, hasher: import_sha27.sha256, codec: codec2 });
|
4560
4530
|
const cvalue = {
|
4561
4531
|
...value,
|
4562
4532
|
cid: link
|
@@ -4682,14 +4652,14 @@ async function doCompact(blockLog, head, logger) {
|
|
4682
4652
|
async function getBlock(blocks, cidString) {
|
4683
4653
|
const block = await blocks.get((0, import_link2.parse)(cidString));
|
4684
4654
|
if (!block) throw new Error(`Missing block ${cidString}`);
|
4685
|
-
const { cid, value } = await
|
4655
|
+
const { cid, value } = await decode2({ bytes: block.bytes, codec: codec2, hasher: import_sha27.sha256 });
|
4686
4656
|
return new Block({ cid, value, bytes: block.bytes });
|
4687
4657
|
}
|
4688
4658
|
|
4689
4659
|
// src/crdt-clock.ts
|
4690
4660
|
var import_clock4 = require("@fireproof/vendor/@web3-storage/pail/clock");
|
4691
4661
|
var import_crdt2 = require("@fireproof/vendor/@web3-storage/pail/crdt");
|
4692
|
-
var
|
4662
|
+
var import_cement19 = require("@adviser/cement");
|
4693
4663
|
|
4694
4664
|
// src/apply-head-queue.ts
|
4695
4665
|
function applyHeadQueue(worker, logger) {
|
@@ -4746,7 +4716,7 @@ var CRDTClockImpl = class {
|
|
4746
4716
|
this.zoomers = /* @__PURE__ */ new Map();
|
4747
4717
|
this.watchers = /* @__PURE__ */ new Map();
|
4748
4718
|
this.emptyWatchers = /* @__PURE__ */ new Map();
|
4749
|
-
this._ready = new
|
4719
|
+
this._ready = new import_cement19.ResolveOnce();
|
4750
4720
|
this.sthis = blockstore.sthis;
|
4751
4721
|
this.blockstore = blockstore;
|
4752
4722
|
this.logger = ensureLogger(blockstore.sthis, "CRDTClock");
|
@@ -4876,7 +4846,7 @@ async function advanceBlocks(logger, newHead, tblocks, head) {
|
|
4876
4846
|
var CRDTImpl = class {
|
4877
4847
|
constructor(sthis, opts) {
|
4878
4848
|
this.indexers = /* @__PURE__ */ new Map();
|
4879
|
-
this.onceReady = new
|
4849
|
+
this.onceReady = new import_cement20.ResolveOnce();
|
4880
4850
|
this.sthis = sthis;
|
4881
4851
|
this.crdt = this;
|
4882
4852
|
this.logger = ensureLogger(sthis, "CRDT");
|
@@ -5022,7 +4992,7 @@ var Context = class {
|
|
5022
4992
|
};
|
5023
4993
|
|
5024
4994
|
// src/ledger.ts
|
5025
|
-
var ledgers = new
|
4995
|
+
var ledgers = new import_cement21.KeyedResolvOnce();
|
5026
4996
|
function keyConfigOpts(sthis, name, opts) {
|
5027
4997
|
return JSON.stringify(
|
5028
4998
|
toSortedArray({
|
@@ -5114,7 +5084,7 @@ var LedgerImpl = class {
|
|
5114
5084
|
this.shells = /* @__PURE__ */ new Set();
|
5115
5085
|
this.context = new Context();
|
5116
5086
|
this._onClosedFns = /* @__PURE__ */ new Map();
|
5117
|
-
this._ready = new
|
5087
|
+
this._ready = new import_cement21.ResolveOnce();
|
5118
5088
|
this.opts = opts;
|
5119
5089
|
this.sthis = sthis;
|
5120
5090
|
this.id = sthis.timeOrderedNextId().str;
|
@@ -5222,12 +5192,12 @@ function toStoreURIRuntime(sthis, name, sopts) {
|
|
5222
5192
|
if (!sopts.base) {
|
5223
5193
|
const fp_env = sthis.env.get("FP_STORAGE_URL");
|
5224
5194
|
if (fp_env) {
|
5225
|
-
sopts = { ...sopts, base:
|
5195
|
+
sopts = { ...sopts, base: import_cement21.BuildURI.from(fp_env).setParam(PARAM.URL_GEN, "fromEnv") };
|
5226
5196
|
} else {
|
5227
5197
|
sopts = { ...sopts, base: getDefaultURI(sthis).build().setParam(PARAM.URL_GEN, "default") };
|
5228
5198
|
}
|
5229
5199
|
}
|
5230
|
-
const base =
|
5200
|
+
const base = import_cement21.URI.from(sopts.base);
|
5231
5201
|
return {
|
5232
5202
|
idx: {
|
5233
5203
|
car: ensureURIDefaults(sthis, name, sopts.idx?.car ?? sopts.data?.car, base, "car", { idx: true }),
|
@@ -5268,7 +5238,7 @@ __export(runtime_exports, {
|
|
5268
5238
|
keysByFingerprint: () => keysByFingerprint,
|
5269
5239
|
mf: () => wait_pr_multiformats_exports,
|
5270
5240
|
registerKeyBagProviderFactory: () => registerKeyBagProviderFactory,
|
5271
|
-
runtimeFn: () =>
|
5241
|
+
runtimeFn: () => import_cement22.runtimeFn,
|
5272
5242
|
toKeyWithFingerPrint: () => toKeyWithFingerPrint
|
5273
5243
|
});
|
5274
5244
|
|
@@ -5283,7 +5253,7 @@ __export(wait_pr_multiformats_exports, {
|
|
5283
5253
|
var codec_interface_exports = {};
|
5284
5254
|
|
5285
5255
|
// src/runtime/index.ts
|
5286
|
-
var
|
5256
|
+
var import_cement22 = require("@adviser/cement");
|
5287
5257
|
|
5288
5258
|
// src/runtime/gateways/index.ts
|
5289
5259
|
var gateways_exports = {};
|
@@ -5306,6 +5276,6 @@ __export(file_exports, {
|
|
5306
5276
|
|
5307
5277
|
// src/version.ts
|
5308
5278
|
var PACKAGE_VERSION = Object.keys({
|
5309
|
-
"0.20.0-dev-preview-
|
5279
|
+
"0.20.0-dev-preview-54": "xxxx"
|
5310
5280
|
})[0];
|
5311
5281
|
//# sourceMappingURL=index.cjs.map
|