@wovin/core 0.1.26 → 0.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/applog.min.js +2 -1
- package/dist/blockstore/index.d.ts +21 -0
- package/dist/blockstore/index.d.ts.map +1 -0
- package/dist/blockstore.d.ts +2 -0
- package/dist/blockstore.d.ts.map +1 -0
- package/dist/blockstore.min.js +26 -0
- package/dist/blockstore.min.js.map +1 -0
- package/dist/{chunk-KESMDM6C.min.js → chunk-CWVWWFE3.min.js} +4 -4
- package/dist/{chunk-USEP3ZEM.min.js → chunk-LHD7NNK6.min.js} +2 -2
- package/dist/{chunk-2QWZWVMQ.min.js → chunk-MCMSRRF7.min.js} +2 -2
- package/dist/{chunk-4OEO6Z4V.min.js → chunk-N2LOFNFT.min.js} +18 -6
- package/dist/chunk-N2LOFNFT.min.js.map +1 -0
- package/dist/{chunk-4JRBNO22.min.js → chunk-NKGFXL72.min.js} +14 -12
- package/dist/{chunk-4JRBNO22.min.js.map → chunk-NKGFXL72.min.js.map} +1 -1
- package/dist/chunk-QO2KMGDN.min.js +3771 -0
- package/dist/chunk-QO2KMGDN.min.js.map +1 -0
- package/dist/{chunk-R7EMHBM3.min.js → chunk-XWBLRTV5.min.js} +783 -4064
- package/dist/chunk-XWBLRTV5.min.js.map +1 -0
- package/dist/{chunk-HHFNRKOI.min.js → chunk-YUH56CPQ.min.js} +2 -2
- package/dist/index.min.js +16 -13
- package/dist/ipfs.min.js +5 -4
- package/dist/ipns/ipns-record.d.ts +34 -0
- package/dist/ipns/ipns-record.d.ts.map +1 -0
- package/dist/ipns.d.ts +2 -0
- package/dist/ipns.d.ts.map +1 -0
- package/dist/ipns.min.js +6419 -0
- package/dist/ipns.min.js.map +1 -0
- package/dist/pubsub.min.js +5 -4
- package/dist/query.min.js +4 -3
- package/dist/retrieve/update-thread.d.ts +8 -1
- package/dist/retrieve/update-thread.d.ts.map +1 -1
- package/dist/retrieve.min.js +9 -6
- package/dist/thread.min.js +2 -1
- package/package.json +11 -1
- package/dist/chunk-4OEO6Z4V.min.js.map +0 -1
- package/dist/chunk-R7EMHBM3.min.js.map +0 -1
- /package/dist/{chunk-KESMDM6C.min.js.map → chunk-CWVWWFE3.min.js.map} +0 -0
- /package/dist/{chunk-USEP3ZEM.min.js.map → chunk-LHD7NNK6.min.js.map} +0 -0
- /package/dist/{chunk-2QWZWVMQ.min.js.map → chunk-MCMSRRF7.min.js.map} +0 -0
- /package/dist/{chunk-HHFNRKOI.min.js.map → chunk-YUH56CPQ.min.js.map} +0 -0
package/dist/applog.min.js
CHANGED
|
@@ -47,8 +47,9 @@ import {
|
|
|
47
47
|
withAg,
|
|
48
48
|
withPvFrom,
|
|
49
49
|
withTs
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-XWBLRTV5.min.js";
|
|
51
51
|
import "./chunk-HYMC7W6S.min.js";
|
|
52
|
+
import "./chunk-QO2KMGDN.min.js";
|
|
52
53
|
import "./chunk-KEHU7HGZ.min.js";
|
|
53
54
|
import "./chunk-PHITDXZT.min.js";
|
|
54
55
|
export {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CID } from 'multiformats/cid';
|
|
2
|
+
/** Minimal async block store interface — get/put/has. */
|
|
3
|
+
export interface BlockStore {
|
|
4
|
+
get(cid: CID): Promise<Uint8Array>;
|
|
5
|
+
put(cid: CID, bytes: Uint8Array): Promise<void>;
|
|
6
|
+
has(cid: CID): Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A block store that reads locally first, with optional remote fallback.
|
|
10
|
+
* On get: local hit → return; local miss + remote → fetch, write-back, return.
|
|
11
|
+
* put/has always operate on local only.
|
|
12
|
+
*/
|
|
13
|
+
export declare class LocalFirstBlockStore implements BlockStore {
|
|
14
|
+
private local;
|
|
15
|
+
private remote?;
|
|
16
|
+
constructor(local: BlockStore, remote?: Pick<BlockStore, 'get'>);
|
|
17
|
+
get(cid: CID): Promise<Uint8Array>;
|
|
18
|
+
put(cid: CID, bytes: Uint8Array): Promise<void>;
|
|
19
|
+
has(cid: CID): Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blockstore/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,yDAAyD;AACzD,MAAM,WAAW,UAAU;IAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAClC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC/B;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,UAAU;IAErD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM,CAAC;gBADP,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;IAGnC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;IAQxC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAG/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockstore.d.ts","sourceRoot":"","sources":["../src/blockstore.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "./chunk-PHITDXZT.min.js";
|
|
2
|
+
|
|
3
|
+
// src/blockstore/index.ts
|
|
4
|
+
var LocalFirstBlockStore = class {
|
|
5
|
+
constructor(local, remote) {
|
|
6
|
+
this.local = local;
|
|
7
|
+
this.remote = remote;
|
|
8
|
+
}
|
|
9
|
+
async get(cid) {
|
|
10
|
+
if (await this.local.has(cid)) return this.local.get(cid);
|
|
11
|
+
if (!this.remote) throw new Error(`Block not found: ${cid}`);
|
|
12
|
+
const bytes = await this.remote.get(cid);
|
|
13
|
+
await this.local.put(cid, bytes);
|
|
14
|
+
return bytes;
|
|
15
|
+
}
|
|
16
|
+
put(cid, bytes) {
|
|
17
|
+
return this.local.put(cid, bytes);
|
|
18
|
+
}
|
|
19
|
+
has(cid) {
|
|
20
|
+
return this.local.has(cid);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
LocalFirstBlockStore
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=blockstore.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockstore/index.ts"],"sourcesContent":["import type { CID } from 'multiformats/cid'\n\n/** Minimal async block store interface — get/put/has. */\nexport interface BlockStore {\n\tget(cid: CID): Promise<Uint8Array>\n\tput(cid: CID, bytes: Uint8Array): Promise<void>\n\thas(cid: CID): Promise<boolean>\n}\n\n/**\n * A block store that reads locally first, with optional remote fallback.\n * On get: local hit → return; local miss + remote → fetch, write-back, return.\n * put/has always operate on local only.\n */\nexport class LocalFirstBlockStore implements BlockStore {\n\tconstructor(\n\t\tprivate local: BlockStore,\n\t\tprivate remote?: Pick<BlockStore, 'get'>,\n\t) {}\n\n\tasync get(cid: CID): Promise<Uint8Array> {\n\t\tif (await this.local.has(cid)) return this.local.get(cid)\n\t\tif (!this.remote) throw new Error(`Block not found: ${cid}`)\n\t\tconst bytes = await this.remote.get(cid)\n\t\tawait this.local.put(cid, bytes)\n\t\treturn bytes\n\t}\n\n\tput(cid: CID, bytes: Uint8Array): Promise<void> {\n\t\treturn this.local.put(cid, bytes)\n\t}\n\n\thas(cid: CID): Promise<boolean> {\n\t\treturn this.local.has(cid)\n\t}\n}\n"],"mappings":";;;AAcO,IAAM,uBAAN,MAAiD;AAAA,EACvD,YACS,OACA,QACP;AAFO;AACA;AAAA,EACN;AAAA,EAEH,MAAM,IAAI,KAA+B;AACxC,QAAI,MAAM,KAAK,MAAM,IAAI,GAAG,EAAG,QAAO,KAAK,MAAM,IAAI,GAAG;AACxD,QAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,oBAAoB,GAAG,EAAE;AAC3D,UAAM,QAAQ,MAAM,KAAK,OAAO,IAAI,GAAG;AACvC,UAAM,KAAK,MAAM,IAAI,KAAK,KAAK;AAC/B,WAAO;AAAA,EACR;AAAA,EAEA,IAAI,KAAU,OAAkC;AAC/C,WAAO,KAAK,MAAM,IAAI,KAAK,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,KAA4B;AAC/B,WAAO,KAAK,MAAM,IAAI,GAAG;AAAA,EAC1B;AACD;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
CID,
|
|
3
3
|
areCidsEqual,
|
|
4
|
-
|
|
4
|
+
decode,
|
|
5
5
|
g
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XWBLRTV5.min.js";
|
|
7
7
|
|
|
8
8
|
// src/ipfs/fetch-snapshot-chain.ts
|
|
9
9
|
var { WARN, LOG, DEBUG, VERBOSE, ERROR } = g.setup(g.INFO);
|
|
@@ -83,4 +83,4 @@ function createMemoryBlockStore() {
|
|
|
83
83
|
export {
|
|
84
84
|
fetchSnapshotChainUntil
|
|
85
85
|
};
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
86
|
+
//# sourceMappingURL=chunk-CWVWWFE3.min.js.map
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
rollingMapper,
|
|
17
17
|
sortApplogsByTs,
|
|
18
18
|
wrapper_default
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-XWBLRTV5.min.js";
|
|
20
20
|
import {
|
|
21
21
|
action,
|
|
22
22
|
autorun,
|
|
@@ -507,4 +507,4 @@ export {
|
|
|
507
507
|
withTimeout,
|
|
508
508
|
throwOnTimeout
|
|
509
509
|
};
|
|
510
|
-
//# sourceMappingURL=chunk-
|
|
510
|
+
//# sourceMappingURL=chunk-LHD7NNK6.min.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
cyrb53hash,
|
|
3
3
|
ensureTsPvAndFinalizeApplog,
|
|
4
4
|
g
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-XWBLRTV5.min.js";
|
|
6
6
|
|
|
7
7
|
// src/pubsub/pub-pull.ts
|
|
8
8
|
var { WARN, LOG, DEBUG, VERBOSE, ERROR } = g.setup(g.INFO);
|
|
@@ -37,4 +37,4 @@ export {
|
|
|
37
37
|
isSubscription,
|
|
38
38
|
agentToShortHash
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
40
|
+
//# sourceMappingURL=chunk-MCMSRRF7.min.js.map
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
unchunkApplogsBlock
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NKGFXL72.min.js";
|
|
4
4
|
import {
|
|
5
|
-
|
|
5
|
+
CID,
|
|
6
6
|
areCidsEqual,
|
|
7
|
-
|
|
7
|
+
decode,
|
|
8
8
|
g,
|
|
9
9
|
removeDuplicateAppLogs
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-XWBLRTV5.min.js";
|
|
11
11
|
|
|
12
12
|
// src/retrieve/update-thread.ts
|
|
13
13
|
var { WARN, LOG, DEBUG, VERBOSE, ERROR } = g.setup(g.INFO);
|
|
14
|
+
function withBlockCache(source, store) {
|
|
15
|
+
return {
|
|
16
|
+
get: (cid) => store.get(cid),
|
|
17
|
+
async *getDag(cid) {
|
|
18
|
+
for await (const block of source.getDag(cid)) {
|
|
19
|
+
await store.put(block.cid, block.bytes);
|
|
20
|
+
yield block;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
14
25
|
function createMemoryBlockStore() {
|
|
15
26
|
const blocks = /* @__PURE__ */ new Map();
|
|
16
27
|
return {
|
|
@@ -56,7 +67,7 @@ async function updateThreadFromSnapshot(thread, cid, retriever, options) {
|
|
|
56
67
|
break;
|
|
57
68
|
}
|
|
58
69
|
DEBUG("[updateThreadFromSnapshot] fetching root block", cidStr);
|
|
59
|
-
const rootBytes = await retriever.
|
|
70
|
+
const rootBytes = await retriever.get(currentCID);
|
|
60
71
|
blockStore.put(currentCID, rootBytes);
|
|
61
72
|
const root = decode(rootBytes);
|
|
62
73
|
if (typeof root.prevCounter === "number") {
|
|
@@ -127,6 +138,7 @@ async function updateThreadFromSnapshot(thread, cid, retriever, options) {
|
|
|
127
138
|
}
|
|
128
139
|
|
|
129
140
|
export {
|
|
141
|
+
withBlockCache,
|
|
130
142
|
updateThreadFromSnapshot
|
|
131
143
|
};
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
144
|
+
//# sourceMappingURL=chunk-N2LOFNFT.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/retrieve/update-thread.ts"],"sourcesContent":["import { CarReader } from '@ipld/car'\nimport * as dagJson from '@ipld/dag-json'\nimport { Logger } from 'besonders-logger'\nimport { CID } from 'multiformats/cid'\nimport type { Applog } from '../applog/datom-types'\nimport { removeDuplicateAppLogs } from '../applog/applog-utils'\nimport type { SnapRootBlock, SnapBlockLogsOrChunks } from '../pubsub/pubsub-types'\nimport { unchunkApplogsBlock } from '../pubsub/snap-push'\nimport { areCidsEqual } from '../ipfs/ipfs-utils'\nimport type { WriteableThread } from '../thread/writeable'\nimport type { BlockStore } from '../blockstore/index'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO) // eslint-disable-line no-unused-vars\n\n/**\n * Block retrieval abstraction - fetch or get blocks.\n * Implemented by gateway retriever or local blockstore.\n */\nexport interface BlockRetriever {\n\t/** Get single block by CID */\n\tget(cid: CID): Promise<Uint8Array>\n\t/** Get all blocks in DAG rooted at CID (for applogs/info sub-DAGs) */\n\tgetDag(cid: CID): AsyncIterable<{ cid: CID; bytes: Uint8Array }>\n}\n\n/**\n * Wrap a BlockRetriever so fetched blocks flow through a BlockStore.\n * - get: delegates to store.get() (which handles local-first / remote fallback)\n * - getDag: streams from source, puts each block into store\n */\nexport function withBlockCache(\n\tsource: BlockRetriever,\n\tstore: BlockStore,\n): BlockRetriever {\n\treturn {\n\t\tget: (cid) => store.get(cid),\n\t\tasync *getDag(cid) {\n\t\t\tfor await (const block of source.getDag(cid)) {\n\t\t\t\tawait store.put(block.cid, block.bytes)\n\t\t\t\tyield block\n\t\t\t}\n\t\t},\n\t}\n}\n\n/**\n * Options for updateThreadFromSnapshot\n */\nexport interface UpdateOptions {\n\t/** CID of last included snapshot - exclude this and older snapshots */\n\texcludeSnapshotCID?: CID\n\t/** Stop when we reach this counter (walking backwards) */\n\tstopAtCounter?: number\n\t/** Maximum number of snapshots to traverse (default: 100) */\n\tmaxDepth?: number\n}\n\n/**\n * Result from updateThreadFromSnapshot\n */\nexport interface UpdateResult {\n\t/** Root CID that was fetched */\n\tcid: CID\n\t/** All applogs decoded from the chain */\n\tapplogs: Applog[]\n\t/** Count of applogs actually inserted (not duplicates) */\n\tinsertedCount: number\n\t/** Number of snapshots traversed */\n\tsnapshotCount: number\n\t/** Counter range encountered (min/max) */\n\tcounterRange?: { minCounter: number; maxCounter: number }\n}\n\n/**\n * Simple in-memory block store used during snapshot chain fetch.\n */\ninterface MemoryBlockStore {\n\tget(cid: CID): Uint8Array | undefined\n\tput(cid: CID, bytes: Uint8Array): void\n}\n\nfunction createMemoryBlockStore(): MemoryBlockStore {\n\tconst blocks = new Map<string, Uint8Array>()\n\treturn {\n\t\tget(cid: CID) {\n\t\t\treturn blocks.get(cid.toV1().toString())\n\t\t},\n\t\tput(cid: CID, bytes: Uint8Array) {\n\t\t\tblocks.set(cid.toV1().toString(), bytes)\n\t\t},\n\t}\n}\n\nasync function getDecodedBlock<T>(blockStore: MemoryBlockStore, cid: CID): Promise<T | null> {\n\tconst bytes = blockStore.get(cid)\n\tif (!bytes) return null\n\treturn dagJson.decode(bytes) as T\n}\n\n/**\n * Fetch snapshot chain from CID using a BlockRetriever, decode applogs, insert into thread.\n * Stops before excludeSnapshotCID if provided (incremental update).\n *\n * @param thread - WriteableThread to insert applogs into\n * @param cid - Root CID of the snapshot to start from\n * @param retriever - BlockRetriever for fetching blocks\n * @param options - Optional configuration\n * @returns UpdateResult with applogs and counts\n */\nexport async function updateThreadFromSnapshot(\n\tthread: WriteableThread,\n\tcid: CID,\n\tretriever: BlockRetriever,\n\toptions?: UpdateOptions\n): Promise<UpdateResult> {\n\tconst { excludeSnapshotCID, stopAtCounter, maxDepth = 100 } = options ?? {}\n\n\tDEBUG('[updateThreadFromSnapshot] starting from', cid.toString(), {\n\t\texcludeSnapshotCID: excludeSnapshotCID?.toString(),\n\t\tstopAtCounter,\n\t\tmaxDepth,\n\t})\n\n\tconst blockStore = createMemoryBlockStore()\n\tconst visited = new Set<string>()\n\tlet currentCID: CID | undefined = cid\n\tlet snapshotCount = 0\n\tconst allApplogs: Applog[] = []\n\tlet minCounter = Infinity\n\tlet maxCounter = -Infinity\n\tlet lastCounter: number | undefined\n\n\twhile (currentCID && snapshotCount < maxDepth) {\n\t\tconst cidStr = currentCID.toString()\n\n\t\t// Loop detection\n\t\tif (visited.has(cidStr)) {\n\t\t\tthrow ERROR('[updateThreadFromSnapshot] snapshot chain has a loop', {\n\t\t\t\tcurrentCID: cidStr,\n\t\t\t\tvisited: [...visited],\n\t\t\t})\n\t\t}\n\t\tvisited.add(cidStr)\n\n\t\t// Check stop condition BEFORE fetching content\n\t\tif (excludeSnapshotCID && areCidsEqual(currentCID, excludeSnapshotCID)) {\n\t\t\tDEBUG('[updateThreadFromSnapshot] reached excludeSnapshotCID, stopping', excludeSnapshotCID.toString())\n\t\t\tbreak\n\t\t}\n\n\t\t// 1. Fetch root block\n\t\tDEBUG('[updateThreadFromSnapshot] fetching root block', cidStr)\n\t\tconst rootBytes = await retriever.get(currentCID)\n\t\tblockStore.put(currentCID, rootBytes)\n\n\t\t// Parse root to get applogs, info, prev CIDs\n\t\tconst root = dagJson.decode(rootBytes) as SnapRootBlock\n\n\t\t// Track counter range and validate sequentiality\n\t\tif (typeof root.prevCounter === 'number') {\n\t\t\tminCounter = Math.min(minCounter, root.prevCounter)\n\t\t\tmaxCounter = Math.max(maxCounter, root.prevCounter)\n\n\t\t\t// Validate sequentiality (walking backwards, counter should decrease)\n\t\t\tif (lastCounter !== undefined && root.prevCounter !== lastCounter - 1) {\n\t\t\t\tWARN('[updateThreadFromSnapshot] counter gap detected', {\n\t\t\t\t\texpected: lastCounter - 1,\n\t\t\t\t\tgot: root.prevCounter,\n\t\t\t\t})\n\t\t\t}\n\t\t\tlastCounter = root.prevCounter\n\t\t}\n\n\t\t// Stop condition based on counter\n\t\tif (stopAtCounter !== undefined && typeof root.prevCounter === 'number' && root.prevCounter <= stopAtCounter) {\n\t\t\tDEBUG('[updateThreadFromSnapshot] reached stopAtCounter', { stopAtCounter, prevCounter: root.prevCounter })\n\t\t\tbreak\n\t\t}\n\n\t\t// 2. Fetch applogs DAG\n\t\tDEBUG('[updateThreadFromSnapshot] fetching applogs', root.applogs.toString())\n\t\tfor await (const { cid: blockCid, bytes } of retriever.getDag(root.applogs)) {\n\t\t\tblockStore.put(blockCid, bytes)\n\t\t}\n\n\t\t// 3. Fetch info DAG\n\t\tDEBUG('[updateThreadFromSnapshot] fetching info', root.info.toString())\n\t\tfor await (const { cid: blockCid, bytes } of retriever.getDag(root.info)) {\n\t\t\tblockStore.put(blockCid, bytes)\n\t\t}\n\n\t\t// Decode applogs from this snapshot\n\t\tconst applogsBlock = await getDecodedBlock<SnapBlockLogsOrChunks>(blockStore, root.applogs)\n\t\tif (!applogsBlock) {\n\t\t\tthrow ERROR('[updateThreadFromSnapshot] applogs block not found', { cid: root.applogs.toString() })\n\t\t}\n\n\t\t// Use the unchunk helper which handles both chunked and non-chunked formats\n\t\tconst applogCIDs = await unchunkApplogsBlock(applogsBlock, {\n\t\t\tget: async (cid: CID) => blockStore.get(cid)!,\n\t\t})\n\n\t\t// Resolve each applog CID to actual applog data\n\t\tfor (const applogCID of applogCIDs) {\n\t\t\tconst applog = await getDecodedBlock<Applog>(blockStore, applogCID)\n\t\t\tif (!applog) {\n\t\t\t\tWARN('[updateThreadFromSnapshot] applog not found:', applogCID.toString())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Normalize pv field if it's a CID instance\n\t\t\tif ((applog.pv as any) instanceof CID) {\n\t\t\t\tapplog.pv = (applog.pv as any as CID).toV1().toString()\n\t\t\t}\n\t\t\tallApplogs.push({\n\t\t\t\t...applog,\n\t\t\t\tcid: applogCID.toV1().toString(),\n\t\t\t})\n\t\t}\n\n\t\tsnapshotCount++\n\t\tcurrentCID = root.prev // Move to previous snapshot\n\t}\n\n\tDEBUG('[updateThreadFromSnapshot] fetched', {\n\t\tsnapshotCount,\n\t\tapplogCount: allApplogs.length,\n\t\trootCID: cid.toString(),\n\t})\n\n\t// Deduplicate applogs (in case of overlapping snapshots)\n\tconst deduplicated = removeDuplicateAppLogs(allApplogs, 'cleanup')\n\n\t// Insert into thread\n\tconst inserted = thread.insertMissing(deduplicated, false)\n\n\tDEBUG('[updateThreadFromSnapshot] inserted', {\n\t\tinsertedCount: inserted.length,\n\t\tduplicateCount: deduplicated.length - inserted.length,\n\t})\n\n\treturn {\n\t\tcid,\n\t\tapplogs: deduplicated,\n\t\tinsertedCount: inserted.length,\n\t\tsnapshotCount,\n\t\tcounterRange: minCounter !== Infinity ? { minCounter, maxCounter } : undefined,\n\t}\n}\n"],"mappings":"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","names":["cid"]}
|
|
@@ -3,27 +3,29 @@ import {
|
|
|
3
3
|
} from "./chunk-QPGEBDMJ.min.js";
|
|
4
4
|
import {
|
|
5
5
|
lastWriteWins
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-LHD7NNK6.min.js";
|
|
7
7
|
import {
|
|
8
|
-
CID,
|
|
9
|
-
CID2,
|
|
10
|
-
Token,
|
|
11
|
-
Type,
|
|
8
|
+
CID as CID2,
|
|
12
9
|
areCidsEqual,
|
|
13
|
-
decode,
|
|
14
|
-
decode2,
|
|
15
|
-
decode3,
|
|
16
|
-
encode,
|
|
10
|
+
decode as decode3,
|
|
17
11
|
encodeBlockOriginal,
|
|
18
12
|
ensureTsPvAndFinalizeApplog,
|
|
19
13
|
g,
|
|
20
14
|
getLogsFromThread,
|
|
21
|
-
makeCborEncoders,
|
|
22
15
|
prepareForPub,
|
|
23
16
|
rollingFilter,
|
|
24
17
|
src_exports,
|
|
25
18
|
wrapper_default
|
|
26
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-XWBLRTV5.min.js";
|
|
20
|
+
import {
|
|
21
|
+
CID,
|
|
22
|
+
Token,
|
|
23
|
+
Type,
|
|
24
|
+
decode,
|
|
25
|
+
decode2,
|
|
26
|
+
encode,
|
|
27
|
+
makeCborEncoders
|
|
28
|
+
} from "./chunk-QO2KMGDN.min.js";
|
|
27
29
|
import {
|
|
28
30
|
__commonJS,
|
|
29
31
|
__toESM
|
|
@@ -1601,4 +1603,4 @@ export {
|
|
|
1601
1603
|
collectDagBlocks,
|
|
1602
1604
|
streamReaderToIterable
|
|
1603
1605
|
};
|
|
1604
|
-
//# sourceMappingURL=chunk-
|
|
1606
|
+
//# sourceMappingURL=chunk-NKGFXL72.min.js.map
|