@wovin/core 0.0.0-ciao-mobx-955482e8
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/LICENSE +661 -0
- package/README.md +3 -0
- package/dist/applog/applog-helpers.d.ts +47 -0
- package/dist/applog/applog-helpers.d.ts.map +1 -0
- package/dist/applog/applog-utils.d.ts +57 -0
- package/dist/applog/applog-utils.d.ts.map +1 -0
- package/dist/applog/datom-types.d.ts +128 -0
- package/dist/applog/datom-types.d.ts.map +1 -0
- package/dist/applog.d.ts +4 -0
- package/dist/applog.d.ts.map +1 -0
- package/dist/applog.js +101 -0
- package/dist/applog.js.map +1 -0
- 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.js +24 -0
- package/dist/blockstore.js.map +1 -0
- package/dist/chunk-6MQKRL6W.js +86 -0
- package/dist/chunk-6MQKRL6W.js.map +1 -0
- package/dist/chunk-7MW34UEO.js +40 -0
- package/dist/chunk-7MW34UEO.js.map +1 -0
- package/dist/chunk-7Z5YDQKK.js +1 -0
- package/dist/chunk-7Z5YDQKK.js.map +1 -0
- package/dist/chunk-CY4NLISM.js +144 -0
- package/dist/chunk-CY4NLISM.js.map +1 -0
- package/dist/chunk-E46VTKTZ.js +1 -0
- package/dist/chunk-E46VTKTZ.js.map +1 -0
- package/dist/chunk-O43W7UW6.js +434 -0
- package/dist/chunk-O43W7UW6.js.map +1 -0
- package/dist/chunk-XIQSYEV3.js +1604 -0
- package/dist/chunk-XIQSYEV3.js.map +1 -0
- package/dist/chunk-XVGW4QC3.js +55 -0
- package/dist/chunk-XVGW4QC3.js.map +1 -0
- package/dist/chunk-YDAKBU6Q.js +9 -0
- package/dist/chunk-YDAKBU6Q.js.map +1 -0
- package/dist/chunk-ZAADLBSB.js +36 -0
- package/dist/chunk-ZAADLBSB.js.map +1 -0
- package/dist/chunk-ZXCJRYD7.js +883 -0
- package/dist/chunk-ZXCJRYD7.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +354 -0
- package/dist/index.js.map +1 -0
- package/dist/ipfs/car.d.ts +59 -0
- package/dist/ipfs/car.d.ts.map +1 -0
- package/dist/ipfs/fetch-snapshot-chain.d.ts +32 -0
- package/dist/ipfs/fetch-snapshot-chain.d.ts.map +1 -0
- package/dist/ipfs/ipfs-utils.d.ts +35 -0
- package/dist/ipfs/ipfs-utils.d.ts.map +1 -0
- package/dist/ipfs.d.ts +4 -0
- package/dist/ipfs.d.ts.map +1 -0
- package/dist/ipfs.js +60 -0
- package/dist/ipfs.js.map +1 -0
- 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.js +64 -0
- package/dist/ipns.js.map +1 -0
- package/dist/pubsub/connector.d.ts +9 -0
- package/dist/pubsub/connector.d.ts.map +1 -0
- package/dist/pubsub/pub-pull.d.ts +14 -0
- package/dist/pubsub/pub-pull.d.ts.map +1 -0
- package/dist/pubsub/pubsub-types.d.ts +72 -0
- package/dist/pubsub/pubsub-types.d.ts.map +1 -0
- package/dist/pubsub/snap-push.d.ts +41 -0
- package/dist/pubsub/snap-push.d.ts.map +1 -0
- package/dist/pubsub/ucan-example.d.ts +3 -0
- package/dist/pubsub/ucan-example.d.ts.map +1 -0
- package/dist/pubsub/ucan.d.ts +16 -0
- package/dist/pubsub/ucan.d.ts.map +1 -0
- package/dist/pubsub.d.ts +5 -0
- package/dist/pubsub.d.ts.map +1 -0
- package/dist/pubsub.js +31 -0
- package/dist/pubsub.js.map +1 -0
- package/dist/query/basic.d.ts +105 -0
- package/dist/query/basic.d.ts.map +1 -0
- package/dist/query/divergences.d.ts +12 -0
- package/dist/query/divergences.d.ts.map +1 -0
- package/dist/query/matchers.d.ts +4 -0
- package/dist/query/matchers.d.ts.map +1 -0
- package/dist/query/memoized.d.ts +66 -0
- package/dist/query/memoized.d.ts.map +1 -0
- package/dist/query/query-steps.d.ts +4 -0
- package/dist/query/query-steps.d.ts.map +1 -0
- package/dist/query/situations.d.ts +80 -0
- package/dist/query/situations.d.ts.map +1 -0
- package/dist/query/subscribable.d.ts +102 -0
- package/dist/query/subscribable.d.ts.map +1 -0
- package/dist/query/types.d.ts +70 -0
- package/dist/query/types.d.ts.map +1 -0
- package/dist/query.d.ts +8 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +108 -0
- package/dist/query.js.map +1 -0
- package/dist/retrieve/index.d.ts +2 -0
- package/dist/retrieve/index.d.ts.map +1 -0
- package/dist/retrieve/update-thread.d.ts +64 -0
- package/dist/retrieve/update-thread.d.ts.map +1 -0
- package/dist/retrieve.d.ts +2 -0
- package/dist/retrieve.d.ts.map +1 -0
- package/dist/retrieve.js +14 -0
- package/dist/retrieve.js.map +1 -0
- package/dist/thread/basic.d.ts +60 -0
- package/dist/thread/basic.d.ts.map +1 -0
- package/dist/thread/filters.d.ts +47 -0
- package/dist/thread/filters.d.ts.map +1 -0
- package/dist/thread/mapped.d.ts +31 -0
- package/dist/thread/mapped.d.ts.map +1 -0
- package/dist/thread/utils.d.ts +23 -0
- package/dist/thread/utils.d.ts.map +1 -0
- package/dist/thread/writeable.d.ts +41 -0
- package/dist/thread/writeable.d.ts.map +1 -0
- package/dist/thread.d.ts +6 -0
- package/dist/thread.d.ts.map +1 -0
- package/dist/thread.js +54 -0
- package/dist/thread.js.map +1 -0
- package/dist/types/typescript-utils.d.ts +34 -0
- package/dist/types/typescript-utils.d.ts.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +26 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/debug-name.d.ts +13 -0
- package/dist/utils/debug-name.d.ts.map +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +9 -0
- package/dist/utils.js.map +1 -0
- package/package.json +110 -0
- package/src/applog/applog-helpers.ts +150 -0
- package/src/applog/applog-utils.ts +398 -0
- package/src/applog/datom-types.ts +148 -0
- package/src/applog.ts +3 -0
- package/src/blockstore/index.ts +36 -0
- package/src/blockstore.ts +1 -0
- package/src/index.ts +8 -0
- package/src/ipfs/car.ts +291 -0
- package/src/ipfs/fetch-snapshot-chain.ts +135 -0
- package/src/ipfs/ipfs-utils.ts +132 -0
- package/src/ipfs.ts +3 -0
- package/src/ipns/ipns-record.ts +115 -0
- package/src/ipns.ts +1 -0
- package/src/pubsub/UCAN Specs Overview.md +217 -0
- package/src/pubsub/connector.ts +9 -0
- package/src/pubsub/pub-pull.ts +31 -0
- package/src/pubsub/pubsub-types.ts +90 -0
- package/src/pubsub/snap-push.ts +277 -0
- package/src/pubsub/ucan-example.ts +61 -0
- package/src/pubsub/ucan.ts +56 -0
- package/src/pubsub.ts +4 -0
- package/src/query/basic.ts +1061 -0
- package/src/query/divergences.ts +50 -0
- package/src/query/matchers.ts +8 -0
- package/src/query/memoized.test.ts +151 -0
- package/src/query/memoized.ts +180 -0
- package/src/query/query-steps.ts +4 -0
- package/src/query/query.test.ts +536 -0
- package/src/query/situations.ts +261 -0
- package/src/query/subscribable.test.ts +245 -0
- package/src/query/subscribable.ts +225 -0
- package/src/query/types.ts +155 -0
- package/src/query.ts +7 -0
- package/src/retrieve/index.ts +1 -0
- package/src/retrieve/update-thread.ts +248 -0
- package/src/retrieve.ts +1 -0
- package/src/test/perf/query.1m.perf.test.ts +94 -0
- package/src/test/perf/query.perf.test.ts +389 -0
- package/src/test/perf/query.realdata.perf.test.ts +175 -0
- package/src/thread/basic.ts +209 -0
- package/src/thread/filters.ts +234 -0
- package/src/thread/mapped.ts +166 -0
- package/src/thread/utils.ts +146 -0
- package/src/thread/writeable.ts +163 -0
- package/src/thread.ts +5 -0
- package/src/types/typescript-utils.ts +64 -0
- package/src/types.ts +1 -0
- package/src/utils/debug-name.ts +54 -0
- package/src/utils.ts +4 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MappedThread, Thread } from '../thread.ts';
|
|
2
|
+
import { PartialBy } from '../types/typescript-utils.ts';
|
|
3
|
+
import { ApplogForInsert, ApplogForInsertOptionalAgent, ApplogNoCid, AgentHash, CidString, Timestamp } from './datom-types.ts';
|
|
4
|
+
export declare function ensureTsPvAndFinalizeApplogs(appLogsToInsert: ApplogForInsert[], threadForPv: Thread): Readonly<{
|
|
5
|
+
cid: CidString;
|
|
6
|
+
at: import("./datom-types.ts").Attribute;
|
|
7
|
+
pv: CidString | null;
|
|
8
|
+
ts: Timestamp;
|
|
9
|
+
ag: AgentHash;
|
|
10
|
+
en: import("./datom-types.ts").EntityID;
|
|
11
|
+
vl: import("./datom-types.ts").ApplogValue;
|
|
12
|
+
}>[];
|
|
13
|
+
export declare function ensureTsPvAndFinalizeApplog(applogToInsert: ApplogForInsert, threadForPv: Thread): Readonly<{
|
|
14
|
+
cid: CidString;
|
|
15
|
+
at: import("./datom-types.ts").Attribute;
|
|
16
|
+
pv: CidString | null;
|
|
17
|
+
ts: Timestamp;
|
|
18
|
+
ag: AgentHash;
|
|
19
|
+
en: import("./datom-types.ts").EntityID;
|
|
20
|
+
vl: import("./datom-types.ts").ApplogValue;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function finalizeApplogForInsert(log: ApplogForInsert, { ts, threadForPv }?: {
|
|
23
|
+
ts?: string;
|
|
24
|
+
threadForPv?: Thread;
|
|
25
|
+
}): Readonly<{
|
|
26
|
+
cid: CidString;
|
|
27
|
+
at: import("./datom-types.ts").Attribute;
|
|
28
|
+
pv: CidString | null;
|
|
29
|
+
ts: Timestamp;
|
|
30
|
+
ag: AgentHash;
|
|
31
|
+
en: import("./datom-types.ts").EntityID;
|
|
32
|
+
vl: import("./datom-types.ts").ApplogValue;
|
|
33
|
+
}>;
|
|
34
|
+
export declare function hasAg(log: ApplogForInsertOptionalAgent): log is ApplogForInsert;
|
|
35
|
+
export declare function hasTs(log: ApplogForInsert): log is Omit<ApplogForInsert, 'ts'> & {
|
|
36
|
+
ts: Timestamp;
|
|
37
|
+
};
|
|
38
|
+
export declare function hasPv(log: ApplogForInsert): log is ApplogForInsert & {
|
|
39
|
+
pv: string;
|
|
40
|
+
};
|
|
41
|
+
export declare function withTs(log: ApplogForInsert, ts: Timestamp): Omit<ApplogForInsert, "ts"> & {
|
|
42
|
+
ts: Timestamp;
|
|
43
|
+
};
|
|
44
|
+
export declare function withAg(log: ApplogForInsertOptionalAgent, ag: AgentHash): ApplogForInsert;
|
|
45
|
+
export declare function withPvFrom(log: PartialBy<ApplogNoCid, 'pv'>, thread: Thread | null): ApplogNoCid;
|
|
46
|
+
export declare function joinThreads(threads: ReadonlyArray<Thread>): MappedThread;
|
|
47
|
+
//# sourceMappingURL=applog-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applog-helpers.d.ts","sourceRoot":"","sources":["../../src/applog/applog-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkC,YAAY,EAAiB,MAAM,EAAqB,MAAM,cAAc,CAAA;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAEN,eAAe,EACf,4BAA4B,EAC5B,WAAW,EACX,SAAS,EACT,SAAS,EAGT,SAAS,EACT,MAAM,kBAAkB,CAAA;AAIzB,wBAAgB,4BAA4B,CAAC,eAAe,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,MAAM;;;;;;;;KAenG;AACD,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM;;;;;;;;GAE/F;AAED,wBAAgB,uBAAuB,CACtC,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,EAAE,WAAW,EAAE,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAuB;;;;;;;;GAkB/E;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,4BAA4B,GAAG,GAAG,IAAI,eAAe,CAE/E;AACD,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,EAAE,SAAS,CAAA;CAAE,CAElG;AACD,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,IAAI,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAEnF;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS;QAP8B,SAAS;EAShG;AACD,wBAAgB,MAAM,CAAC,GAAG,EAAE,4BAA4B,EAAE,EAAE,EAAE,SAAS,mBAEtE;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAmB,IAAI,eA8BlG;AACD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,gBAwCzD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Applog, ApplogValue, DatalogQueryPattern, DatalogQueryResultEntry, ResultContext, SearchContext, ValueOrMatcher } from './datom-types.ts';
|
|
2
|
+
export declare const isoDateStrCompare: (strA: string, strB: string, dir?: "asc" | "desc") => number;
|
|
3
|
+
export declare const objEqualByKeys: (keys: string[], objA: object, objB: object) => boolean;
|
|
4
|
+
export declare const compareApplogsByTs: (logA: Applog, logB: Applog, dir?: "asc" | "desc") => number;
|
|
5
|
+
export declare const compareApplogsByEnAt: (objA: object, objB: object) => boolean;
|
|
6
|
+
/** Sort by TS (modifies the array, but also returns for ease of use) */
|
|
7
|
+
export declare function sortApplogsByTs(appLogArray: Applog[], dir?: 'asc' | 'desc'): Applog[];
|
|
8
|
+
export declare const isTsBefore: (log: Applog, logToCompare: Applog) => boolean;
|
|
9
|
+
export declare const uniqueEnFromAppLogs: (appLogArray: Applog[]) => string[];
|
|
10
|
+
export declare const areApplogsEqual: (logA: Applog, logB: Applog) => boolean;
|
|
11
|
+
export type RemoveDuplicateAppLogsMode = 'safety' | 'cleanup';
|
|
12
|
+
/**
|
|
13
|
+
* Deduplicate applogs by CID.
|
|
14
|
+
* - safety: fast duplicate check; returns original array if no duplicates found.
|
|
15
|
+
* - cleanup: optimized for merged arrays with likely duplicates.
|
|
16
|
+
*/
|
|
17
|
+
export declare const removeDuplicateAppLogs: (appLogArray: Applog[], mode?: RemoveDuplicateAppLogsMode) => Applog[];
|
|
18
|
+
export declare const getHashID: (stringifiable: any, lngth?: number) => string;
|
|
19
|
+
export declare function isVariable(x: any): x is string;
|
|
20
|
+
export declare function variableNameWithoutQuestionmark(str: string): string;
|
|
21
|
+
export declare function isStaticPattern(x: any): x is ApplogValue;
|
|
22
|
+
export declare function resolveOrRemoveVariables(pattern: DatalogQueryPattern, candidate: SearchContext): readonly [Partial<import("./datom-types.ts").WithMatchers<Applog>>, Partial<{
|
|
23
|
+
cid: string;
|
|
24
|
+
pv: string;
|
|
25
|
+
ts: import("./datom-types.ts").Timestamp;
|
|
26
|
+
ag: string;
|
|
27
|
+
en: import("./datom-types.ts").EntityID;
|
|
28
|
+
at: import("./datom-types.ts").Attribute;
|
|
29
|
+
vl: string;
|
|
30
|
+
}>];
|
|
31
|
+
export declare function matchPartStatic(field: keyof Applog, patternPart: ValueOrMatcher<ApplogValue>, atomPart: ApplogValue): boolean;
|
|
32
|
+
export declare function matchPart(patternPart: ValueOrMatcher<ApplogValue>, atomPart: ApplogValue, context: SearchContext): ResultContext;
|
|
33
|
+
/**
|
|
34
|
+
* Check if pattern matches triple with context substitutions
|
|
35
|
+
*/
|
|
36
|
+
export declare function matchPattern(pattern: DatalogQueryPattern, applog: Applog, context: SearchContext): ResultContext;
|
|
37
|
+
export declare function actualize<SELECT extends string>(context: ResultContext, find: readonly SELECT[]): DatalogQueryResultEntry<SELECT>;
|
|
38
|
+
export declare const arrStats: {
|
|
39
|
+
max: (array: number[]) => number;
|
|
40
|
+
min: (array: number[]) => number;
|
|
41
|
+
range: (array: number[]) => number;
|
|
42
|
+
midrange: (array: number[]) => number;
|
|
43
|
+
sum: (array: number[]) => number;
|
|
44
|
+
mean: (array: number[]) => number;
|
|
45
|
+
average: (array: number[]) => number;
|
|
46
|
+
median: (array: number[]) => number;
|
|
47
|
+
modes: (array: number[]) => any[];
|
|
48
|
+
variance: (array: number[]) => number;
|
|
49
|
+
standardDeviation: (array: number[]) => number;
|
|
50
|
+
meanAbsoluteDeviation: (array: number[]) => number;
|
|
51
|
+
zScores: (array: number[]) => number[];
|
|
52
|
+
};
|
|
53
|
+
export declare const tsNearlySame: (timeA: string, timeB: string) => boolean;
|
|
54
|
+
export declare const cyrb53hash: (str: string, seed: number, strLength: number) => string;
|
|
55
|
+
export declare function arraysContainSameElements(arr1: any, arr2: any): boolean;
|
|
56
|
+
export declare function dateNowIso(): string;
|
|
57
|
+
//# sourceMappingURL=applog-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applog-utils.d.ts","sourceRoot":"","sources":["../../src/applog/applog-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Static, TSchema } from '@sinclair/typebox';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import type { PartialBy, Tagged } from '../types/typescript-utils.ts';
|
|
4
|
+
export declare const Nullable: <T extends TSchema>(schema: T) => import("@sinclair/typebox").TUnion<[T, import("@sinclair/typebox").TNull]>;
|
|
5
|
+
export declare const EntityID_LENGTH = 7;
|
|
6
|
+
export declare const EntityID: import("@sinclair/typebox").TString;
|
|
7
|
+
export type EntityID = Static<typeof EntityID>;
|
|
8
|
+
export type AgentHash = Tagged<string, 'AgentHash'>;
|
|
9
|
+
export type DatomPart = string;
|
|
10
|
+
export type CidString = Tagged<string, CID>;
|
|
11
|
+
export type IpnsString = Tagged<CidString, 'IPNS'>;
|
|
12
|
+
export type AgentID = EntityID;
|
|
13
|
+
export type Attribute = string;
|
|
14
|
+
export type ApplogValue = string | boolean | number | null;
|
|
15
|
+
export interface Atom {
|
|
16
|
+
en: EntityID;
|
|
17
|
+
at: Attribute;
|
|
18
|
+
vl: ApplogValue;
|
|
19
|
+
}
|
|
20
|
+
export type Timestamp = string;
|
|
21
|
+
export interface Applog extends Atom {
|
|
22
|
+
cid: CidString;
|
|
23
|
+
pv: CidString | null;
|
|
24
|
+
ts: Timestamp;
|
|
25
|
+
ag: AgentHash;
|
|
26
|
+
}
|
|
27
|
+
export type ApplogNoCid = Omit<Applog, 'cid'>;
|
|
28
|
+
export type ApplogOptionalCid = PartialBy<Applog, 'cid'>;
|
|
29
|
+
export type ApplogForInsert = PartialBy<ApplogNoCid, 'ts' | 'pv'>;
|
|
30
|
+
export type ApplogForInsertOptionalAgent = PartialBy<ApplogForInsert, 'ag'>;
|
|
31
|
+
export interface ApplogEnc {
|
|
32
|
+
cid: CidString;
|
|
33
|
+
enc: Uint8Array;
|
|
34
|
+
iv?: Uint8Array;
|
|
35
|
+
}
|
|
36
|
+
export type ApplogEncNoCid = Omit<ApplogEnc, 'cid'>;
|
|
37
|
+
export type ApplogArrayMaybeEncrypted = (Applog | ApplogEnc)[];
|
|
38
|
+
export type ApplogArrayMaybeEncryptedRO = readonly (Applog | ApplogEnc)[];
|
|
39
|
+
export type ApplogArrayNoCIDMaybeEncryptedRO = readonly (ApplogNoCid | ApplogEncNoCid)[];
|
|
40
|
+
export type ApplogOfSomeSort = Applog | ApplogEnc | ApplogNoCid | ApplogEncNoCid | ApplogForInsert;
|
|
41
|
+
export declare const isEncryptedApplog: (l: ApplogOfSomeSort) => l is ApplogEnc;
|
|
42
|
+
export type AtomPattern = Atom | Applog;
|
|
43
|
+
export interface DatalogStateIdentifier {
|
|
44
|
+
lastTS: Timestamp;
|
|
45
|
+
}
|
|
46
|
+
export type ValueOrMatcher<T> = T | readonly T[] | ReadonlySet<T> | ((value: T) => boolean);
|
|
47
|
+
export type WithMatchers<T extends Record<string, any>> = {
|
|
48
|
+
[K in keyof T & string as `${K}` | `!${K}`]?: ValueOrMatcher<T[K]>;
|
|
49
|
+
};
|
|
50
|
+
export type DatalogQueryPattern = Partial<WithMatchers<Applog>>;
|
|
51
|
+
export type DatalogQueryPatternArray = DatalogQueryPattern[];
|
|
52
|
+
export interface DatalogQuery<SELECT extends string> {
|
|
53
|
+
find: readonly SELECT[];
|
|
54
|
+
where: DatalogQueryPatternArray;
|
|
55
|
+
onlyLatest?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export type DatalogQueryResultEntry<SELECT extends string> = Record<StripPrefix<'?', SELECT>, DatomPart>;
|
|
58
|
+
export type DatalogQueryResultRows<SELECT extends string> = DatalogQueryResultEntry<SELECT>[];
|
|
59
|
+
export interface SearchContext {
|
|
60
|
+
[key: string]: ApplogValue;
|
|
61
|
+
}
|
|
62
|
+
export interface SearchContextWithLog {
|
|
63
|
+
context: SearchContext;
|
|
64
|
+
applog?: Applog;
|
|
65
|
+
}
|
|
66
|
+
export type ResultContext = SearchContext | null;
|
|
67
|
+
type StripPrefix<TPrefix extends string, T extends string> = T extends `${TPrefix}${infer R}` ? R : never;
|
|
68
|
+
export declare const CIDTB: import("@sinclair/typebox").TString;
|
|
69
|
+
export type CIDTB = Static<typeof EntityID>;
|
|
70
|
+
export declare const URL: import("@sinclair/typebox").TString;
|
|
71
|
+
export type URL = Static<typeof URL>;
|
|
72
|
+
export declare const AppLogNoCidTB: import("@sinclair/typebox").TObject<{
|
|
73
|
+
en: import("@sinclair/typebox").TString;
|
|
74
|
+
at: import("@sinclair/typebox").TString;
|
|
75
|
+
vl: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNumber]>, import("@sinclair/typebox").TNull]>;
|
|
76
|
+
ts: import("@sinclair/typebox").TString;
|
|
77
|
+
ag: import("@sinclair/typebox").TString;
|
|
78
|
+
pv: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
79
|
+
}>;
|
|
80
|
+
export type AppLogNoCidTB = Static<typeof AppLogNoCidTB>;
|
|
81
|
+
export declare const AppLogNoCidTBC: import("@sinclair/typebox/compiler").TypeCheck<import("@sinclair/typebox").TObject<{
|
|
82
|
+
en: import("@sinclair/typebox").TString;
|
|
83
|
+
at: import("@sinclair/typebox").TString;
|
|
84
|
+
vl: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNumber]>, import("@sinclair/typebox").TNull]>;
|
|
85
|
+
ts: import("@sinclair/typebox").TString;
|
|
86
|
+
ag: import("@sinclair/typebox").TString;
|
|
87
|
+
pv: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
88
|
+
}>>;
|
|
89
|
+
export declare const getApplogNoCidTypeErrors: (obj: any) => import("@sinclair/typebox/errors").ValueError[];
|
|
90
|
+
export declare const isValidApplogNoCid: (value: unknown) => value is {
|
|
91
|
+
at: string;
|
|
92
|
+
pv: string;
|
|
93
|
+
ts: string;
|
|
94
|
+
ag: string;
|
|
95
|
+
en: string;
|
|
96
|
+
vl: string | number | boolean;
|
|
97
|
+
};
|
|
98
|
+
export declare const AppLogTB: import("@sinclair/typebox").TObject<{
|
|
99
|
+
at: import("@sinclair/typebox").TString;
|
|
100
|
+
cid: import("@sinclair/typebox").TString;
|
|
101
|
+
pv: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
102
|
+
ts: import("@sinclair/typebox").TString;
|
|
103
|
+
ag: import("@sinclair/typebox").TString;
|
|
104
|
+
en: import("@sinclair/typebox").TString;
|
|
105
|
+
vl: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNumber]>, import("@sinclair/typebox").TNull]>;
|
|
106
|
+
}>;
|
|
107
|
+
export type AppLogTB = Static<typeof AppLogTB>;
|
|
108
|
+
export declare const AppLogTBC: import("@sinclair/typebox/compiler").TypeCheck<import("@sinclair/typebox").TObject<{
|
|
109
|
+
at: import("@sinclair/typebox").TString;
|
|
110
|
+
cid: import("@sinclair/typebox").TString;
|
|
111
|
+
pv: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
112
|
+
ts: import("@sinclair/typebox").TString;
|
|
113
|
+
ag: import("@sinclair/typebox").TString;
|
|
114
|
+
en: import("@sinclair/typebox").TString;
|
|
115
|
+
vl: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNumber]>, import("@sinclair/typebox").TNull]>;
|
|
116
|
+
}>>;
|
|
117
|
+
export declare const getApplogTypeErrors: (obj: any) => import("@sinclair/typebox/errors").ValueError[];
|
|
118
|
+
export declare const isValidApplog: (value: unknown) => value is {
|
|
119
|
+
at: string;
|
|
120
|
+
cid: string;
|
|
121
|
+
pv: string;
|
|
122
|
+
ts: string;
|
|
123
|
+
ag: string;
|
|
124
|
+
en: string;
|
|
125
|
+
vl: string | number | boolean;
|
|
126
|
+
};
|
|
127
|
+
export {};
|
|
128
|
+
//# sourceMappingURL=datom-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datom-types.d.ts","sourceRoot":"","sources":["../../src/applog/datom-types.ts"],"names":[],"mappings":"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"}
|
package/dist/applog.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applog.d.ts","sourceRoot":"","sources":["../src/applog.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA"}
|
package/dist/applog.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import "./chunk-7Z5YDQKK.js";
|
|
2
|
+
import {
|
|
3
|
+
AppLogNoCidTB,
|
|
4
|
+
AppLogNoCidTBC,
|
|
5
|
+
AppLogTB,
|
|
6
|
+
AppLogTBC,
|
|
7
|
+
CIDTB,
|
|
8
|
+
EntityID,
|
|
9
|
+
EntityID_LENGTH,
|
|
10
|
+
Nullable,
|
|
11
|
+
URL,
|
|
12
|
+
actualize,
|
|
13
|
+
areApplogsEqual,
|
|
14
|
+
arrStats,
|
|
15
|
+
arraysContainSameElements,
|
|
16
|
+
compareApplogsByEnAt,
|
|
17
|
+
compareApplogsByTs,
|
|
18
|
+
cyrb53hash,
|
|
19
|
+
dateNowIso,
|
|
20
|
+
ensureTsPvAndFinalizeApplog,
|
|
21
|
+
ensureTsPvAndFinalizeApplogs,
|
|
22
|
+
finalizeApplogForInsert,
|
|
23
|
+
getApplogNoCidTypeErrors,
|
|
24
|
+
getApplogTypeErrors,
|
|
25
|
+
getHashID,
|
|
26
|
+
hasAg,
|
|
27
|
+
hasPv,
|
|
28
|
+
hasTs,
|
|
29
|
+
isEncryptedApplog,
|
|
30
|
+
isStaticPattern,
|
|
31
|
+
isTsBefore,
|
|
32
|
+
isValidApplog,
|
|
33
|
+
isValidApplogNoCid,
|
|
34
|
+
isVariable,
|
|
35
|
+
isoDateStrCompare,
|
|
36
|
+
joinThreads,
|
|
37
|
+
matchPart,
|
|
38
|
+
matchPartStatic,
|
|
39
|
+
matchPattern,
|
|
40
|
+
objEqualByKeys,
|
|
41
|
+
removeDuplicateAppLogs,
|
|
42
|
+
resolveOrRemoveVariables,
|
|
43
|
+
sortApplogsByTs,
|
|
44
|
+
tsNearlySame,
|
|
45
|
+
uniqueEnFromAppLogs,
|
|
46
|
+
variableNameWithoutQuestionmark,
|
|
47
|
+
withAg,
|
|
48
|
+
withPvFrom,
|
|
49
|
+
withTs
|
|
50
|
+
} from "./chunk-XIQSYEV3.js";
|
|
51
|
+
import "./chunk-ZAADLBSB.js";
|
|
52
|
+
export {
|
|
53
|
+
AppLogNoCidTB,
|
|
54
|
+
AppLogNoCidTBC,
|
|
55
|
+
AppLogTB,
|
|
56
|
+
AppLogTBC,
|
|
57
|
+
CIDTB,
|
|
58
|
+
EntityID,
|
|
59
|
+
EntityID_LENGTH,
|
|
60
|
+
Nullable,
|
|
61
|
+
URL,
|
|
62
|
+
actualize,
|
|
63
|
+
areApplogsEqual,
|
|
64
|
+
arrStats,
|
|
65
|
+
arraysContainSameElements,
|
|
66
|
+
compareApplogsByEnAt,
|
|
67
|
+
compareApplogsByTs,
|
|
68
|
+
cyrb53hash,
|
|
69
|
+
dateNowIso,
|
|
70
|
+
ensureTsPvAndFinalizeApplog,
|
|
71
|
+
ensureTsPvAndFinalizeApplogs,
|
|
72
|
+
finalizeApplogForInsert,
|
|
73
|
+
getApplogNoCidTypeErrors,
|
|
74
|
+
getApplogTypeErrors,
|
|
75
|
+
getHashID,
|
|
76
|
+
hasAg,
|
|
77
|
+
hasPv,
|
|
78
|
+
hasTs,
|
|
79
|
+
isEncryptedApplog,
|
|
80
|
+
isStaticPattern,
|
|
81
|
+
isTsBefore,
|
|
82
|
+
isValidApplog,
|
|
83
|
+
isValidApplogNoCid,
|
|
84
|
+
isVariable,
|
|
85
|
+
isoDateStrCompare,
|
|
86
|
+
joinThreads,
|
|
87
|
+
matchPart,
|
|
88
|
+
matchPartStatic,
|
|
89
|
+
matchPattern,
|
|
90
|
+
objEqualByKeys,
|
|
91
|
+
removeDuplicateAppLogs,
|
|
92
|
+
resolveOrRemoveVariables,
|
|
93
|
+
sortApplogsByTs,
|
|
94
|
+
tsNearlySame,
|
|
95
|
+
uniqueEnFromAppLogs,
|
|
96
|
+
variableNameWithoutQuestionmark,
|
|
97
|
+
withAg,
|
|
98
|
+
withPvFrom,
|
|
99
|
+
withTs
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=applog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -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,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/blockstore/index.ts
|
|
2
|
+
var LocalFirstBlockStore = class {
|
|
3
|
+
constructor(local, remote) {
|
|
4
|
+
this.local = local;
|
|
5
|
+
this.remote = remote;
|
|
6
|
+
}
|
|
7
|
+
async get(cid) {
|
|
8
|
+
if (await this.local.has(cid)) return this.local.get(cid);
|
|
9
|
+
if (!this.remote) throw new Error(`Block not found: ${cid}`);
|
|
10
|
+
const bytes = await this.remote.get(cid);
|
|
11
|
+
await this.local.put(cid, bytes);
|
|
12
|
+
return bytes;
|
|
13
|
+
}
|
|
14
|
+
put(cid, bytes) {
|
|
15
|
+
return this.local.put(cid, bytes);
|
|
16
|
+
}
|
|
17
|
+
has(cid) {
|
|
18
|
+
return this.local.has(cid);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
LocalFirstBlockStore
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=blockstore.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":[]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import {
|
|
2
|
+
areCidsEqual
|
|
3
|
+
} from "./chunk-XIQSYEV3.js";
|
|
4
|
+
|
|
5
|
+
// src/ipfs/fetch-snapshot-chain.ts
|
|
6
|
+
import * as dagJson from "@ipld/dag-json";
|
|
7
|
+
import { Logger } from "besonders-logger";
|
|
8
|
+
import { CID } from "multiformats/cid";
|
|
9
|
+
var { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO);
|
|
10
|
+
async function fetchSnapshotChainUntil(options) {
|
|
11
|
+
const { rootCID, stopAtCID, stopAtCounter, fetchBlock, fetchAll, maxDepth = 100 } = options;
|
|
12
|
+
const blockStore = createMemoryBlockStore();
|
|
13
|
+
const visited = /* @__PURE__ */ new Set();
|
|
14
|
+
let currentCID = rootCID;
|
|
15
|
+
let snapshotCount = 0;
|
|
16
|
+
let minCounter = Infinity;
|
|
17
|
+
let maxCounter = -Infinity;
|
|
18
|
+
while (currentCID && snapshotCount < maxDepth) {
|
|
19
|
+
const cidStr = currentCID.toString();
|
|
20
|
+
if (visited.has(cidStr)) {
|
|
21
|
+
throw ERROR("[fetchSnapshotChain] snapshot chain has a loop", { currentCID: cidStr, visited: [...visited] });
|
|
22
|
+
}
|
|
23
|
+
visited.add(cidStr);
|
|
24
|
+
if (stopAtCID && areCidsEqual(currentCID, stopAtCID)) {
|
|
25
|
+
DEBUG("[fetchSnapshotChain] reached stopAtCID, stopping", stopAtCID.toString());
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
DEBUG("[fetchSnapshotChain] fetching root block", cidStr);
|
|
29
|
+
const rootCar = await fetchBlock(currentCID);
|
|
30
|
+
await addCarBlocksToStore(rootCar, blockStore);
|
|
31
|
+
const rootBytes = await blockStore.get(currentCID);
|
|
32
|
+
if (!rootBytes) {
|
|
33
|
+
throw ERROR("[fetchSnapshotChain] root block not in store after fetch", { currentCID: cidStr });
|
|
34
|
+
}
|
|
35
|
+
const root = dagJson.decode(rootBytes);
|
|
36
|
+
if (typeof root.prevCounter === "number") {
|
|
37
|
+
minCounter = Math.min(minCounter, root.prevCounter);
|
|
38
|
+
maxCounter = Math.max(maxCounter, root.prevCounter);
|
|
39
|
+
}
|
|
40
|
+
if (stopAtCounter !== void 0 && typeof root.prevCounter === "number" && root.prevCounter <= stopAtCounter) {
|
|
41
|
+
DEBUG("[fetchSnapshotChain] reached stopAtCounter", { stopAtCounter, prevCounter: root.prevCounter });
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
DEBUG("[fetchSnapshotChain] fetching applogs", root.applogs.toString());
|
|
45
|
+
const applogsCar = await fetchAll(root.applogs);
|
|
46
|
+
await addCarBlocksToStore(applogsCar, blockStore);
|
|
47
|
+
DEBUG("[fetchSnapshotChain] fetching info", root.info.toString());
|
|
48
|
+
const infoCar = await fetchAll(root.info);
|
|
49
|
+
await addCarBlocksToStore(infoCar, blockStore);
|
|
50
|
+
snapshotCount++;
|
|
51
|
+
currentCID = root.prev;
|
|
52
|
+
}
|
|
53
|
+
DEBUG("[fetchSnapshotChain] done", { snapshotCount, rootCID: rootCID.toString() });
|
|
54
|
+
return {
|
|
55
|
+
rootCID,
|
|
56
|
+
blockStore,
|
|
57
|
+
blocks: blockStore.getBlocksArray(),
|
|
58
|
+
snapshotCount,
|
|
59
|
+
counterRange: minCounter !== Infinity ? { minCounter, maxCounter } : void 0
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function addCarBlocksToStore(car, store) {
|
|
63
|
+
for await (const { cid, bytes } of car.blocks()) {
|
|
64
|
+
const validCid = typeof cid.toV1 === "function" ? cid : CID.decode(cid.bytes);
|
|
65
|
+
await store.put(validCid, bytes);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function createMemoryBlockStore() {
|
|
69
|
+
const blocks = /* @__PURE__ */ new Map();
|
|
70
|
+
return {
|
|
71
|
+
async get(cid) {
|
|
72
|
+
return blocks.get(cid.toV1().toString());
|
|
73
|
+
},
|
|
74
|
+
async put(cid, bytes) {
|
|
75
|
+
blocks.set(cid.toV1().toString(), bytes);
|
|
76
|
+
},
|
|
77
|
+
getBlocksArray() {
|
|
78
|
+
return Array.from(blocks.entries());
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export {
|
|
84
|
+
fetchSnapshotChainUntil
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=chunk-6MQKRL6W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ipfs/fetch-snapshot-chain.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 { SnapRootBlock } from '../pubsub/pubsub-types.ts'\nimport { areCidsEqual } from './ipfs-utils.ts'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO) // eslint-disable-line no-unused-vars\n\nexport interface BlockStoreForFetch {\n get(cid: CID): Promise<Uint8Array | undefined>\n put(cid: CID, bytes: Uint8Array): Promise<void>\n}\n\nexport interface FetchChainOptions {\n rootCID: CID\n stopAtCID?: CID // Stop when we hit this CID (lastCID from subscription)\n stopAtCounter?: number // Stop when we reach this counter (walking backwards)\n fetchBlock: (cid: CID) => Promise<CarReader> // dag-scope=block\n fetchAll: (cid: CID) => Promise<CarReader> // dag-scope=all\n maxDepth?: number\n}\n\nexport interface FetchChainResult {\n rootCID: CID\n blockStore: BlockStoreForFetch\n /** Serializable blocks array for worker boundary crossing */\n blocks: [string, Uint8Array][]\n snapshotCount: number\n counterRange?: { minCounter: number; maxCounter: number }\n}\n\n/**\n * Fetches a snapshot chain iteratively, stopping at stopAtCID.\n * Uses 3 requests per snapshot: root(block), applogs(all), info(all).\n * This avoids the gateway's dag-scope=all following prev links recursively.\n */\nexport async function fetchSnapshotChainUntil(options: FetchChainOptions): Promise<FetchChainResult> {\n const { rootCID, stopAtCID, stopAtCounter, fetchBlock, fetchAll, maxDepth = 100 } = options\n const blockStore = createMemoryBlockStore()\n const visited = new Set<string>() // Loop detection for fetch\n let currentCID: CID | undefined = rootCID\n let snapshotCount = 0\n let minCounter = Infinity\n let maxCounter = -Infinity\n\n while (currentCID && snapshotCount < maxDepth) {\n const cidStr = currentCID.toString()\n\n // Loop detection\n if (visited.has(cidStr)) {\n throw ERROR('[fetchSnapshotChain] snapshot chain has a loop', { currentCID: cidStr, visited: [...visited] })\n }\n visited.add(cidStr)\n\n // Check stop condition BEFORE fetching content\n if (stopAtCID && areCidsEqual(currentCID, stopAtCID)) {\n DEBUG('[fetchSnapshotChain] reached stopAtCID, stopping', stopAtCID.toString())\n break // We've reached the last pulled snapshot - don't fetch it again\n }\n\n // 1. Fetch root block only (dag-scope=block)\n DEBUG('[fetchSnapshotChain] fetching root block', cidStr)\n const rootCar = await fetchBlock(currentCID)\n await addCarBlocksToStore(rootCar, blockStore)\n\n // Parse root to get applogs, info, prev CIDs\n const rootBytes = await blockStore.get(currentCID)\n if (!rootBytes) {\n throw ERROR('[fetchSnapshotChain] root block not in store after fetch', { currentCID: cidStr })\n }\n const root = dagJson.decode(rootBytes) as SnapRootBlock\n\n // Track counter range\n if (typeof root.prevCounter === 'number') {\n minCounter = Math.min(minCounter, root.prevCounter)\n maxCounter = Math.max(maxCounter, root.prevCounter)\n }\n\n // Stop condition based on counter\n if (stopAtCounter !== undefined && typeof root.prevCounter === 'number' && root.prevCounter <= stopAtCounter) {\n DEBUG('[fetchSnapshotChain] reached stopAtCounter', { stopAtCounter, prevCounter: root.prevCounter })\n break\n }\n\n // 2. Fetch applogs with dag-scope=all (gets applogs block + all linked applog blocks)\n DEBUG('[fetchSnapshotChain] fetching applogs', root.applogs.toString())\n const applogsCar = await fetchAll(root.applogs)\n await addCarBlocksToStore(applogsCar, blockStore)\n\n // 3. Fetch info with dag-scope=all (gets info block + all linked info log blocks)\n DEBUG('[fetchSnapshotChain] fetching info', root.info.toString())\n const infoCar = await fetchAll(root.info)\n await addCarBlocksToStore(infoCar, blockStore)\n\n snapshotCount++\n currentCID = root.prev // Move to previous snapshot\n }\n\n DEBUG('[fetchSnapshotChain] done', { snapshotCount, rootCID: rootCID.toString() })\n return {\n rootCID,\n blockStore,\n blocks: blockStore.getBlocksArray(),\n snapshotCount,\n counterRange: minCounter !== Infinity ? { minCounter, maxCounter } : undefined,\n }\n}\n\nasync function addCarBlocksToStore(car: CarReader, store: BlockStoreForFetch) {\n for await (const { cid, bytes } of car.blocks()) {\n const validCid = typeof cid.toV1 === 'function' ? cid : CID.decode(cid.bytes)\n await store.put(validCid, bytes)\n }\n}\n\ninterface MemoryBlockStoreWithBlocks extends BlockStoreForFetch {\n /** Get all blocks as serializable array */\n getBlocksArray(): [string, Uint8Array][]\n}\n\nfunction createMemoryBlockStore(): MemoryBlockStoreWithBlocks {\n const blocks = new Map<string, Uint8Array>()\n return {\n async get(cid: CID) {\n return blocks.get(cid.toV1().toString())\n },\n async put(cid: CID, bytes: Uint8Array) {\n blocks.set(cid.toV1().toString(), bytes)\n },\n getBlocksArray() {\n return Array.from(blocks.entries())\n },\n }\n}\n"],"mappings":";;;;;AACA,YAAY,aAAa;AACzB,SAAS,cAAc;AACvB,SAAS,WAAW;AAIpB,IAAM,EAAE,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,OAAO,MAAM,OAAO,IAAI;AA8BrE,eAAsB,wBAAwB,SAAuD;AACjG,QAAM,EAAE,SAAS,WAAW,eAAe,YAAY,UAAU,WAAW,IAAI,IAAI;AACpF,QAAM,aAAa,uBAAuB;AAC1C,QAAM,UAAU,oBAAI,IAAY;AAChC,MAAI,aAA8B;AAClC,MAAI,gBAAgB;AACpB,MAAI,aAAa;AACjB,MAAI,aAAa;AAEjB,SAAO,cAAc,gBAAgB,UAAU;AAC3C,UAAM,SAAS,WAAW,SAAS;AAGnC,QAAI,QAAQ,IAAI,MAAM,GAAG;AACrB,YAAM,MAAM,kDAAkD,EAAE,YAAY,QAAQ,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC;AAAA,IAC/G;AACA,YAAQ,IAAI,MAAM;AAGlB,QAAI,aAAa,aAAa,YAAY,SAAS,GAAG;AAClD,YAAM,oDAAoD,UAAU,SAAS,CAAC;AAC9E;AAAA,IACJ;AAGA,UAAM,4CAA4C,MAAM;AACxD,UAAM,UAAU,MAAM,WAAW,UAAU;AAC3C,UAAM,oBAAoB,SAAS,UAAU;AAG7C,UAAM,YAAY,MAAM,WAAW,IAAI,UAAU;AACjD,QAAI,CAAC,WAAW;AACZ,YAAM,MAAM,4DAA4D,EAAE,YAAY,OAAO,CAAC;AAAA,IAClG;AACA,UAAM,OAAe,eAAO,SAAS;AAGrC,QAAI,OAAO,KAAK,gBAAgB,UAAU;AACtC,mBAAa,KAAK,IAAI,YAAY,KAAK,WAAW;AAClD,mBAAa,KAAK,IAAI,YAAY,KAAK,WAAW;AAAA,IACtD;AAGA,QAAI,kBAAkB,UAAa,OAAO,KAAK,gBAAgB,YAAY,KAAK,eAAe,eAAe;AAC1G,YAAM,8CAA8C,EAAE,eAAe,aAAa,KAAK,YAAY,CAAC;AACpG;AAAA,IACJ;AAGA,UAAM,yCAAyC,KAAK,QAAQ,SAAS,CAAC;AACtE,UAAM,aAAa,MAAM,SAAS,KAAK,OAAO;AAC9C,UAAM,oBAAoB,YAAY,UAAU;AAGhD,UAAM,sCAAsC,KAAK,KAAK,SAAS,CAAC;AAChE,UAAM,UAAU,MAAM,SAAS,KAAK,IAAI;AACxC,UAAM,oBAAoB,SAAS,UAAU;AAE7C;AACA,iBAAa,KAAK;AAAA,EACtB;AAEA,QAAM,6BAA6B,EAAE,eAAe,SAAS,QAAQ,SAAS,EAAE,CAAC;AACjF,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,QAAQ,WAAW,eAAe;AAAA,IAClC;AAAA,IACA,cAAc,eAAe,WAAW,EAAE,YAAY,WAAW,IAAI;AAAA,EACzE;AACJ;AAEA,eAAe,oBAAoB,KAAgB,OAA2B;AAC1E,mBAAiB,EAAE,KAAK,MAAM,KAAK,IAAI,OAAO,GAAG;AAC7C,UAAM,WAAW,OAAO,IAAI,SAAS,aAAa,MAAM,IAAI,OAAO,IAAI,KAAK;AAC5E,UAAM,MAAM,IAAI,UAAU,KAAK;AAAA,EACnC;AACJ;AAOA,SAAS,yBAAqD;AAC1D,QAAM,SAAS,oBAAI,IAAwB;AAC3C,SAAO;AAAA,IACH,MAAM,IAAI,KAAU;AAChB,aAAO,OAAO,IAAI,IAAI,KAAK,EAAE,SAAS,CAAC;AAAA,IAC3C;AAAA,IACA,MAAM,IAAI,KAAU,OAAmB;AACnC,aAAO,IAAI,IAAI,KAAK,EAAE,SAAS,GAAG,KAAK;AAAA,IAC3C;AAAA,IACA,iBAAiB;AACb,aAAO,MAAM,KAAK,OAAO,QAAQ,CAAC;AAAA,IACtC;AAAA,EACJ;AACJ;","names":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cyrb53hash,
|
|
3
|
+
ensureTsPvAndFinalizeApplog
|
|
4
|
+
} from "./chunk-XIQSYEV3.js";
|
|
5
|
+
|
|
6
|
+
// src/pubsub/pub-pull.ts
|
|
7
|
+
import { Logger } from "besonders-logger";
|
|
8
|
+
var { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO);
|
|
9
|
+
function integratePub({ targetThread, agentHash, subID, pubData }) {
|
|
10
|
+
const newLogs = pubData.thread.applogs.filter((log) => !targetThread.hasApplog(log, false));
|
|
11
|
+
DEBUG(`[integratePub] integrating ${newLogs.length} logs`, { targetThread, subID, pubData });
|
|
12
|
+
let toInsert = newLogs;
|
|
13
|
+
if (subID) {
|
|
14
|
+
toInsert = toInsert.concat(ensureTsPvAndFinalizeApplog(
|
|
15
|
+
{ en: subID, at: "subscription/cid", vl: pubData.cid.toString(), ag: agentHash },
|
|
16
|
+
targetThread
|
|
17
|
+
));
|
|
18
|
+
}
|
|
19
|
+
targetThread.insertRaw(toInsert);
|
|
20
|
+
return newLogs;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// src/pubsub/pubsub-types.ts
|
|
24
|
+
function isShare(obj) {
|
|
25
|
+
return obj?.pk !== void 0 && obj?.lastPush !== void 0;
|
|
26
|
+
}
|
|
27
|
+
function isSubscription(obj) {
|
|
28
|
+
return obj?.lastPull !== void 0;
|
|
29
|
+
}
|
|
30
|
+
function agentToShortHash(agentString) {
|
|
31
|
+
return cyrb53hash(agentString, 31, 7);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
integratePub,
|
|
36
|
+
isShare,
|
|
37
|
+
isSubscription,
|
|
38
|
+
agentToShortHash
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=chunk-7MW34UEO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pubsub/pub-pull.ts","../src/pubsub/pubsub-types.ts"],"sourcesContent":["import { Logger } from 'besonders-logger'\nimport { CID } from 'multiformats'\nimport { ensureTsPvAndFinalizeApplog } from '../applog/applog-helpers.ts'\nimport { EntityID } from '../applog/datom-types.ts'\nimport { Thread } from '../thread.ts'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO) // eslint-disable-line no-unused-vars\n\nexport type PubPullData = {\n\tcid: CID\n\tthread: Thread\n}\n\nexport function integratePub({ targetThread, agentHash, subID, pubData }: {\n\ttargetThread: Thread\n\tagentHash: EntityID\n\tpubData: PubPullData\n\tsubID?: EntityID\n}) {\n\tconst newLogs = pubData.thread.applogs.filter(log => !targetThread.hasApplog(log, false))\n\tDEBUG(`[integratePub] integrating ${newLogs.length} logs`, { targetThread, subID, pubData })\n\tlet toInsert = newLogs\n\tif (subID) {\n\t\ttoInsert = toInsert.concat(ensureTsPvAndFinalizeApplog(\n\t\t\t{ en: subID, at: 'subscription/cid', vl: pubData.cid.toString(), ag: agentHash },\n\t\t\ttargetThread,\n\t\t))\n\t}\n\ttargetThread.insertRaw(toInsert)\n\treturn newLogs\n}\n","import { CID } from 'multiformats/cid'\nimport { cyrb53hash } from './../applog/applog-utils.ts'\nimport { AgentHash, AgentID, CidString } from '../applog/datom-types.ts'\nimport { Tagged } from '../types.ts'\nimport { UCANCapMap } from './ucan.ts'\ntype AgentString = Tagged<string, 'AgentString'>\ntype DIDString = Tagged<string, 'DID'>\nexport type { AgentHash, AgentString, DIDString }\n\n\nexport interface AppAgent {\n\tag: AgentHash\n\tagentString: AgentString\n\tdid: DIDString\n\tsign? (data: Uint8Array): Promise<Uint8Array>\n\tucan?: UCANCapMap\n}\nexport interface AppAgentForWorker extends AppAgent {\n\tsignerSecret?: Uint8Array\n}\nexport interface SnapRootBlock {\n\tapplogs: CID\n\tapplogsSignature: Uint8Array\n\tinfo: CID\n\tinfoSignature: Uint8Array\n\tprev?: CID\n\tprevCounter?: number | null // Sequential counter: 0 for first, then +1 for each. null = unknown (legacy/error).\n}\nexport interface SnapBlockLogs {\n\tlogs: CID[]\n}\nexport interface SnapBlockChunks {\n\tchunks: CID[]\n}\nexport type SnapBlockLogsOrChunks = SnapBlockLogs | SnapBlockChunks\n\n// HACK: this is actually note3 types, not wovin\nexport interface IShare {\n\tid?: string // string hash of pub (used as unique id in IDB) `W3Name.create().toString()` starts with k51qzi5uqu5d\n\tcreatedAt: string // ISO timestamp of creation\n\tname: string // nick name for the pub\n\tisDeleted?: boolean\n\tpurgeBeforePush?: boolean\n\n\tpk: Uint8Array // exported privatekey - needed to create WritableName for publishing //TODO: store as non-extractable / encrypted?\n\n\tautopush: boolean\n\tlastPush: string | null\n\tlastCID?: string\n\tlatestLogTs?: string\n\tpubCounter?: number\n\n\tpublishedBy: string // local user appAgent\n\tselectors?: string[] // to be used as a filter for which applogs to pub\n\tencryptedFor?: string | null // short agentHash\n\tencryptedWith?: CryptoKey | null // AES-GCM derived key from ECDH keys (local private and remote public)\n\n\t// HACK WIP #39 - shared encryption\n\tsharedKey?: CryptoKey | null // AES-GCM derived key from ECDH keys (local private and ipns public)\n\tsharedAgents?: AgentID[] | null // array of string EntityIDs for the chosen agents (we need public jwkd atoms for each of them)\n\tsharedKeyMap?: Map<AgentID, string> | null // uses public key from each agent to derive an aes key that is used to encrypt and btoa the sharedKey that is actually used to encrypt and decrypt the applogs\n}\nexport interface ISubscription {\n\tid: string // string hash of pub (used as unique id in IDB) `W3Name.create().toString()` starts with k51qzi5uqu5d\n\tcreatedAt: string // ISO timestamp of creation\n\tname: string // nick name for the pub\n\tisDeleted: boolean\n\n\tlastPull?: string | null\n\tlastPullAttempt?: string | null\n\tautopull: boolean\n\trealtime?: boolean // enable real-time WebSocket updates via IPNS watcher\n\tlastCID?: string // ? why not CidString\n\tlastApplogCID?: string\n\tpublishedBy?: string // remote publisher short agentHash\n\tencryptedFor?: string | undefined // short agentHash\n\tencryptedWith?: CryptoKey | undefined // AES-GCM derived key from ECDH keys (local private and remote public)\n}\nexport function isShare(obj: any): obj is IShare {\n\treturn obj?.pk !== undefined && obj?.lastPush !== undefined\n}\nexport function isSubscription(obj: any): obj is ISubscription {\n\treturn obj?.lastPull !== undefined\n}\n\nexport type TShareSub = IShare | ISubscription\n\nexport function agentToShortHash(agentString: string) {\n\treturn cyrb53hash(agentString, 31, 7) as string\n}\n"],"mappings":";;;;;;AAAA,SAAS,cAAc;AAMvB,IAAM,EAAE,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,OAAO,MAAM,OAAO,IAAI;AAO9D,SAAS,aAAa,EAAE,cAAc,WAAW,OAAO,QAAQ,GAKpE;AACF,QAAM,UAAU,QAAQ,OAAO,QAAQ,OAAO,SAAO,CAAC,aAAa,UAAU,KAAK,KAAK,CAAC;AACxF,QAAM,8BAA8B,QAAQ,MAAM,SAAS,EAAE,cAAc,OAAO,QAAQ,CAAC;AAC3F,MAAI,WAAW;AACf,MAAI,OAAO;AACV,eAAW,SAAS,OAAO;AAAA,MAC1B,EAAE,IAAI,OAAO,IAAI,oBAAoB,IAAI,QAAQ,IAAI,SAAS,GAAG,IAAI,UAAU;AAAA,MAC/E;AAAA,IACD,CAAC;AAAA,EACF;AACA,eAAa,UAAU,QAAQ;AAC/B,SAAO;AACR;;;ACgDO,SAAS,QAAQ,KAAyB;AAChD,SAAO,KAAK,OAAO,UAAa,KAAK,aAAa;AACnD;AACO,SAAS,eAAe,KAAgC;AAC9D,SAAO,KAAK,aAAa;AAC1B;AAIO,SAAS,iBAAiB,aAAqB;AACrD,SAAO,WAAW,aAAa,IAAI,CAAC;AACrC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-7Z5YDQKK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|