@bsv/overlay 2.3.1 → 2.6.1
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/README.md +166 -0
- package/dist/cjs/mod.d.ts +3 -0
- package/dist/cjs/mod.d.ts.map +1 -1
- package/dist/cjs/mod.js +8 -1
- package/dist/cjs/mod.js.map +1 -1
- package/dist/cjs/package.json +10 -4
- package/dist/cjs/src/BASM.d.ts +6 -0
- package/dist/cjs/src/BASM.d.ts.map +1 -1
- package/dist/cjs/src/BASM.js +21 -8
- package/dist/cjs/src/BASM.js.map +1 -1
- package/dist/cjs/src/BASMRemote.d.ts +8 -1
- package/dist/cjs/src/BASMRemote.d.ts.map +1 -1
- package/dist/cjs/src/BASMRemote.js +179 -13
- package/dist/cjs/src/BASMRemote.js.map +1 -1
- package/dist/cjs/src/BASMValidation.d.ts +27 -0
- package/dist/cjs/src/BASMValidation.d.ts.map +1 -0
- package/dist/cjs/src/BASMValidation.js +108 -0
- package/dist/cjs/src/BASMValidation.js.map +1 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts +11 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.js +60 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.js.map +1 -0
- package/dist/cjs/src/Engine.d.ts +37 -13
- package/dist/cjs/src/Engine.d.ts.map +1 -1
- package/dist/cjs/src/Engine.js +1713 -336
- package/dist/cjs/src/Engine.js.map +1 -1
- package/dist/cjs/src/EngineAdmission.d.ts +70 -0
- package/dist/cjs/src/EngineAdmission.d.ts.map +1 -0
- package/dist/cjs/src/EngineAdmission.js +297 -0
- package/dist/cjs/src/EngineAdmission.js.map +1 -0
- package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts +4 -3
- package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPRemote.js +27 -43
- package/dist/cjs/src/GASP/OverlayGASPRemote.js.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts +22 -16
- package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPStorage.js +206 -57
- package/dist/cjs/src/GASP/OverlayGASPStorage.js.map +1 -1
- package/dist/cjs/src/RemoteSecurity.d.ts +50 -0
- package/dist/cjs/src/RemoteSecurity.d.ts.map +1 -0
- package/dist/cjs/src/RemoteSecurity.js +301 -0
- package/dist/cjs/src/RemoteSecurity.js.map +1 -0
- package/dist/cjs/src/storage/AdmissionStorage.d.ts +185 -0
- package/dist/cjs/src/storage/AdmissionStorage.d.ts.map +1 -0
- package/dist/cjs/src/storage/AdmissionStorage.js +93 -0
- package/dist/cjs/src/storage/AdmissionStorage.js.map +1 -0
- package/dist/cjs/src/storage/RecoveryContract.d.ts +50 -0
- package/dist/cjs/src/storage/RecoveryContract.d.ts.map +1 -0
- package/dist/cjs/src/storage/RecoveryContract.js +35 -0
- package/dist/cjs/src/storage/RecoveryContract.js.map +1 -0
- package/dist/cjs/src/storage/Storage.d.ts +32 -19
- package/dist/cjs/src/storage/Storage.d.ts.map +1 -1
- package/dist/cjs/src/storage/Storage.js +5 -0
- package/dist/cjs/src/storage/Storage.js.map +1 -1
- package/dist/cjs/src/storage/knex/KnexStorage.d.ts +8 -8
- package/dist/cjs/src/storage/knex/KnexStorage.d.ts.map +1 -1
- package/dist/cjs/src/storage/knex/KnexStorage.js +98 -61
- package/dist/cjs/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/cjs/src/storage/knex/all-migrations.d.ts.map +1 -1
- package/dist/cjs/src/storage/knex/all-migrations.js +5 -1
- package/dist/cjs/src/storage/knex/all-migrations.js.map +1 -1
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +36 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js +16 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js +229 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js +675 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js +453 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.js +756 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts +44 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.js +135 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.d.ts +67 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.js +743 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js +368 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
- package/dist/cjs/src/storage/mongo.d.ts +9 -0
- package/dist/cjs/src/storage/mongo.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo.js +25 -0
- package/dist/cjs/src/storage/mongo.js.map +1 -0
- package/dist/esm/mod.js +3 -0
- package/dist/esm/mod.js.map +1 -1
- package/dist/esm/src/BASM.js +21 -8
- package/dist/esm/src/BASM.js.map +1 -1
- package/dist/esm/src/BASMRemote.js +176 -12
- package/dist/esm/src/BASMRemote.js.map +1 -1
- package/dist/esm/src/BASMValidation.js +95 -0
- package/dist/esm/src/BASMValidation.js.map +1 -0
- package/dist/esm/src/DiscoveryAdvertisementValidation.js +57 -0
- package/dist/esm/src/DiscoveryAdvertisementValidation.js.map +1 -0
- package/dist/esm/src/Engine.js +1698 -326
- package/dist/esm/src/Engine.js.map +1 -1
- package/dist/esm/src/EngineAdmission.js +280 -0
- package/dist/esm/src/EngineAdmission.js.map +1 -0
- package/dist/esm/src/GASP/OverlayGASPRemote.js +27 -43
- package/dist/esm/src/GASP/OverlayGASPRemote.js.map +1 -1
- package/dist/esm/src/GASP/OverlayGASPStorage.js +200 -56
- package/dist/esm/src/GASP/OverlayGASPStorage.js.map +1 -1
- package/dist/esm/src/RemoteSecurity.js +279 -0
- package/dist/esm/src/RemoteSecurity.js.map +1 -0
- package/dist/esm/src/storage/AdmissionStorage.js +85 -0
- package/dist/esm/src/storage/AdmissionStorage.js.map +1 -0
- package/dist/esm/src/storage/RecoveryContract.js +31 -0
- package/dist/esm/src/storage/RecoveryContract.js.map +1 -0
- package/dist/esm/src/storage/Storage.js +4 -1
- package/dist/esm/src/storage/Storage.js.map +1 -1
- package/dist/esm/src/storage/knex/KnexStorage.js +98 -61
- package/dist/esm/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/esm/src/storage/knex/all-migrations.js +5 -1
- package/dist/esm/src/storage/knex/all-migrations.js.map +1 -1
- package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +32 -0
- package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
- package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js +12 -0
- package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js +217 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js +673 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoOverlayStorage.js +451 -0
- package/dist/esm/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoPayloadStore.js +747 -0
- package/dist/esm/src/storage/mongo/MongoPayloadStore.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoReadGuards.js +129 -0
- package/dist/esm/src/storage/mongo/MongoReadGuards.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoSchema.js +730 -0
- package/dist/esm/src/storage/mongo/MongoSchema.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoTransactionRunner.js +371 -0
- package/dist/esm/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
- package/dist/esm/src/storage/mongo.js +9 -0
- package/dist/esm/src/storage/mongo.js.map +1 -0
- package/dist/types/mod.d.ts +3 -0
- package/dist/types/mod.d.ts.map +1 -1
- package/dist/types/src/BASM.d.ts +6 -0
- package/dist/types/src/BASM.d.ts.map +1 -1
- package/dist/types/src/BASMRemote.d.ts +8 -1
- package/dist/types/src/BASMRemote.d.ts.map +1 -1
- package/dist/types/src/BASMValidation.d.ts +27 -0
- package/dist/types/src/BASMValidation.d.ts.map +1 -0
- package/dist/types/src/DiscoveryAdvertisementValidation.d.ts +11 -0
- package/dist/types/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
- package/dist/types/src/Engine.d.ts +37 -13
- package/dist/types/src/Engine.d.ts.map +1 -1
- package/dist/types/src/EngineAdmission.d.ts +70 -0
- package/dist/types/src/EngineAdmission.d.ts.map +1 -0
- package/dist/types/src/GASP/OverlayGASPRemote.d.ts +4 -3
- package/dist/types/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
- package/dist/types/src/GASP/OverlayGASPStorage.d.ts +22 -16
- package/dist/types/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
- package/dist/types/src/RemoteSecurity.d.ts +50 -0
- package/dist/types/src/RemoteSecurity.d.ts.map +1 -0
- package/dist/types/src/storage/AdmissionStorage.d.ts +185 -0
- package/dist/types/src/storage/AdmissionStorage.d.ts.map +1 -0
- package/dist/types/src/storage/RecoveryContract.d.ts +50 -0
- package/dist/types/src/storage/RecoveryContract.d.ts.map +1 -0
- package/dist/types/src/storage/Storage.d.ts +32 -19
- package/dist/types/src/storage/Storage.d.ts.map +1 -1
- package/dist/types/src/storage/knex/KnexStorage.d.ts +8 -8
- package/dist/types/src/storage/knex/KnexStorage.d.ts.map +1 -1
- package/dist/types/src/storage/knex/all-migrations.d.ts.map +1 -1
- package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
- package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
- package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
- package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
- package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
- package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
- package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
- package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoReadGuards.d.ts +44 -0
- package/dist/types/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoSchema.d.ts +67 -0
- package/dist/types/src/storage/mongo/MongoSchema.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
- package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
- package/dist/types/src/storage/mongo.d.ts +9 -0
- package/dist/types/src/storage/mongo.d.ts.map +1 -0
- package/package.json +11 -5
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type HistoryFence, type StorageScope, type StorageUint64 } from './AdmissionStorage.js';
|
|
2
|
+
export interface RecoveryLease extends HistoryFence {
|
|
3
|
+
scope: StorageScope;
|
|
4
|
+
topic: string;
|
|
5
|
+
peerId: string;
|
|
6
|
+
jobId: string;
|
|
7
|
+
leaseToken: StorageUint64;
|
|
8
|
+
expiresAtMs: StorageUint64;
|
|
9
|
+
}
|
|
10
|
+
/** Use database time and this predicate INSIDE the checkpoint/publication CAS. */
|
|
11
|
+
export declare function isRecoveryLeaseCurrent(expected: RecoveryLease, current: RecoveryLease, nowMs: StorageUint64): boolean;
|
|
12
|
+
/** A repair's own revision/checkpoint must move together; other workers rewind. */
|
|
13
|
+
export interface HistoryRevisionHandoff {
|
|
14
|
+
expected: RecoveryLease;
|
|
15
|
+
checkpoint: string;
|
|
16
|
+
}
|
|
17
|
+
/** Immutable history; a current pointer must CAS both revisions and the header. */
|
|
18
|
+
export interface TopicAnchorRevision extends HistoryFence {
|
|
19
|
+
scope: StorageScope;
|
|
20
|
+
topic: string;
|
|
21
|
+
height: StorageUint64;
|
|
22
|
+
blockHash: string;
|
|
23
|
+
basmRoot: string;
|
|
24
|
+
admittedCount: StorageUint64;
|
|
25
|
+
tac: string;
|
|
26
|
+
previousTac: string;
|
|
27
|
+
policyId: string;
|
|
28
|
+
}
|
|
29
|
+
/** A local tuple does not negotiate a remote protocol. Evidence comes from S06. */
|
|
30
|
+
export type GaspCursorEvidence = {
|
|
31
|
+
mode: 'negotiated-tuple';
|
|
32
|
+
negotiated: boolean;
|
|
33
|
+
pageFinalized: boolean;
|
|
34
|
+
} | {
|
|
35
|
+
mode: 'inclusive-since';
|
|
36
|
+
inclusiveSemanticsProven: boolean;
|
|
37
|
+
equalScoreDrained: boolean;
|
|
38
|
+
pageFinalized: boolean;
|
|
39
|
+
} | {
|
|
40
|
+
mode: 'full-resync';
|
|
41
|
+
noSkipSemanticsProven: boolean;
|
|
42
|
+
resyncCompleted: boolean;
|
|
43
|
+
pageFinalized: boolean;
|
|
44
|
+
} | {
|
|
45
|
+
mode: 'unsupported';
|
|
46
|
+
pageFinalized: boolean;
|
|
47
|
+
};
|
|
48
|
+
/** Gate for a durable finalization/cursor transaction; never advances a cursor. */
|
|
49
|
+
export declare function canAdvanceGaspCursor(evidence: GaspCursorEvidence): boolean;
|
|
50
|
+
//# sourceMappingURL=RecoveryContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecoveryContract.d.ts","sourceRoot":"","sources":["../../../../src/storage/RecoveryContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,aAAa,CAAA;IACzB,WAAW,EAAE,aAAa,CAAA;CAC3B;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,aAAa,GACnB,OAAO,CAcT;AAED,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,aAAa,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,aAAa,CAAA;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,mFAAmF;AACnF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,GACzE;IACE,IAAI,EAAE,iBAAiB,CAAA;IACvB,wBAAwB,EAAE,OAAO,CAAA;IACjC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAA;CACvB,GACD;IACE,IAAI,EAAE,aAAa,CAAA;IACnB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,OAAO,CAAA;CACvB,GACD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAA;AAEnD,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAY1E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Output } from '../Output.js';
|
|
2
|
+
import type { AdmissionStorage } from './AdmissionStorage.js';
|
|
2
3
|
import type { AdmittedTxRef, RawTransactionRecord, TopicAnchorTip, TopicBlockAnchor } from '../BASM.js';
|
|
3
4
|
/**
|
|
4
5
|
* Represents a transaction that has been applied to a topic.
|
|
@@ -48,10 +49,16 @@ export interface UnprovenAppliedTransactionCandidate {
|
|
|
48
49
|
outputIndex: number;
|
|
49
50
|
}>;
|
|
50
51
|
}
|
|
52
|
+
export interface UnprovenQueryLimits {
|
|
53
|
+
maxCandidates: number;
|
|
54
|
+
maxOutputs: number;
|
|
55
|
+
}
|
|
51
56
|
/**
|
|
52
57
|
* Defines the Storage Engine interface used internally by the Overlay Services Engine.
|
|
53
58
|
*/
|
|
54
59
|
export interface Storage {
|
|
60
|
+
/** Optional whole-admission contract. Legacy CRUD does not imply this capability. */
|
|
61
|
+
readonly admission?: AdmissionStorage;
|
|
55
62
|
/**
|
|
56
63
|
* Adds a new output to storage
|
|
57
64
|
* @param utxo — The output to add
|
|
@@ -81,7 +88,7 @@ export interface Storage {
|
|
|
81
88
|
* @param txid — TXID of the outputs to find
|
|
82
89
|
* @param includeBEEF — Whether to include the BEEF data for the outputs (optional)
|
|
83
90
|
*/
|
|
84
|
-
findOutputsForTransaction: (txid: string, includeBEEF?: boolean) => Promise<Output[]>;
|
|
91
|
+
findOutputsForTransaction: (txid: string, includeBEEF?: boolean, limit?: number) => Promise<Output[]>;
|
|
85
92
|
/**
|
|
86
93
|
* Finds current UTXOs that have been admitted into a given topic
|
|
87
94
|
* @param topic - The topic for which we want to find Unspent Transaction Outputs (UTXOs).
|
|
@@ -99,19 +106,23 @@ export interface Storage {
|
|
|
99
106
|
*/
|
|
100
107
|
deleteOutput: (txid: string, outputIndex: number, topic: string) => Promise<void>;
|
|
101
108
|
/**
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
109
|
+
* Updates a UTXO as spent
|
|
110
|
+
* @param txid — TXID of the output to update
|
|
111
|
+
* @param outputIndex — Index of the output to update
|
|
112
|
+
* @param topic — Topic in which the output should be updated
|
|
113
|
+
* @param spendingTxid — Optional transaction claiming the spend. Repeating
|
|
114
|
+
* the same claim is idempotent; a different spender must still fail.
|
|
115
|
+
* @throws If the topical output does not exist or was spent by a different
|
|
116
|
+
* transaction. Storage implementations must make this check and update atomic.
|
|
117
|
+
*/
|
|
118
|
+
markUTXOAsSpent: (txid: string, outputIndex: number, topic: string, spendingTxid?: string) => Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* Updates which outputs are consumed by this output
|
|
121
|
+
* @param txid — TXID of the output to update
|
|
122
|
+
* @param outputIndex — Index of the output to update
|
|
123
|
+
* @param topic — Topic in which the output should be updated
|
|
124
|
+
* @param consumedBy — The new set of outputs consumed by this output
|
|
125
|
+
*/
|
|
115
126
|
updateConsumedBy: (txid: string, outputIndex: number, topic: string, consumedBy: Array<{
|
|
116
127
|
txid: string;
|
|
117
128
|
outputIndex: number;
|
|
@@ -153,7 +164,7 @@ export interface Storage {
|
|
|
153
164
|
/**
|
|
154
165
|
* Returns proven topic transactions admitted in one block, in canonical block order.
|
|
155
166
|
*/
|
|
156
|
-
findAdmittedTransactionsForBlock?: (topic: string, blockHeight: number, blockHash?: string) => Promise<AdmittedTxRef[]>;
|
|
167
|
+
findAdmittedTransactionsForBlock?: (topic: string, blockHeight: number, blockHash?: string, limit?: number) => Promise<AdmittedTxRef[]>;
|
|
157
168
|
/**
|
|
158
169
|
* Persists or replaces a topic block anchor for one height.
|
|
159
170
|
*/
|
|
@@ -165,7 +176,7 @@ export interface Storage {
|
|
|
165
176
|
/**
|
|
166
177
|
* Returns topic block anchors across a closed height range.
|
|
167
178
|
*/
|
|
168
|
-
findTopicBlockAnchors?: (topic: string, fromHeight: number, toHeight: number) => Promise<TopicBlockAnchor[]>;
|
|
179
|
+
findTopicBlockAnchors?: (topic: string, fromHeight: number, toHeight: number, limit?: number) => Promise<TopicBlockAnchor[]>;
|
|
169
180
|
/**
|
|
170
181
|
* Returns the latest known topic anchor tip.
|
|
171
182
|
*/
|
|
@@ -188,7 +199,7 @@ export interface Storage {
|
|
|
188
199
|
/**
|
|
189
200
|
* Finds topic-applied transactions with no direct proof old enough to evict.
|
|
190
201
|
*/
|
|
191
|
-
findUnprovenAppliedTransactions?: (cutoffHeight: number, topic?: string) => Promise<UnprovenAppliedTransactionCandidate[]>;
|
|
202
|
+
findUnprovenAppliedTransactions?: (cutoffHeight: number, topic?: string, limits?: UnprovenQueryLimits) => Promise<UnprovenAppliedTransactionCandidate[]>;
|
|
192
203
|
/**
|
|
193
204
|
* Deletes a topic-applied transaction record.
|
|
194
205
|
*/
|
|
@@ -197,7 +208,7 @@ export interface Storage {
|
|
|
197
208
|
* Returns proven topic-applied transactions whose proof anchors to the given
|
|
198
209
|
* block hash. Used to demote admissions when that block is reorged out.
|
|
199
210
|
*/
|
|
200
|
-
findProvenAppliedTransactionsByBlockHash?: (blockHash: string) => Promise<Array<{
|
|
211
|
+
findProvenAppliedTransactionsByBlockHash?: (blockHash: string, limit?: number) => Promise<Array<{
|
|
201
212
|
txid: string;
|
|
202
213
|
topic: string;
|
|
203
214
|
blockHeight: number;
|
|
@@ -206,7 +217,7 @@ export interface Storage {
|
|
|
206
217
|
* Returns proven topic-applied transactions in a closed block-height range,
|
|
207
218
|
* including the proof's block hash and merkle root for revalidation sweeps.
|
|
208
219
|
*/
|
|
209
|
-
findProvenAppliedTransactionsInRange?: (fromHeight: number, toHeight: number, topic?: string) => Promise<Array<{
|
|
220
|
+
findProvenAppliedTransactionsInRange?: (fromHeight: number, toHeight: number, topic?: string, limit?: number) => Promise<Array<{
|
|
210
221
|
txid: string;
|
|
211
222
|
topic: string;
|
|
212
223
|
blockHeight: number;
|
|
@@ -234,4 +245,6 @@ export interface Storage {
|
|
|
234
245
|
*/
|
|
235
246
|
getLastInteraction: (host: string, topic: string) => Promise<number>;
|
|
236
247
|
}
|
|
248
|
+
/** True when the optional admission field is present. Protocol detection is separate. */
|
|
249
|
+
export declare function storageHasAdmission(storage: Storage): boolean;
|
|
237
250
|
//# sourceMappingURL=Storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../../src/storage/Storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAE7C;;;;;;;OAOG;IACH,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../../src/storage/Storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Storage, type AppliedTransaction, type AppliedTransactionProofUpdate, type StoredTransactionRecord, type UnprovenAppliedTransactionCandidate } from '../Storage.js';
|
|
1
|
+
import { Storage, type AppliedTransaction, type AppliedTransactionProofUpdate, type StoredTransactionRecord, type UnprovenAppliedTransactionCandidate, type UnprovenQueryLimits } from '../Storage.js';
|
|
2
2
|
import { Knex } from 'knex';
|
|
3
3
|
import type { Output } from '../../Output.js';
|
|
4
4
|
import { type AdmittedTxRef, type RawTransactionRecord, type TopicAnchorTip, type TopicBlockAnchor } from '../../BASM.js';
|
|
@@ -16,11 +16,11 @@ export declare class KnexStorage implements Storage {
|
|
|
16
16
|
txid: string;
|
|
17
17
|
outputIndex: number;
|
|
18
18
|
}>, includeBEEF?: boolean): Promise<Output[]>;
|
|
19
|
-
findOutputsForTransaction(txid: string, includeBEEF?: boolean): Promise<Output[]>;
|
|
19
|
+
findOutputsForTransaction(txid: string, includeBEEF?: boolean, limit?: number): Promise<Output[]>;
|
|
20
20
|
findUTXOsForTopic(topic: string, since?: number, limit?: number, includeBEEF?: boolean): Promise<Output[]>;
|
|
21
21
|
deleteOutput(txid: string, outputIndex: number, topic: string): Promise<void>;
|
|
22
22
|
insertOutput(output: Output): Promise<void>;
|
|
23
|
-
markUTXOAsSpent(txid: string, outputIndex: number, topic?: string): Promise<void>;
|
|
23
|
+
markUTXOAsSpent(txid: string, outputIndex: number, topic: string, spendingTxid?: string): Promise<void>;
|
|
24
24
|
updateConsumedBy(txid: string, outputIndex: number, topic: string, consumedBy: Array<{
|
|
25
25
|
txid: string;
|
|
26
26
|
outputIndex: number;
|
|
@@ -36,10 +36,10 @@ export declare class KnexStorage implements Storage {
|
|
|
36
36
|
}): Promise<boolean>;
|
|
37
37
|
updateLastInteraction(host: string, topic: string, since: number): Promise<void>;
|
|
38
38
|
getLastInteraction(host: string, topic: string): Promise<number>;
|
|
39
|
-
findAdmittedTransactionsForBlock(topic: string, blockHeight: number, blockHash?: string): Promise<AdmittedTxRef[]>;
|
|
39
|
+
findAdmittedTransactionsForBlock(topic: string, blockHeight: number, blockHash?: string, limit?: number): Promise<AdmittedTxRef[]>;
|
|
40
40
|
upsertTopicBlockAnchor(anchor: TopicBlockAnchor): Promise<void>;
|
|
41
41
|
findTopicBlockAnchor(topic: string, blockHeight: number, blockHash?: string): Promise<TopicBlockAnchor | undefined>;
|
|
42
|
-
findTopicBlockAnchors(topic: string, fromHeight: number, toHeight: number): Promise<TopicBlockAnchor[]>;
|
|
42
|
+
findTopicBlockAnchors(topic: string, fromHeight: number, toHeight: number, limit?: number): Promise<TopicBlockAnchor[]>;
|
|
43
43
|
findTopicAnchorTip(topic: string): Promise<TopicAnchorTip | undefined>;
|
|
44
44
|
findRawTransactions(txids: string[]): Promise<RawTransactionRecord[]>;
|
|
45
45
|
findTransactionMerklePaths(txids: string[]): Promise<Array<{
|
|
@@ -50,14 +50,14 @@ export declare class KnexStorage implements Storage {
|
|
|
50
50
|
blockIndex?: number;
|
|
51
51
|
merkleRoot?: string;
|
|
52
52
|
}>>;
|
|
53
|
-
findUnprovenAppliedTransactions(cutoffHeight: number, topic?: string): Promise<UnprovenAppliedTransactionCandidate[]>;
|
|
53
|
+
findUnprovenAppliedTransactions(cutoffHeight: number, topic?: string, limits?: UnprovenQueryLimits): Promise<UnprovenAppliedTransactionCandidate[]>;
|
|
54
54
|
deleteAppliedTransaction(txid: string, topic: string): Promise<void>;
|
|
55
|
-
findProvenAppliedTransactionsByBlockHash(blockHash: string): Promise<Array<{
|
|
55
|
+
findProvenAppliedTransactionsByBlockHash(blockHash: string, limit?: number): Promise<Array<{
|
|
56
56
|
txid: string;
|
|
57
57
|
topic: string;
|
|
58
58
|
blockHeight: number;
|
|
59
59
|
}>>;
|
|
60
|
-
findProvenAppliedTransactionsInRange(fromHeight: number, toHeight: number, topic?: string): Promise<Array<{
|
|
60
|
+
findProvenAppliedTransactionsInRange(fromHeight: number, toHeight: number, topic?: string, limit?: number): Promise<Array<{
|
|
61
61
|
txid: string;
|
|
62
62
|
topic: string;
|
|
63
63
|
blockHeight: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnexStorage.d.ts","sourceRoot":"","sources":["../../../../../src/storage/knex/KnexStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,mCAAmC,
|
|
1
|
+
{"version":3,"file":"KnexStorage.d.ts","sourceRoot":"","sources":["../../../../../src/storage/knex/KnexStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-migrations.d.ts","sourceRoot":"","sources":["../../../../../src/storage/knex/all-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"all-migrations.d.ts","sourceRoot":"","sources":["../../../../../src/storage/knex/all-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAwC3B;;GAEG;AACH,UAAU,SAAS;IACjB,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,QAAA,MAAM,aAAa,EAAE,SAAS,EAY7B,CAAA;eAEc,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2026-09-17-001-topical-uniqueness.d.ts","sourceRoot":"","sources":["../../../../../../src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAwBhC,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/** Add the transaction identity needed to distinguish retries from double spends. */
|
|
3
|
+
export declare function up(knex: Knex): Promise<void>;
|
|
4
|
+
export declare function down(knex: Knex): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=2026-09-20-001-spent-by.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2026-09-20-001-spent-by.d.ts","sourceRoot":"","sources":["../../../../../../src/storage/knex/migrations/2026-09-20-001-spent-by.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAEhC,qFAAqF;AACrF,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type AdmissionCommit, type AdmissionCommitResult, type AdmissionOutboxIntent, type AdmissionPayloadRef, type AdmissionReceipt, type StorageScope } from '../AdmissionStorage.js';
|
|
2
|
+
export type AdmissionRejectionCode = Extract<AdmissionCommitResult, {
|
|
3
|
+
state: 'rejected';
|
|
4
|
+
}>['code'];
|
|
5
|
+
export declare class AdmissionRejectedError extends Error {
|
|
6
|
+
readonly code: AdmissionRejectionCode;
|
|
7
|
+
constructor(code: AdmissionRejectionCode);
|
|
8
|
+
}
|
|
9
|
+
export declare const rejectAdmission: (code: AdmissionRejectionCode) => never;
|
|
10
|
+
export declare const sameScope: (left: StorageScope, right: StorageScope) => boolean;
|
|
11
|
+
export declare const samePayload: (left: AdmissionPayloadRef | undefined, right: AdmissionPayloadRef) => boolean;
|
|
12
|
+
export declare const admissionPlanPayloads: (plan: AdmissionCommit) => AdmissionPayloadRef[];
|
|
13
|
+
export declare const isBoundSteak: (plan: AdmissionCommit) => boolean;
|
|
14
|
+
export declare const validateAdmissionPlan: (plan: AdmissionCommit) => AdmissionRejectionCode | undefined;
|
|
15
|
+
export declare const admissionReceiptFor: (plan: AdmissionCommit, enlistedTargets: readonly string[]) => AdmissionReceipt;
|
|
16
|
+
export declare const lookupOutboxIntents: (plan: AdmissionCommit) => AdmissionOutboxIntent[];
|
|
17
|
+
export declare const propagationOutboxIntents: (plan: AdmissionCommit) => AdmissionOutboxIntent[];
|
|
18
|
+
//# sourceMappingURL=MongoAdmissionPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoAdmissionPlan.d.ts","sourceRoot":"","sources":["../../../../../src/storage/mongo/MongoAdmissionPlan.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAG1B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAA;AAE/B,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAElG,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IAErC,YAAY,IAAI,EAAE,sBAAsB,EAIvC;CACF;AAED,eAAO,MAAM,eAAe,SAAU,sBAAsB,KAAG,KAE9D,CAAA;AAuBD,eAAO,MAAM,SAAS,SAAU,YAAY,SAAS,YAAY,KAAG,OAGtC,CAAA;AAE9B,eAAO,MAAM,WAAW,SAChB,mBAAmB,GAAG,SAAS,SAC9B,mBAAmB,KACzB,OAGwB,CAAA;AAE3B,eAAO,MAAM,qBAAqB,SAAU,eAAe,KAAG,mBAAmB,EAQhF,CAAA;AAcD,eAAO,MAAM,YAAY,SAAU,eAAe,KAAG,OAuBpD,CAAA;AAmHD,eAAO,MAAM,qBAAqB,SAC1B,eAAe,KACpB,sBAAsB,GAAG,SAU3B,CAAA;AAED,eAAO,MAAM,mBAAmB,SACxB,eAAe,mBACJ,SAAS,MAAM,EAAE,KACjC,gBAmBF,CAAA;AAED,eAAO,MAAM,mBAAmB,SAAU,eAAe,KAAG,qBAAqB,EACzB,CAAA;AAExD,eAAO,MAAM,wBAAwB,SAAU,eAAe,KAAG,qBAAqB,EACzB,CAAA"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { Collection, Db, Document } from 'mongodb';
|
|
2
|
+
import { type AdmissionCommit, type AdmissionCommitResult, type AdmissionOperationKey, type AdmissionOutpoint, type AdmissionPayloadRef, type AdmissionReconcileResult, type AdmissionStorage, type StorageScope } from '../AdmissionStorage.js';
|
|
3
|
+
import type { RecoveryLease } from '../RecoveryContract.js';
|
|
4
|
+
import { MongoPayloadStore } from './MongoPayloadStore.js';
|
|
5
|
+
import { MongoReadGuards } from './MongoReadGuards.js';
|
|
6
|
+
import { MongoTransactionRunner, type MongoTransactionContext, type MongoTransactionOptions } from './MongoTransactionRunner.js';
|
|
7
|
+
export interface MongoEnlistedLookupIndex {
|
|
8
|
+
readonly protocol: 'overlay-mongo-index-v1';
|
|
9
|
+
readonly target: string;
|
|
10
|
+
apply: (context: MongoTransactionContext, plan: AdmissionCommit) => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface MongoAdmissionStorageOptions {
|
|
13
|
+
runner?: MongoTransactionRunner;
|
|
14
|
+
payloads?: MongoPayloadStore;
|
|
15
|
+
readGuards?: MongoReadGuards;
|
|
16
|
+
enlistedIndexes?: MongoEnlistedLookupIndex[];
|
|
17
|
+
projector?: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface MongoOutboxLease {
|
|
20
|
+
eventId: string;
|
|
21
|
+
kind: 'lookup' | 'propagation';
|
|
22
|
+
target: string;
|
|
23
|
+
payloads: AdmissionPayloadRef[];
|
|
24
|
+
}
|
|
25
|
+
interface GenerationDocument extends Document {
|
|
26
|
+
_id: string;
|
|
27
|
+
topic: string;
|
|
28
|
+
chainEpoch: string;
|
|
29
|
+
topicHistoryGeneration: string;
|
|
30
|
+
policyId: string;
|
|
31
|
+
}
|
|
32
|
+
interface JobDocument extends Document {
|
|
33
|
+
_id: string;
|
|
34
|
+
topic: string;
|
|
35
|
+
peerId: string;
|
|
36
|
+
jobId: string;
|
|
37
|
+
chainEpoch: string;
|
|
38
|
+
topicHistoryGeneration: string;
|
|
39
|
+
leaseToken: string;
|
|
40
|
+
leaseUntil: Date;
|
|
41
|
+
state: string;
|
|
42
|
+
checkpoint: string;
|
|
43
|
+
}
|
|
44
|
+
interface OutboxDocument extends Document {
|
|
45
|
+
_id: string;
|
|
46
|
+
eventId: string;
|
|
47
|
+
target: string;
|
|
48
|
+
state: string;
|
|
49
|
+
nextAttemptAt?: Date;
|
|
50
|
+
leaseUntil?: Date;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Opt-in Mongo AdmissionStorage. Engine submit uses this only when
|
|
54
|
+
* getAdmissionStorage(storage) observes overlay-admission-v1.
|
|
55
|
+
*/
|
|
56
|
+
export declare class MongoAdmissionStorage implements AdmissionStorage {
|
|
57
|
+
private readonly db;
|
|
58
|
+
readonly protocol: 'overlay-admission-v1';
|
|
59
|
+
readonly scope: StorageScope;
|
|
60
|
+
private readonly runner;
|
|
61
|
+
private readonly payloads;
|
|
62
|
+
private readonly guards;
|
|
63
|
+
private readonly enlisted;
|
|
64
|
+
private readonly projector;
|
|
65
|
+
private readonly peers;
|
|
66
|
+
constructor(db: Db, scope: StorageScope, options?: MongoAdmissionStorageOptions);
|
|
67
|
+
enlistedTargets(): string[];
|
|
68
|
+
commitAdmission(plan: AdmissionCommit): Promise<AdmissionCommitResult>;
|
|
69
|
+
private runAdmissionWithWriteConflictRetry;
|
|
70
|
+
private waitForPending;
|
|
71
|
+
reconcileAdmission(key: AdmissionOperationKey, attemptId?: string, options?: MongoTransactionOptions): Promise<AdmissionReconcileResult>;
|
|
72
|
+
close(): Promise<void>;
|
|
73
|
+
private peerFor;
|
|
74
|
+
claimOutbox(kind: 'lookup' | 'propagation', leaseMS?: number): Promise<MongoOutboxLease | null>;
|
|
75
|
+
acknowledgeOutbox(kind: 'lookup' | 'propagation', eventId: string): Promise<void>;
|
|
76
|
+
private asResult;
|
|
77
|
+
private prepareReadGuards;
|
|
78
|
+
private publishHistoryUpdatePayloads;
|
|
79
|
+
private historyUpdateRecord;
|
|
80
|
+
private applyPlan;
|
|
81
|
+
private assertReadyPayloads;
|
|
82
|
+
private checkReads;
|
|
83
|
+
private checkHistory;
|
|
84
|
+
private assertAppliedAvailable;
|
|
85
|
+
private assertOutboxAvailable;
|
|
86
|
+
private applySpend;
|
|
87
|
+
private applyEviction;
|
|
88
|
+
private insertOutput;
|
|
89
|
+
private insertEdge;
|
|
90
|
+
private insertApplied;
|
|
91
|
+
private applyHistoryUpdate;
|
|
92
|
+
private historyUpdateSlot;
|
|
93
|
+
private replaceHistoryPin;
|
|
94
|
+
private applyHandoff;
|
|
95
|
+
private upsertTransaction;
|
|
96
|
+
private insertOutbox;
|
|
97
|
+
private pin;
|
|
98
|
+
private outboxPayloads;
|
|
99
|
+
payloadId(ref: Pick<AdmissionPayloadRef, 'kind' | 'digest'>): string;
|
|
100
|
+
outputId(topic: string, outpoint: AdmissionOutpoint): string;
|
|
101
|
+
private appliedId;
|
|
102
|
+
generationId(topic: string): string;
|
|
103
|
+
jobId(lease: Pick<RecoveryLease, 'topic' | 'peerId' | 'jobId'>): string;
|
|
104
|
+
outboxId(kind: 'lookup' | 'propagation', eventId: string): string;
|
|
105
|
+
private outputs;
|
|
106
|
+
private applied;
|
|
107
|
+
generations(): Collection<GenerationDocument>;
|
|
108
|
+
jobs(): Collection<JobDocument>;
|
|
109
|
+
outbox(kind: 'lookup' | 'propagation'): Collection<OutboxDocument>;
|
|
110
|
+
}
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=MongoAdmissionStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoAdmissionStorage.d.ts","sourceRoot":"","sources":["../../../../../src/storage/mongo/MongoAdmissionStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Db } from 'mongodb';
|
|
2
|
+
import type { Output } from '../../Output.js';
|
|
3
|
+
import type { AppliedTransaction, Storage } from '../Storage.js';
|
|
4
|
+
import { type AdmissionPayloadRef, type HistoryFence, type StorageScope } from '../AdmissionStorage.js';
|
|
5
|
+
import { MongoAdmissionStorage, type MongoAdmissionStorageOptions } from './MongoAdmissionStorage.js';
|
|
6
|
+
/**
|
|
7
|
+
* Opt-in Mongo Storage adapter that advertises overlay-admission-v1 only because
|
|
8
|
+
* commitAdmission actually honors majority ack, spends, history, and outbox.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MongoOverlayStorage implements Storage {
|
|
11
|
+
private readonly db;
|
|
12
|
+
readonly admission: MongoAdmissionStorage;
|
|
13
|
+
readonly admissionScope: StorageScope;
|
|
14
|
+
private readonly payloads;
|
|
15
|
+
constructor(db: Db, scope: StorageScope, options?: MongoAdmissionStorageOptions);
|
|
16
|
+
enlistedIndexTargets(): readonly string[];
|
|
17
|
+
getHistoryFence(topic: string): Promise<HistoryFence>;
|
|
18
|
+
publishAdmissionPayload(input: {
|
|
19
|
+
kind: AdmissionPayloadRef['kind'];
|
|
20
|
+
bytes: Uint8Array;
|
|
21
|
+
txid?: string;
|
|
22
|
+
}): Promise<AdmissionPayloadRef>;
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
insertOutput(utxo: Output): Promise<void>;
|
|
25
|
+
private persistTransactionBeef;
|
|
26
|
+
findOutput(txid: string, outputIndex: number, topic?: string, spent?: boolean, includeBEEF?: boolean): Promise<Output | null>;
|
|
27
|
+
findOutputsForTransaction(txid: string, includeBEEF?: boolean): Promise<Output[]>;
|
|
28
|
+
findUTXOsForTopic(topic: string, since?: number, limit?: number, includeBEEF?: boolean): Promise<Output[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Maps a batch of raw output documents to `Output`s, dropping any that
|
|
31
|
+
* `toOutput` treats as non-serving (see its docstring). Every current
|
|
32
|
+
* caller's query already excludes `state: 'evicted'`, so this filter is
|
|
33
|
+
* defense in depth rather than the primary guard.
|
|
34
|
+
*/
|
|
35
|
+
private toOutputs;
|
|
36
|
+
deleteOutput(txid: string, outputIndex: number, topic: string): Promise<void>;
|
|
37
|
+
markUTXOAsSpent(txid: string, outputIndex: number, topic: string, spendingTxid?: string): Promise<void>;
|
|
38
|
+
updateConsumedBy(txid: string, outputIndex: number, topic: string, consumedBy: Array<{
|
|
39
|
+
txid: string;
|
|
40
|
+
outputIndex: number;
|
|
41
|
+
}>): Promise<void>;
|
|
42
|
+
updateTransactionBEEF(txid: string, _beef: number[]): Promise<void>;
|
|
43
|
+
insertAppliedTransaction(tx: AppliedTransaction): Promise<void>;
|
|
44
|
+
doesAppliedTransactionExist(tx: AppliedTransaction): Promise<boolean>;
|
|
45
|
+
updateLastInteraction(host: string, topic: string, since: number): Promise<void>;
|
|
46
|
+
getLastInteraction(host: string, topic: string): Promise<number>;
|
|
47
|
+
private outputId;
|
|
48
|
+
private toSafeNumber;
|
|
49
|
+
/**
|
|
50
|
+
* Maps a raw output document to an `Output`, or `null` when the document
|
|
51
|
+
* is not currently serving as overlay state. An admission eviction leaves
|
|
52
|
+
* its row in place (state: 'evicted') for audit/history, and it must never
|
|
53
|
+
* be reported as a live, unspent output — every caller that reaches here
|
|
54
|
+
* must treat a `null` result the same as "not found", regardless of
|
|
55
|
+
* whether its own query already excluded `evicted` rows.
|
|
56
|
+
*/
|
|
57
|
+
private toOutput;
|
|
58
|
+
/**
|
|
59
|
+
* Reads consumption edges persisted for this output (by either
|
|
60
|
+
* MongoAdmissionStorage.insertEdge during a commit, or
|
|
61
|
+
* MongoOverlayStorage.updateConsumedBy on the classic storage path) and
|
|
62
|
+
* returns the opposite endpoint of each matching edge: querying by the
|
|
63
|
+
* consumer side returns `outputsConsumed` (what this output's transaction
|
|
64
|
+
* spent), and querying by the source side returns `consumedBy` (what has
|
|
65
|
+
* since spent this output).
|
|
66
|
+
*/
|
|
67
|
+
private readConsumptionEdges;
|
|
68
|
+
private readScript;
|
|
69
|
+
private readBeef;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=MongoOverlayStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoOverlayStorage.d.ts","sourceRoot":"","sources":["../../../../../src/storage/mongo/MongoOverlayStorage.ts"],"names":[],"mappings":"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"}
|