@powerhousedao/reactor-hypercore 6.2.2-dev.8 → 6.2.2-dev.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +48 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -3
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
|
@@ -63,6 +63,24 @@ type PagedResults<T> = {
|
|
|
63
63
|
/**
|
|
64
64
|
* A string key in the format `documentId:scope:branch` used to identify a consistency checkpoint.
|
|
65
65
|
*/
|
|
66
|
+
/**
|
|
67
|
+
* One read-set stream and the highest operation index observed on it, or -1
|
|
68
|
+
* if it was observed empty.
|
|
69
|
+
*/
|
|
70
|
+
type AppendConditionStream = {
|
|
71
|
+
documentId: string;
|
|
72
|
+
scope: string;
|
|
73
|
+
branch: string;
|
|
74
|
+
revision: number;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* A read-set enforced by {@link IOperationStore.apply}: the append fails if
|
|
78
|
+
* any stream has operations past its recorded revision.
|
|
79
|
+
*/
|
|
80
|
+
type AppendCondition = {
|
|
81
|
+
streams: AppendConditionStream[];
|
|
82
|
+
};
|
|
83
|
+
/** Error history keeps messages, not classes, so failures match by prefix. */
|
|
66
84
|
/**
|
|
67
85
|
* A write transaction passed to {@link IOperationStore.apply}. Accumulates
|
|
68
86
|
* operations that are committed atomically when the callback returns.
|
|
@@ -76,7 +94,7 @@ interface AtomicTxn {
|
|
|
76
94
|
* revision field and lastModified timestamp.
|
|
77
95
|
*/
|
|
78
96
|
type DocumentRevisions = {
|
|
79
|
-
/** Map of scope to operation index for that scope */revision: Record<string, number>; /**
|
|
97
|
+
/** Map of scope to operation index for that scope */revision: Record<string, number>; /** The largest operation timestamp in the document, across every scope. */
|
|
80
98
|
latestTimestamp: string;
|
|
81
99
|
};
|
|
82
100
|
/**
|
|
@@ -97,6 +115,12 @@ interface IOperationStore {
|
|
|
97
115
|
* returned instead of throwing. If no matching stored row is found, the
|
|
98
116
|
* original error is propagated unchanged.
|
|
99
117
|
*
|
|
118
|
+
* With an {@link AppendCondition}, the append additionally fails with
|
|
119
|
+
* {@link AppendConditionFailedError} — writing nothing — if any read-set
|
|
120
|
+
* stream has operations past its recorded revision. The written and
|
|
121
|
+
* read-set streams are advisory-locked in sorted key order, so concurrent
|
|
122
|
+
* conditional appends on overlapping streams serialize.
|
|
123
|
+
*
|
|
100
124
|
* @param documentId - The document id
|
|
101
125
|
* @param documentType - The document type identifier
|
|
102
126
|
* @param scope - The operation scope (e.g. "global", "local")
|
|
@@ -104,9 +128,10 @@ interface IOperationStore {
|
|
|
104
128
|
* @param revision - Expected current revision (optimistic lock)
|
|
105
129
|
* @param fn - Callback that stages operations via {@link AtomicTxn}
|
|
106
130
|
* @param signal - Optional abort signal to cancel the request
|
|
131
|
+
* @param condition - Optional read-set to enforce at write time
|
|
107
132
|
* @returns The stored operations; empty array when no operations were staged
|
|
108
133
|
*/
|
|
109
|
-
apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<Operation[]>;
|
|
134
|
+
apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal, condition?: AppendCondition): Promise<Operation[]>;
|
|
110
135
|
/**
|
|
111
136
|
* Returns operations for a document/scope/branch whose index is greater
|
|
112
137
|
* than the given revision.
|
|
@@ -153,6 +178,16 @@ interface IOperationStore {
|
|
|
153
178
|
* @returns Object containing revision map and latest timestamp
|
|
154
179
|
*/
|
|
155
180
|
getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
|
|
181
|
+
/**
|
|
182
|
+
* The largest operation timestamp in one stream, or undefined when it is empty.
|
|
183
|
+
* Distinct from {@link DocumentRevisions.latestTimestamp}, which maxes over
|
|
184
|
+
* every scope.
|
|
185
|
+
*
|
|
186
|
+
* Must be a real maximum, not the last-indexed operation's timestamp: a
|
|
187
|
+
* re-evaluation pass re-appends at a fresh index while keeping the original
|
|
188
|
+
* timestamp, so a later timestamp can sit behind the last row.
|
|
189
|
+
*/
|
|
190
|
+
getStreamLatestTimestamp(documentId: string, scope: string, branch: string, signal?: AbortSignal): Promise<string | undefined>;
|
|
156
191
|
}
|
|
157
192
|
/**
|
|
158
193
|
* Stores periodic document snapshots (keyframes) so that document state
|
|
@@ -173,9 +208,7 @@ interface OperationFilter {
|
|
|
173
208
|
sinceRevision?: number;
|
|
174
209
|
}
|
|
175
210
|
/**
|
|
176
|
-
*
|
|
177
|
-
* updated by indexing operations (which must include `resultingState`) and
|
|
178
|
-
* queried with optional consistency tokens for read-after-write guarantees.
|
|
211
|
+
* Which sense of "exists" a caller of {@link IDocumentView.exists} means.
|
|
179
212
|
*/
|
|
180
213
|
//#endregion
|
|
181
214
|
//#region src/hypercore-operation-store.d.ts
|
|
@@ -183,12 +216,21 @@ declare class HypercoreOperationStore implements IOperationStore {
|
|
|
183
216
|
private bee;
|
|
184
217
|
private applyLock;
|
|
185
218
|
constructor(bee: Hyperbee);
|
|
186
|
-
apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<Operation[]>;
|
|
219
|
+
apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal, condition?: AppendCondition): Promise<Operation[]>;
|
|
220
|
+
/** Throws if any read-set stream has grown past its recorded revision. */
|
|
221
|
+
private assertConditionHolds;
|
|
187
222
|
private executeApply;
|
|
223
|
+
private isCreate;
|
|
188
224
|
getSince(documentId: string, scope: string, branch: string, revision: number, filter?: OperationFilter, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<Operation>>;
|
|
189
225
|
getSinceId(id: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<OperationWithContext>>;
|
|
190
226
|
getConflicting(documentId: string, scope: string, branch: string, minTimestamp: string, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<Operation>>;
|
|
191
227
|
getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
|
|
228
|
+
/**
|
|
229
|
+
* A real maximum over the rows, not the head record's `latestTimestampUtcMs`:
|
|
230
|
+
* that holds the last-indexed timestamp, which a re-append can leave behind a
|
|
231
|
+
* later one, so it would under-report and admit a backdated auth write.
|
|
232
|
+
*/
|
|
233
|
+
getStreamLatestTimestamp(documentId: string, scope: string, branch: string, signal?: AbortSignal): Promise<string | undefined>;
|
|
192
234
|
private serializeOperation;
|
|
193
235
|
private toOperation;
|
|
194
236
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["Dialect","SchemaModule","DynamicModule","QueryExecutor","QueryCreator","KyselyPlugin","DatabaseIntrospector","Driver","IsolationLevel","AccessMode","FunctionModule","LogConfig","QueryExecutorProvider","QueryResult","CompiledQuery","QueryId","Compilable","CaseBuilder","Expression","DrainOuterGeneric","ReleaseSavepoint","RollbackToSavepoint","ControlledConnection","_0","global","AsyncDisposable","SymbolConstructor","asyncDispose","sideEffect","Kysely","V","T","R","DB","KyselyConfig","KyselyProps","TransactionBuilder","ControlledTransactionBuilder","ConnectionBuilder","Record","Promise","Symbol","private","constructor","args","schema","dynamic","introspection","case","value","fn","transaction","startTransaction","connection","withPlugin","plugin","withoutPlugins","withSchema","withTables","destroy","isTransaction","getExecutor","executeQuery","query","queryId","Transaction","props","config","driver","executor","dialect","isKyselyProps","obj","plugins","log","ConnectionBuilderProps","execute","db","callback","TransactionBuilderProps","setAccessMode","accessMode","setIsolationLevel","isolationLevel","trx","ControlledTransaction","SN","S","ControlledTransactionProps","Command","isCommitted","isRolledBack","commit","rollback","savepoint","savepointName","rollbackToSavepoint","releaseSavepoint","cb","Action","CreateDocumentActionInput","DocumentModelModule","ISigner","Operation","OperationContext","OperationWithContext","OperationWithContext$1","PHDocument","PHDocumentState","SignatureVerificationHandler","UpgradeDocumentActionInput","UpgradeManifest","UpgradeReducer","UpgradeTransition","actions","documentActions","DocumentDriveDocument","DriveInput","FolderNode","Node","ILogger","kysely","Generated","Insertable","Kysely","Transaction","IProcessor","IProcessorHostModule","IProcessorManager","IProcessorManager$1","IRelationalDb","ProcessorApp","ProcessorFactory","ProcessorFactory$1","ProcessorFactoryBuilder","ProcessorFilter","ProcessorRecord","ProcessorStatus","RelationalDbProcessor","TrackedProcessor","TrackedProcessor$1","createRelationalDb","Pool","AttachmentHash","AttachmentRef","createDocumentAction","input","upgradeDocumentAction","deleteDocumentAction","documentId","addRelationshipAction","Record","sourceId","targetId","relationshipType","metadata","updateRelationshipAction","removeRelationshipAction","JobKind","JobQueueState","UNKNOWN","PREPROCESSING","PENDING","READY","RUNNING","RESOLVED","IJobExecutionHandle","Job","ErrorInfo$1","job","state","start","complete","fail","error","defer","JobMeta","id","kind","scope","branch","operations","createdAt","queueHint","retryCount","maxRetries","lastError","errorHistory","meta","QueueEventTypes","JOB_AVAILABLE","JobRoutingMeta","JobAvailableEvent","jobId","message","stack","ShutdownStatus","Promise","isShutdown","completed","PropagationMode","None","Cascade","RelationshipChangeType","Added","Removed","BatchMeta","batchId","batchJobIds","JobInfo","JobStatus","ConsistencyToken","status","createdAtUtcIso","completedAtUtcIso","result","consistencyToken","WRITE_READY","READ_READY","FAILED","ViewFilter","scopes","revision","SearchFilter","type","parentId","ids","slugs","PagingOptions","cursor","limit","PagedResults","T","results","options","next","nextCursor","totalCount","ConsistencyKey","ConsistencyCoordinate","operationIndex","version","coordinates","IReadModel","name","indexOperations","IReadModelCoordinator","readModels","stop","drain","getChainDepth","ChannelScheme","CONNECT","SWITCHBOARD","JwtHandler","url","PollBehavior","Auto","Manual","RemoteOptions","sinceTimestampUtcMs","pollBehavior","RemoteFilter","RemoteCursor","remoteName","cursorType","cursorOrdinal","lastSyncedAtUtcMs","ChannelMeta","SyncEnvelopeType","SyncEnvelope","channelMeta","key","dependsOn","SyncOperationStatus","Unknown","TransportPending","ExecutionPending","Applied","Error","ChannelErrorSource","Channel","Inbox","Outbox","SyncOperationErrorType","ChannelHealth","lastSuccessUtcMs","lastFailureUtcMs","failureCount","ConnectionState","ConnectionStateSnapshot","pushBlocked","pushFailureCount","receivingPages","requiresAuth","ConnectionStateChangedEvent","remoteId","previous","current","snapshot","RemoteStatus","push","pull","ChannelConfig","parameters","RemoteRecord","DriveCollectionId","collectionId","channelConfig","filter","SyncEventTypes","SYNC_PENDING","SYNC_SUCCEEDED","SYNC_FAILED","DEAD_LETTER_ADDED","CONNECTION_STATE_CHANGED","SyncPendingEvent","syncOperationCount","remoteNames","SyncSucceededEvent","SyncFailedEvent","Array","successCount","errors","DeadLetterAddedEvent","errorSource","SyncResultStatus","SyncResultError","SyncResult","DuplicateOperationError","constructor","description","OptimisticLockError","RevisionMismatchError","expected","actual","AtomicTxn","addOperations","DocumentRevisions","latestTimestamp","IOperationStore","AbortSignal","OperationFilter","apply","documentType","txn","fn","signal","getSince","paging","getSinceId","getConflicting","minTimestamp","getRevisions","IKeyframeStore","putKeyframe","document","findNearestKeyframe","targetRevision","listKeyframes","deleteKeyframes","ViewFilter$1","excludeSourceRemote","actionTypes","timestampFrom","timestampTo","sinceRevision","IDocumentView","TDocument","init","items","waitForConsistency","token","timeoutMs","exists","documentIds","get","view","getMany","getByIdOrSlug","identifier","findByType","resolveSlug","slug","resolveSlugs","resolveIdOrSlug","DocumentRelationship","Date","updatedAt","DocumentGraphEdge","from","to","IDocumentGraph","nodes","edges","IDocumentIndexer","getOutgoing","types","getIncoming","hasRelationship","getUndirectedRelationships","a","b","getDirectedRelationships","findPath","findAncestors","getOrphanedChildren","parentIds","getRelationshipTypes","ISyncRemoteStorage","list","upsert","remote","remove","ISyncCursorStorage","DeadLetterRecord","jobDependencies","errorMessage","ISyncDeadLetterStorage","add","deadLetter","removeByRemote","listQuarantinedDocumentIds","OperationIndexEntry","ordinal","sourceRemote","IOperationIndexTxn","createCollection","addToCollection","removeFromCollection","write","IOperationIndex","commit","find","getSinceOrdinal","getLatestTimestampForCollection","getCollectionsForDocuments","driveId","forDrive","fromKey","toString","equals","other","IWriteCache","getState","putState","invalidate","clear","startup","shutdown","Unsubscribe","Subscriber","data","EventBusAggregateError","ReactorEventTypes","JOB_PENDING","JOB_RUNNING","JOB_WRITE_READY","JOB_READ_READY","JOB_FAILED","READMODEL_BATCH_COMPLETED","READMODEL_INDEXED","MODEL_LOADED","ReadModelStage","ReadModelIndexingStage","ModelLoadedEvent","JobPendingEvent","jobMeta","JobRunningEvent","JobWriteReadyEvent","collectionMemberships","JobReadReadyEvent","JobFailedEvent$1","ReadModelBatchCompletedEvent","batchSize","chainWaitDurationMs","preReadyDurationMs","emitDurationMs","postReadyDurationMs","ReadModelIndexedEvent","readModelName","stage","durationMs","operationCount","success","IEventBus","K","subscribe","event","subscriber","emit","IJobAwaiter","waitForJob","JobAwaiter","eventBus","getJobStatus","pendingJobs","unsubscribers","subscribeToEvents","handleWriteReady","handleReadReady","handleJobFailed","checkAndResolveWaiters","ISubscriptionErrorHandler","SubscriptionErrorContext","handleError","context","eventType","subscriptionId","eventData","IReactorSubscriptionManager","onDocumentCreated","callback","search","onDocumentDeleted","onDocumentStateUpdated","onRelationshipChanged","childId","changeType","DocumentChangeType","Created","Deleted","Updated","ParentAdded","ParentRemoved","ChildAdded","ChildRemoved","DocumentChangeEvent","documents","CreateDocumentOptions","parentIdentifier","documentModelVersion","IDriveClient","create","addFile","driveIdentifier","parentFolder","addFolder","removeNode","nodeId","renameNode","setPreferredEditorOnNode","preferredEditor","moveNode","srcNodeId","targetParentFolderId","copyNode","getNode","listNodes","IReactorClient","BatchExecutionRequest","BatchExecutionResult","BatchLoadRequest","BatchLoadResult","drives","getDocumentModelModules","namespace","getDocumentModelModule","getOperations","documentIdentifier","getOutgoingRelationships","sourceIdentifier","getIncomingRelationships","targetIdentifier","createEmpty","documentModelType","createDocumentInDrive","execute","executeAsync","executeBatch","request","rename","setPreferredEditor","addRelationship","removeRelationship","moveRelationship","sourceParentIdentifier","targetParentIdentifier","source","target","deleteDocument","propagate","deleteDocuments","identifiers","loadBatch","ReactorClient","IReactor","logger","reactor","signer","subscriptionManager","jobAwaiter","documentIndexer","documentView","getOperationsWithCompositeCursor","removeAllIncomingRelationships","JobResult","operationsWithContext","completedAt","duration","JobExecutorConfig","maxSkipThreshold","maxConcurrency","jobTimeoutMs","retryBaseDelayMs","retryMaxDelayMs","yieldDeadlineMs","JobExecutorEventTypes","JOB_STARTED","JOB_COMPLETED","EXECUTOR_STARTED","EXECUTOR_STOPPED","JobStartedEvent","startedAt","workerId","JobCompletedEvent","JobFailedEvent","willRetry","ExecutorStartedEvent","config","ExecutorStoppedEvent","stoppedAt","graceful","ExecutorManagerStatus","isRunning","numExecutors","activeJobs","totalJobsProcessed","SanitizedArg","ErrorInfo","cause","ModuleRef","packageName","exportName","filePath","FactorySpec","module","initArgs","SignatureVerifierSpec","DocumentModelSpec","ModelManifestEntry","spec","DbConfig","host","port","database","user","password","ssl","applicationName","poolSize","connectionTimeoutMillis","idleTimeoutMillis","WorkerPoolConfig","enabled","numWorkers","workerType","heartbeatMs","workerPgPoolSize","JobWriteReadyPayload","InitMessage","correlationId","poolConfig","db","signatureVerifier","models","ExecuteMessage","AbortMessage","targetCorrelationId","reason","ShutdownMessage","graceMs","LoadModelMessage","model","ParentMessage","ReadyMessage","ResultMessage","writeReady","ModelLoadedMessage","ModelLoadFailedMessage","LogMessage","level","args","timestamp","HeartbeatMessage","inFlightCorrelationIds","MetricsMessage","counters","gauges","PoolAcquireSamplesMessage","poolName","durations","size","idle","waiting","WorkerMessage","WorkerInFlightSnapshot","WorkerExecutionOutcome","IExecutorWorker","index","abort","loadModel","entry","isIdle","getInFlight","IJobExecutor","executeJob","IJobExecutorManager","getExecutors","getStatus","IJobTracker","registerJob","jobInfo","markRunning","markFailed","IQueue","enqueue","dequeue","dequeueNext","dequeueNextMatching","predicate","totalSize","clearAll","hasJobs","completeJob","failJob","retryJob","isDrained","block","onDrained","unblock","ViewStateTable","readModelId","lastOrdinal","lastOperationTimestamp","DocumentSnapshotTable","content","lastOperationIndex","lastOperationHash","lastUpdatedAt","snapshotVersion","isDeleted","deletedAt","SlugMappingTable","ProcessorCursorTable","processorId","factoryId","processorIndex","lastErrorTimestamp","DocumentViewDatabase","ViewState","DocumentSnapshot","SlugMapping","ProcessorCursor","InsertableDocumentSnapshot","FileModelSource","PackageModelSource","subpath","DocumentModelSource","RegistrationResult","item","IDocumentModelLoader","load","IDocumentModelRegistry","registerModules","modules","unregisterModules","documentTypes","getModule","getAllModules","getSupportedVersions","getLatestVersion","registerUpgradeManifests","manifests","unregisterUpgradeManifests","getUpgradeManifest","computeUpgradePath","fromVersion","toVersion","getUpgradeReducer","IConsistencyTracker","update","getLatest","waitFor","serialize","hydrate","entries","makeConsistencyKey","ConsistencyTracker","waiters","deduplicateCoordinates","areCoordinatesSatisfied","checkWaiters","removeWaiter","OperationTable","opId","prevOpId","writeTimestampUtcMs","timestampUtcMs","action","skip","hash","KeyframeTable","DocumentCollectionTable","joinedOrdinal","leftOrdinal","OperationIndexOperationTable","SyncRemoteTable","collection_id","channel_type","channel_id","remote_name","channel_parameters","filter_document_ids","filter_scopes","filter_branch","push_state","push_last_success_utc_ms","push_last_failure_utc_ms","push_failure_count","pull_state","pull_last_success_utc_ms","pull_last_failure_utc_ms","pull_failure_count","created_at","updated_at","SyncCursorTable","cursor_type","cursor_ordinal","last_synced_at_utc_ms","SyncDeadLetterTable","job_id","job_dependencies","document_id","error_source","error_message","Database$1","Keyframe","document_collections","operation_index_operations","sync_remotes","sync_cursors","sync_dead_letters","DocumentTable","DocumentRelationshipTable","IndexerStateTable","lastOperationId","DocumentIndexerDatabase","Document","IndexerState","PoolStats","PoolInstrumentation","getStats","onAcquire","listener","instrumentPgPool","pool","ForwardingPoolInstrumentation","pushSamples","updateStats","stats","DRIVE_AUTH_ERROR_MESSAGES","forbidden","authenticationRequired","isDriveAuthError","PollingChannelError","ChannelError","SyncOperationStatusCallback","SyncOperation","syncOp","prev","SyncOperationAggregateError","deliveredCount","emittedCount","callbacks","on","started","transported","executed","failed","transition","MailboxCallback","IMailbox","ReadonlyArray","ackOrdinal","latestOrdinal","advanceOrdinal","onAdded","onRemoved","pause","resume","flush","isPaused","Mailbox","itemsMap","addedCallbacks","removedCallbacks","paused","addedBuffer","removedBuffer","_ack","_latestOrdinal","SyncStatus","Synced","Outgoing","Incoming","OutgoingAndIncoming","SyncStatusChangeCallback","ISyncStatusTracker","IChannel","onChange","trackRemote","channel","untrackRemote","SyncStatusTracker","remotes","seen","handleAdded","handleRemoved","getOrCreateCounts","notifyChange","ConnectionStateChangeCallback","inbox","outbox","getConnectionState","onConnectionStateChange","triggerPull","IChannelFactory","instance","cursorStorage","RemoteMeta","Remote","ISyncManager","getByName","getById","waitForSync","getSyncStatus","onSyncStatusChange","ExecutionJobPlan","jobs","LoadJobPlan","externalDeps","kill","getDocumentModels","getBySlug","docId","ReactorFeatures","Database","SyncModule","syncManager","InProcessSyncModule","remoteStorage","deadLetterStorage","channelFactory","ReactorModule","documentModelRegistry","syncModule","InProcessReactorModule","queue","jobTracker","executorManager","operationStore","keyframeStore","writeCache","documentViewConsistencyTracker","documentIndexerConsistencyTracker","readModelCoordinator","processorManager","processorManagerConsistencyTracker","pools","ReactorClientModule","client","reactorModule","InProcessReactorClientModule","DriveClient","documentExists","removeFileNode","ICollectionMembershipCache","IDocumentModelResolver","ensureModelLoaded","ModelLoadedBroadcastHook","DocumentModelResolver","registry","loader","loadingModels","failedModelTypes","broadcastHook","modelLoadedHook","setBroadcastHook","hook","setModelLoadedHook","loadRegisterAndBroadcast","notifyPeersModelLoaded","NullDocumentModelResolver","WorkerFactory","WriteCacheConfig","maxDocuments","ringBufferSize","keyframeInterval","DocumentStreamKey","CachedSnapshot","KeyframeSnapshot","BuiltInReadModelKind","ProjectionInitMessage","shardId","shardIndex","shardCount","preReadyKinds","postReadyKinds","chainDepthReportIntervalMs","ProjectionWriteReadyMessage","ProjectionDrainMessage","ProjectionShutdownMessage","ProjectionParentMessage","ProjectionReadyMessage","ProjectionReadReadyMessage","ProjectionReadModelIndexedMessage","ProjectionBatchCompletedMessage","ProjectionChainDepthMessage","depth","ProjectionPoolAcquireSamplesMessage","ProjectionDrainedMessage","ProjectionLogMessage","ProjectionWorkerMessage","ProjectionTransportEventMap","exit","ProjectionTransportEvent","ProjectionTransportListener","E","payload","IProjectionTransport","postMessage","off","terminate","ProjectionWorkerFactory","ProjectionShardManagerConfig","factory","hostBus","initTimeoutMs","shutdownGraceMs","drainTimeoutMs","poolInstrumentations","SignerConfig","verifier","MigrationStrategy","MigrationResult","migrationsExecuted","SyncBuilder","ReadonlySet","withChannelFactory","withRemoteStorage","storage","withCursorStorage","withDeadLetterStorage","withMaxDeadLettersPerRemote","withMaxInboxBatchSize","build","driveContainerTypes","buildModule","ReadModelFactoryDeps","ReadModelFactory","deps","WorkerPoolBase","WorkerPoolOptions","ProjectionShardBuilderConfig","ReactorBuilder","Partial","documentModelSources","upgradeManifests","features","readModelFactories","executorConfig","writeCacheConfig","migrationStrategy","syncBuilder","kyselyInstance","signalHandlersEnabled","queueInstance","channelScheme","jwtHandler","documentModelLoader","shutdownHooks","workerPool","resolvedModelManifest","projectionShardConfig","projectionWorkerFactory","instrumentedPools","withLogger","withDocumentModelSources","sources","withUpgradeManifests","withFeatures","withReadModel","readModel","withReadModelFactory","withReadModelCoordinator","withExecutor","executor","withExecutorConfig","withWriteCacheConfig","withDriveContainerTypes","withMigrationStrategy","strategy","withSync","withEventBus","withSignatureVerifier","withKysely","withInstrumentedPool","instrumentation","withQueue","withChannelScheme","scheme","withJwtHandler","handler","withDocumentModelLoader","withSignalHandlers","withShutdownHook","withWorkerPool","withProjectionShards","withProjectionWorkerFactory","getResolvedModelManifest","resolveReactorDbConfig","createProjectionShardManager","createDefaultProjectionWorkerFactory","createDefaultWorkerFactory","createPostgresDatabase","attachSignalHandlers","ReactorClientBuilder","reactorBuilder","withReactorBuilder","withReactor","withSigner","withSubscriptionManager","withJobAwaiter","DEFAULT_DRIVE_CONTAINER_TYPES","Reactor","shutdownStatus","setShutdown","setCompleted","findByIds","findBySlugs","findByParentId","emitJobPending","ParsedDriveUrl","graphqlEndpoint","parseDriveUrl","driveIdFromUrl","createMutableShutdownStatus","initialState","value","ParsedPaging","offset","parsePagingOptions","defaultLimit","DefaultSubscriptionErrorHandler","DocumentCreatedCallback","DocumentDeletedCallback","DocumentStateUpdatedCallback","RelationshipChangedCallback","ReactorSubscriptionManager","Map","createdSubscriptions","deletedSubscriptions","updatedSubscriptions","relationshipSubscriptions","subscriptionCounter","errorHandler","notifyDocumentsCreated","notifyDocumentsDeleted","notifyDocumentsUpdated","notifyRelationshipChanged","childType","filterDocumentIds","filterDocuments","matchesRelationshipFilter","EventBus","eventTypeToSubscribers","InMemoryQueue","Set","resolver","queues","jobIdToQueueKey","docIdToJobId","jobIdToDocId","completedJobs","jobIndex","isBlocked","onDrainedCallback","isPausedFlag","toErrorInfo","createQueueKey","getQueue","isDocumentExecuting","markJobExecuting","markJobComplete","areDependenciesMet","getNextJobWithMetDependencies","getCreateDocumentType","deferJob","checkDrained","getPendingJobs","getExecutingJobIds","getJob","InMemoryJobTracker","JobExecutorFactory","SimpleJobExecutorManager","executorFactory","executors","unsubscribe","deferredJobs","resultHandler","processNextJob","checkForMoreJobs","processExistingJobs","flushDeferredJobs","CachedDocumentMeta","documentScopeRevision","IDocumentMetaCache","getDocumentMeta","rebuildAtRevision","putDocumentMeta","RingBuffer","buffer","head","capacity","getAll","length","DocumentStream","ringBuffer","KyselyWriteCache","streams","lruTracker","withScopedStores","getStream","coldMissRebuild","resolveModuleVersionForOp","warmMissRebuild","findNearestOlderSnapshot","makeStreamKey","getOrCreateStream","isKeyframeRevision","KyselyOperationStore","trx","queryExecutor","withTransaction","resolveUniqueConstraint","executeApply","findIdempotentReplay","rowToOperation","rowToOperationWithContext","KyselyKeyframeStore","ExecutionStores","documentMetaCache","collectionMembershipCache","IExecutionScope","run","stores","SimpleJobExecutor","signatureVerifierModule","documentActionHandler","executionScope","getCollectionMembershipsForOperations","processActions","executeRegularAction","executeLoadJob","accumulateResultOrReturnError","createForwardingLogger","msg","post","tags","errorToInfo","err","sanitizeArg","WeakSet","workerEntryPath","ModuleNotFoundError","requestedVersion","isError","DuplicateModuleError","InvalidModuleError","DuplicateManifestError","DocumentModelRegistry","manifestsToRegister","BaseReadModelConfig","rebuildStateOnInit","BaseReadModel","consistencyTracker","commitOperations","rebuildStateForOperations","loadState","initializeState","saveState","updateConsistencyTracker","IndexerDatabase","KyselyDocumentIndexer","_db","handleAddRelationship","handleRemoveRelationship","handleUpdateRelationship","ReadModelCoordinator","preReady","postReady","chains","emitEmptyReadReady","runChain","indexWithTiming","emitReadModelIndexed","emitBatchCompleted","queueKeyFor","Database$2","KyselyDocumentView","REACTOR_SCHEMA","runMigrations","schema","getMigrationStatus","MigrationInfo","KyselySyncCursorStorage","KyselySyncRemoteStorage","GqlRequestChannelFactory","GqlResponseChannelFactory","IPollTimer","setDelegate","delegate","triggerNow","GqlChannelConfig","fetch","fetchFn","GqlRequestChannel","bufferedOutbox","channelId","pollTimer","abortController","lastPersistedInboxOrdinal","lastPersistedOutboxOrdinal","pushRetryTimer","isPushing","pendingDrain","isRecovering","connectionState","connectionStateCallbacks","transitionConnectionState","poll","handleRemoteDeadLetters","handlePollError","recoverFromChannelNotFound","resumePushAfterRecovery","pollSyncEnvelopes","touchRemoteChannel","attemptPush","schedulePushRetry","drainOutbox","classifyError","pushSyncOperations","getAuthorizationHeader","executeGraphQL","poller","GqlResponseChannel","PollTimerConfig","intervalMs","maxQueueDepth","backpressureCheckIntervalMs","startPaused","IntervalPollTimer","timer","running","consecutiveFailures","tick","scheduleNext","scheduleRetry","scheduleBackpressureRecheck","getIntervalMs","setIntervalMs","ms","envelopesToSyncOperations","envelope","OperationBatch","trimMailboxFromAckOrdinal","mailbox","batchOperationsByDocument","consolidateSyncOperations","syncOps","KeyframeValidationIssue","keyframeHash","replayedHash","SnapshotValidationIssue","snapshotHash","ValidationResult","isConsistent","keyframeIssues","snapshotIssues","RebuildResult","keyframesDeleted","scopesInvalidated","IDocumentIntegrityService","validateDocument","rebuildKeyframes","rebuildSnapshots","DocumentIntegrityService","discoverScopes","ProcessorManager","factoryRegistry","processorsByDrive","factoryToProcessors","knownDrives","cursorCache","registerFactory","unregisterFactory","allTrackedProcessors","detectAndRegisterNewDrives","isDriveCreation","detectAndCleanupDeletedDrives","discoverExistingDrives","isDeletedDocumentADrive","createProcessorsForDrive","backfillProcessor","retryProcessor","cleanupDriveProcessors","safeDisconnect","routeOperationsToProcessors","loadAllCursors","safeSaveProcessorCursor","saveProcessorCursor","deleteProcessorCursors","InMemoryJobExecutor","ReactorJobFailedEvent","StorageDatabase","WorkerErrorInfo"],"sources":["../../../node_modules/.pnpm/kysely@0.28.16/node_modules/kysely/dist/esm/kysely.d.ts","../../reactor/dist/index.d.ts","../src/hypercore-operation-store.ts","../src/types.ts","../src/hypercore-atomic-transaction.ts","../src/storage-manager.ts","../src/key-encoding.ts"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["Dialect","SchemaModule","DynamicModule","QueryExecutor","QueryCreator","KyselyPlugin","DatabaseIntrospector","Driver","IsolationLevel","AccessMode","FunctionModule","LogConfig","QueryExecutorProvider","QueryResult","CompiledQuery","QueryId","Compilable","CaseBuilder","Expression","DrainOuterGeneric","ReleaseSavepoint","RollbackToSavepoint","ControlledConnection","_0","global","AsyncDisposable","SymbolConstructor","asyncDispose","sideEffect","Kysely","V","T","R","DB","KyselyConfig","KyselyProps","TransactionBuilder","ControlledTransactionBuilder","ConnectionBuilder","Record","Promise","Symbol","private","constructor","args","schema","dynamic","introspection","case","value","fn","transaction","startTransaction","connection","withPlugin","plugin","withoutPlugins","withSchema","withTables","destroy","isTransaction","getExecutor","executeQuery","query","queryId","Transaction","props","config","driver","executor","dialect","isKyselyProps","obj","plugins","log","ConnectionBuilderProps","execute","db","callback","TransactionBuilderProps","setAccessMode","accessMode","setIsolationLevel","isolationLevel","trx","ControlledTransaction","SN","S","ControlledTransactionProps","Command","isCommitted","isRolledBack","commit","rollback","savepoint","savepointName","rollbackToSavepoint","releaseSavepoint","cb","Action","AuthRequest","AuthSubject","CreateDocumentActionInput","DocumentModelModule","ISigner","Operation","OperationContext","OperationWithContext","OperationWithContext$1","PHAuthState","PHDocument","PHDocumentState","SignatureVerificationHandler","UpgradeDocumentActionInput","UpgradeManifest","UpgradeReducer","UpgradeTransition","actions","documentActions","DocumentDriveDocument","DriveInput","FolderNode","Node","ILogger","kysely","Generated","Insertable","Kysely","Transaction","IProcessor","IProcessorHostModuleBase","IProcessorHostModuleBase$1","IProcessorManager","IProcessorManager$1","IRelationalDb","ProcessorApp","ProcessorFactory","ProcessorFactory$1","ProcessorFactoryBuilder","ProcessorFilter","ProcessorRecord","ProcessorStatus","RelationalDbProcessor","TrackedProcessor","TrackedProcessor$1","createRelationalDb","Pool","AttachmentHash","AttachmentRef","createDocumentAction","input","upgradeDocumentAction","deleteDocumentAction","documentId","addRelationshipAction","Record","sourceId","targetId","relationshipType","metadata","updateRelationshipAction","removeRelationshipAction","JobKind","JobQueueState","UNKNOWN","PREPROCESSING","PENDING","READY","RUNNING","RESOLVED","RetryAccounting","CountAgainstLimit","ExemptFromLimit","IJobExecutionHandle","Job","ErrorInfo$1","job","state","start","complete","fail","error","defer","JobMeta","id","kind","scope","branch","operations","createdAt","queueHint","retryCount","maxRetries","lastError","errorHistory","meta","QueueEventTypes","JOB_AVAILABLE","JobRoutingMeta","JobAvailableEvent","jobId","name","message","stack","ShutdownStatus","Promise","isShutdown","completed","PropagationMode","None","Cascade","RelationshipChangeType","Added","Removed","BatchMeta","batchId","batchJobIds","JobInfo","JobStatus","ConsistencyToken","status","createdAtUtcIso","completedAtUtcIso","result","consistencyToken","WRITE_READY","READ_READY","FAILED","ViewFilter","scopes","revision","subject","SearchFilter","type","parentId","ids","slugs","PagingOptions","cursor","limit","PagedResults","T","results","options","next","nextCursor","totalCount","ConsistencyKey","ConsistencyCoordinate","operationIndex","version","coordinates","IReadModel","indexOperations","IReadModelCoordinator","readModels","stop","drain","getChainDepth","ReadModelRegistrationStage","ILiveReadModelCoordinator","addReadModel","readModel","stage","supportsLiveReadModelRegistration","coordinator","ChannelScheme","CONNECT","SWITCHBOARD","JwtHandler","url","PollBehavior","Auto","Manual","RemoteOptions","sinceTimestampUtcMs","pollBehavior","boundAddress","RemoteFilter","RemoteCursor","remoteName","cursorType","cursorOrdinal","lastSyncedAtUtcMs","ChannelMeta","SyncEnvelopeType","SyncEnvelope","channelMeta","key","dependsOn","SyncOperationStatus","Unknown","TransportPending","ExecutionPending","Applied","Error","ChannelErrorSource","Channel","Inbox","Outbox","SyncOperationErrorType","ChannelHealth","lastSuccessUtcMs","lastFailureUtcMs","failureCount","ConnectionState","ConnectionStateSnapshot","pushBlocked","pushFailureCount","receivingPages","requiresAuth","ConnectionStateChangedEvent","remoteId","previous","current","snapshot","RemoteStatus","push","pull","ChannelConfig","parameters","RemoteRecord","DriveCollectionId","collectionId","channelConfig","filter","SyncEventTypes","SYNC_PENDING","SYNC_SUCCEEDED","SYNC_FAILED","DEAD_LETTER_ADDED","CONNECTION_STATE_CHANGED","SyncPendingEvent","syncOperationCount","remoteNames","SyncSucceededEvent","SyncFailedEvent","Array","successCount","errors","DeadLetterAddedEvent","errorSource","errorType","SyncResultStatus","SyncResultError","SyncResult","DuplicateOperationError","constructor","description","OptimisticLockError","RevisionMismatchError","expected","actual","DocumentAlreadyExistsError","headRevision","isError","AppendConditionStream","AppendCondition","streams","APPEND_CONDITION_FAILED_PREFIX","AppendConditionFailedError","condition","isFailureMessage","AtomicTxn","addOperations","DocumentRevisions","latestTimestamp","IOperationStore","AbortSignal","OperationFilter","apply","documentType","txn","fn","signal","getSince","paging","getSinceId","getConflicting","minTimestamp","getRevisions","getStreamLatestTimestamp","IKeyframeStore","putKeyframe","document","findNearestKeyframe","targetRevision","listKeyframes","deleteKeyframes","ViewFilter$1","excludeSourceRemote","actionTypes","timestampFrom","timestampTo","sinceRevision","DocumentExistence","LiveOnly","IncludingDeleted","IDocumentView","TDocument","init","items","waitForConsistency","token","timeoutMs","exists","documentIds","existence","get","view","getMany","getByIdOrSlug","identifier","findByType","resolveSlug","slug","resolveSlugs","resolveIdOrSlug","DocumentRelationship","Date","updatedAt","DocumentGraphEdge","from","to","IDocumentGraph","nodes","edges","IDocumentIndexer","getOutgoing","types","getIncoming","hasRelationship","getUndirectedRelationships","a","b","getDirectedRelationships","findPath","findAncestors","getOrphanedChildren","parentIds","getRelationshipTypes","ISyncRemoteStorage","list","upsert","remote","remove","ISyncCursorStorage","DeadLetterRecord","jobDependencies","errorMessage","ISyncDeadLetterStorage","add","deadLetter","removeByRemote","listQuarantinedDocumentIds","OperationIndexEntry","ordinal","sourceRemote","IOperationIndexTxn","createCollection","addToCollection","removeFromCollection","recordGroupReferences","groupIds","write","getMembershipInvalidations","IOperationIndex","commit","find","getSinceOrdinal","getLatestTimestampForCollection","getCollectionsForDocuments","getGroupReferencers","groupId","driveId","forDrive","fromKey","toString","equals","other","WriteCacheConfig","maxDocuments","ringBufferSize","keyframeInterval","DocumentStreamKey","SnapshotPosition","Head","Historical","CachedSnapshot","position","KeyframeSnapshot","IWriteCache","getState","putState","putRun","run","invalidate","clear","startup","shutdown","Unsubscribe","Subscriber","data","EventBusAggregateError","ReactorEventTypes","JOB_PENDING","JOB_RUNNING","JOB_WRITE_READY","JOB_READ_READY","JOB_FAILED","READMODEL_BATCH_COMPLETED","READMODEL_INDEXED","MODEL_LOADED","ReadModelStage","ReadModelIndexingStage","ModelLoadedEvent","JobPendingEvent","jobMeta","JobRunningEvent","JobWriteReadyEvent","collectionMemberships","JobReadReadyEvent","JobFailedEvent$1","ReadModelBatchCompletedEvent","batchSize","chainWaitDurationMs","preReadyDurationMs","emitDurationMs","postReadyDurationMs","ReadModelIndexedEvent","readModelName","durationMs","operationCount","success","IEventBus","K","subscribe","event","subscriber","emit","IJobAwaiter","waitForJob","JobAwaiter","eventBus","getJobStatus","pendingJobs","unsubscribers","subscribeToEvents","handleWriteReady","handleReadReady","handleJobFailed","checkAndResolveWaiters","ISubscriptionErrorHandler","SubscriptionErrorContext","handleError","context","eventType","subscriptionId","eventData","IReactorSubscriptionManager","onDocumentCreated","callback","search","onDocumentDeleted","onDocumentStateUpdated","onRelationshipChanged","childId","changeType","StreamQuery","IStreamStateReader","DecisionTarget","DecisionContext","scopeState","actionInput","StreamHistory","Projection","M","Partial","query","model","queryOverHistory","reads","decidingActions","operation","Evaluation","decision","reason","DecisionModel","projections","foldEvaluatedScope","evaluatesScope","decide","request","ctx","BuiltDecisionModel","appendCondition","DocumentChangeType","Created","Deleted","Updated","ParentAdded","ParentRemoved","ChildAdded","ChildRemoved","DocumentChangeEvent","documents","CreateDocumentOptions","parentIdentifier","documentModelVersion","UpgradeDocumentOptions","maxConflictRetries","IDriveClient","create","addFile","driveIdentifier","parentFolder","addFolder","removeNode","nodeId","renameNode","setPreferredEditorOnNode","preferredEditor","moveNode","srcNodeId","targetParentFolderId","copyNode","getNode","listNodes","ActionCandidate","ActionEvaluations","evaluations","allAllowed","anyAllowed","allDenied","anyDenied","IReactorClient","BatchExecutionRequest","BatchExecutionResult","BatchLoadRequest","BatchLoadResult","drives","getDocumentModelModules","namespace","getDocumentModelModule","isDocumentIdTaken","getOperations","documentIdentifier","getOutgoingRelationships","sourceIdentifier","getIncomingRelationships","targetIdentifier","evaluateActions","candidates","createEmpty","documentModelType","getDocumentModelModuleForDocument","upgradeDocument","toVersion","createDocumentInDrive","execute","executeAsync","executeBatch","rename","setPreferredEditor","addRelationship","removeRelationship","moveRelationship","sourceParentIdentifier","targetParentIdentifier","source","target","deleteDocument","propagate","deleteDocuments","identifiers","loadBatch","ICollectionMembershipCache","CachedDocumentMeta","documentScopeRevision","IDocumentMetaCache","getDocumentMeta","rebuildAtRevision","putDocumentMeta","OperationTable","opId","prevOpId","writeTimestampUtcMs","timestampUtcMs","index","action","skip","deniedReason","hash","KeyframeTable","DocumentCollectionTable","joinedOrdinal","leftOrdinal","OperationIndexOperationTable","SyncRemoteTable","collection_id","channel_type","channel_id","remote_name","channel_parameters","filter_document_ids","filter_scopes","filter_branch","push_state","push_last_success_utc_ms","push_last_failure_utc_ms","push_failure_count","pull_state","pull_last_success_utc_ms","pull_last_failure_utc_ms","pull_failure_count","bound_address","created_at","updated_at","SyncCursorTable","cursor_type","cursor_ordinal","last_synced_at_utc_ms","SyncDeadLetterTable","job_id","job_dependencies","document_id","error_source","error_message","error_type","GroupReferenceTable","Database$1","Keyframe","document_collections","operation_index_operations","group_references","sync_remotes","sync_cursors","sync_dead_letters","DocumentTable","DocumentRelationshipTable","IndexerStateTable","lastOperationId","lastOperationTimestamp","DocumentIndexerDatabase","Document","IndexerState","SanitizedArg","ErrorInfo","cause","ModuleRef","packageName","exportName","filePath","FactorySpec","module","initArgs","SignatureVerifierSpec","DocumentModelSpec","ModelManifestEntry","spec","DbConfig","host","port","database","user","password","ssl","applicationName","poolSize","connectionTimeoutMillis","idleTimeoutMillis","WorkerPoolConfig","enabled","numWorkers","workerType","heartbeatMs","workerPgPoolSize","JobWriteReadyPayload","InitMessage","JobExecutorConfig","correlationId","workerId","poolConfig","db","signatureVerifier","models","executorConfig","ExecuteMessage","AbortMessage","targetCorrelationId","ShutdownMessage","graceMs","LoadModelMessage","ParentMessage","ReadyMessage","ResultMessage","JobResult","writeReady","ModelLoadedMessage","ModelLoadFailedMessage","LogMessage","level","args","timestamp","HeartbeatMessage","inFlightCorrelationIds","MetricsMessage","counters","gauges","PoolAcquireSamplesMessage","poolName","durations","size","idle","waiting","WorkerMessage","FileModelSource","PackageModelSource","subpath","DocumentModelSource","RegistrationResult","item","IDocumentModelLoader","load","IDocumentModelRegistry","registerModules","modules","unregisterModules","documentTypes","getModule","getAllModules","getSupportedVersions","getLatestVersion","registerUpgradeManifests","manifests","unregisterUpgradeManifests","getUpgradeManifest","computeUpgradePath","fromVersion","getUpgradeReducer","RingBuffer","buffer","head","capacity","getAll","length","DocumentStream","ringBuffer","KyselyWriteCache","lruTracker","keyframeStore","operationStore","registry","config","withScopedStores","store","persistKeyframe","getStream","coldMissRebuild","applyPendingUpgrades","applyTailPendingUpgrades","applyPendingUpgrade","stampRevisions","operationAt","resolveModuleVersionForOp","warmMissRebuild","findNearestOlderSnapshot","makeStreamKey","getOrCreateStream","isKeyframeRevision","KyselyOperationStore","trx","queryExecutor","withTransaction","resolveUniqueConstraint","executeApply","acquireStreamLocks","insertGuarded","findIdempotentReplay","isCreate","rowToOperation","rowToOperationWithContext","KyselyKeyframeStore","ExecutionStores","writeCache","documentMetaCache","collectionMembershipCache","IExecutionScope","stores","operationsWithContext","completedAt","duration","ReactorFeatureFlags","documentDecisions","authEnforcement","authGroups","authConditions","featureFlags","maxSkipThreshold","maxConcurrency","jobTimeoutMs","deferredJobTtlMs","retryBaseDelayMs","retryMaxDelayMs","yieldDeadlineMs","batchApplies","JobExecutorEventTypes","JOB_STARTED","JOB_COMPLETED","EXECUTOR_STARTED","EXECUTOR_STOPPED","JobStartedEvent","startedAt","JobCompletedEvent","JobFailedEvent","willRetry","ExecutorStartedEvent","ExecutorStoppedEvent","stoppedAt","graceful","ExecutorManagerStatus","isRunning","numExecutors","activeJobs","totalJobsProcessed","DocumentDecisionModel","documentDecisionModel","RegisteredDecisionModel","AdmissionDecision","evaluation","documentVersion","deletedAtUtcIso","AdmissionConditions","carriedDocument","decideAtHead","cache","conditions","selectDecisionModel","flags","ALWAYS_READABLE_SCOPES","ReadonlySet","ReadGateOptions","withholdUninitialized","IReadGate","scopePredicate","readDecisionModel","BareReadGate","SeededStateReader","documentView","seed","assertAbsent","ModelReadGate","servesGroups","logger","servesGroupTo","servesThrough","servesGroup","ownPolicyPredicate","ActionEvaluationConfig","ReactorClient","IReactor","reactor","signer","subscriptionManager","jobAwaiter","documentIndexer","readGate","actionEvaluation","readSubject","readableScopes","gateDocument","getOperationsWithCompositeCursor","buildEvaluationTarget","removeAllIncomingRelationships","WorkerInFlightSnapshot","WorkerExecutionOutcome","IExecutorWorker","abort","loadModel","entry","isIdle","getInFlight","IJobExecutor","executeJob","IJobExecutorManager","getExecutors","getStatus","IJobTracker","registerJob","jobInfo","markRunning","markFailed","IQueue","enqueue","dequeue","dequeueNext","dequeueNextMatching","predicate","totalSize","clearAll","hasJobs","completeJob","failJob","retryJob","accounting","isDrained","block","onDrained","unblock","GroupReevaluationTrigger","queue","unsubscribe","onWriteReady","ViewStateTable","readModelId","lastOrdinal","DocumentSnapshotTable","content","lastOperationIndex","lastOperationHash","lastUpdatedAt","snapshotVersion","isDeleted","deletedAt","SlugMappingTable","ProcessorCursorTable","processorId","factoryId","processorIndex","lastErrorTimestamp","DocumentViewDatabase","ViewState","DocumentSnapshot","SlugMapping","ProcessorCursor","InsertableDocumentSnapshot","IConsistencyTracker","update","getLatest","waitFor","serialize","hydrate","entries","makeConsistencyKey","ConsistencyTracker","waiters","deduplicateCoordinates","areCoordinatesSatisfied","checkWaiters","removeWaiter","PoolStats","PoolInstrumentation","getStats","onAcquire","listener","instrumentPgPool","pool","ForwardingPoolInstrumentation","pushSamples","updateStats","stats","GraphQLRequestErrorCategory","GraphQLRequestError","statusCode","category","codes","RECOVERABLE_GRAPHQL_ERROR_CODES","malformedStoredOperation","isRecoverableGraphQLError","DRIVE_AUTH_ERROR_MESSAGES","forbidden","authenticationRequired","isDriveAuthError","PollingChannelError","ChannelError","SyncOperationStatusCallback","SyncOperation","syncOp","prev","SyncOperationAggregateError","deliveredCount","emittedCount","callbacks","on","started","transported","executed","failed","transition","MailboxCallback","IMailbox","ReadonlyArray","ackOrdinal","latestOrdinal","advanceOrdinal","onAdded","onRemoved","pause","resume","flush","isPaused","Mailbox","itemsMap","addedCallbacks","removedCallbacks","paused","addedBuffer","removedBuffer","_ack","_latestOrdinal","SyncStatus","Synced","Outgoing","Incoming","OutgoingAndIncoming","SyncStatusChangeCallback","ISyncStatusTracker","IChannel","onChange","trackRemote","channel","untrackRemote","SyncStatusTracker","remotes","seen","handleAdded","handleRemoved","getOrCreateCounts","notifyChange","ConnectionStateChangeCallback","inbox","outbox","getConnectionState","onConnectionStateChange","triggerPull","IChannelFactory","instance","cursorStorage","RemoteMeta","Remote","ISyncManager","getByName","getById","bindRemote","waitForSync","getSyncStatus","onSyncStatusChange","ExecutionJobPlan","jobs","LoadJobPlan","externalDeps","kill","getDocumentModels","getBySlug","docId","ReactorFeatures","Database","SyncModule","syncManager","InProcessSyncModule","remoteStorage","deadLetterStorage","channelFactory","ReactorModule","documentModelRegistry","syncModule","InProcessReactorModule","jobTracker","executorManager","documentViewConsistencyTracker","documentIndexerConsistencyTracker","readModelCoordinator","processorManager","processorManagerConsistencyTracker","groupReevaluationTrigger","pools","ReactorClientModule","client","reactorModule","InProcessReactorClientModule","DriveClient","runJobs","toError","documentExists","removeFileNode","IDocumentModelResolver","ensureModelLoaded","ModelLoadedBroadcastHook","DocumentModelResolver","loader","loadingModels","failedModelTypes","broadcastHook","modelLoadedHook","setBroadcastHook","hook","setModelLoadedHook","loadRegisterAndBroadcast","notifyPeersModelLoaded","NullDocumentModelResolver","WorkerFactory","BuiltInReadModelKind","ProjectionInitMessage","shardId","shardIndex","shardCount","preReadyKinds","postReadyKinds","chainDepthReportIntervalMs","ProjectionWriteReadyMessage","ProjectionDrainMessage","ProjectionShutdownMessage","ProjectionParentMessage","ProjectionReadyMessage","ProjectionReadReadyMessage","ProjectionReadModelIndexedMessage","ProjectionBatchCompletedMessage","ProjectionChainDepthMessage","depth","ProjectionPoolAcquireSamplesMessage","ProjectionDrainedMessage","ProjectionLogMessage","ProjectionWorkerMessage","ProjectionTransportEventMap","exit","ProjectionTransportEvent","ProjectionTransportListener","E","payload","IProjectionTransport","postMessage","off","terminate","ProjectionWorkerFactory","ProjectionShardManagerConfig","factory","hostBus","initTimeoutMs","shutdownGraceMs","drainTimeoutMs","poolInstrumentations","SignerConfig","verifier","MigrationStrategy","MigrationResult","migrationsExecuted","SyncBuilder","withChannelFactory","withRemoteStorage","storage","withCursorStorage","withDeadLetterStorage","withMaxDeadLettersPerRemote","withMaxInboxBatchSize","withMaxHeldOperationsPerRemote","build","driveContainerTypes","buildModule","ReadModelFactoryDeps","ReadModelFactory","deps","WorkerPoolBase","WorkerPoolOptions","ProjectionShardBuilderConfig","ReactorBuilder","documentModelSources","upgradeManifests","features","readModelFactories","writeCacheConfig","migrationStrategy","syncBuilder","kyselyInstance","signalHandlersEnabled","queueInstance","channelScheme","jwtHandler","documentModelLoader","shutdownHooks","workerPool","resolvedModelManifest","projectionShardConfig","projectionWorkerFactory","instrumentedPools","withLogger","withDocumentModelSources","sources","withUpgradeManifests","withFeatures","withReadModel","withReadModelFactory","withReadModelCoordinator","withExecutor","executor","withExecutorConfig","withWriteCacheConfig","withDriveContainerTypes","withMigrationStrategy","strategy","withSync","withEventBus","withSignatureVerifier","withKysely","withInstrumentedPool","instrumentation","withQueue","withChannelScheme","scheme","withJwtHandler","handler","withDocumentModelLoader","withSignalHandlers","withShutdownHook","withWorkerPool","withProjectionShards","withProjectionWorkerFactory","getResolvedModelManifest","resolveReactorDbConfig","createProjectionShardManager","createDefaultProjectionWorkerFactory","createDefaultWorkerFactory","createPostgresDatabase","attachSignalHandlers","ReactorClientBuilder","reactorBuilder","withReactorBuilder","withReactor","withSigner","withSubscriptionManager","withJobAwaiter","withReadGate","resolveReadGate","resolveActionEvaluation","DEFAULT_DRIVE_CONTAINER_TYPES","Reactor","shutdownStatus","setShutdown","setCompleted","findByIds","findBySlugs","findByParentId","emitJobPending","ParsedDriveUrl","graphqlEndpoint","parseDriveUrl","driveIdFromUrl","AuthEnforcementDisabledError","createMutableShutdownStatus","initialState","value","ParsedPaging","offset","parsePagingOptions","defaultLimit","DefaultSubscriptionErrorHandler","DocumentCreatedCallback","DocumentDeletedCallback","DocumentStateUpdatedCallback","RelationshipChangedCallback","ReactorSubscriptionManager","Map","createdSubscriptions","deletedSubscriptions","updatedSubscriptions","relationshipSubscriptions","subscriptionCounter","errorHandler","notifyDocumentsCreated","notifyDocumentsDeleted","notifyDocumentsUpdated","notifyRelationshipChanged","childType","filterDocumentIds","filterDocuments","matchesRelationshipFilter","EventBus","eventTypeToSubscribers","InMemoryQueue","Set","resolver","queues","jobIdToQueueKey","docIdToJobId","jobIdToDocId","completedJobs","jobIndex","isBlocked","onDrainedCallback","isPausedFlag","toErrorInfo","createQueueKey","getQueue","isDocumentExecuting","markJobExecuting","markJobComplete","areDependenciesMet","getNextJobWithMetDependencies","getCreateDocumentType","deferJob","checkDrained","getPendingJobs","getExecutingJobIds","getJob","InMemoryJobTracker","JobExecutorFactory","SimpleJobExecutorManager","executorFactory","executors","deferredJobs","resultHandler","processNextJob","checkForMoreJobs","processExistingJobs","SimpleJobExecutor","decisionModel","signatureVerifierModule","documentActionHandler","executionScope","executeInScope","evictTouchedStreams","getCollectionMembershipsForOperations","processActions","prepareRegularWrite","commitPreparedWrites","canBatch","executeRegularActionsBatched","conditionsAgree","executeRegularActionsSequentially","executeRegularAction","positionByTimestamp","evaluatePositioned","evaluationOrder","firstNonMonotonicTimestamp","appendedOperations","reevaluateIfCriteriaMet","reevaluateDocument","executeReevaluationJob","executeLoadJob","accumulateResultOrReturnError","createForwardingLogger","msg","post","tags","errorToInfo","err","sanitizeArg","WeakSet","workerEntryPath","ModuleNotFoundError","requestedVersion","DuplicateModuleError","InvalidModuleError","DuplicateManifestError","DocumentModelRegistry","manifestsToRegister","buildDecisionModel","reader","definition","AuthDecisionModel","auth","authDecisionModel","SyncScopeGate","gate","scopePredicateById","OutOfOrderPair","firstOutOfOrderPair","requireStrict","BaseReadModelConfig","rebuildStateOnInit","BaseReadModel","consistencyTracker","commitOperations","rebuildStateForOperations","loadState","initializeState","saveState","updateConsistencyTracker","IndexerDatabase","KyselyDocumentIndexer","_db","handleAddRelationship","handleRemoveRelationship","handleUpdateRelationship","ReadModelCoordinator","preReady","postReady","chains","emitEmptyReadReady","runChain","indexWithTiming","emitReadModelIndexed","emitBatchCompleted","queueKeyFor","Database$2","KyselyDocumentView","servesDeletionBoundary","idsWithStreams","liveIds","DOCUMENT_VIEW_READ_MODEL","DOCUMENT_INDEXER_READ_MODEL","ReactorReadModels","REACTOR_SCHEMA","runMigrations","schema","upTo","getMigrationStatus","MigrationInfo","KyselySyncCursorStorage","KyselySyncRemoteStorage","GqlRequestChannelFactory","GqlResponseChannelFactory","IPollTimer","setDelegate","delegate","triggerNow","GqlChannelConfig","fetch","fetchFn","GqlRequestChannel","bufferedOutbox","channelId","pollTimer","abortController","lastPersistedInboxOrdinal","lastPersistedOutboxOrdinal","pushRetryTimer","isPushing","pendingDrain","peerServesDecisionFields","isRecovering","connectionState","connectionStateCallbacks","transitionConnectionState","poll","handleRemoteDeadLetters","handlePollError","recoverFromChannelNotFound","resumePushAfterRecovery","pollSyncEnvelopes","rejectsDecisionFields","pollQuery","touchRemoteChannel","attemptPush","schedulePushRetry","drainOutbox","classifyError","pushSyncOperations","getAuthorizationHeader","executeGraphQL","poller","GqlResponseChannel","evictedOutboxFloor","appliedOutboxOrdinal","rememberUnserved","persistOutboxCursor","forgetEvictedBelow","unservedFloor","PollTimerConfig","intervalMs","maxQueueDepth","backpressureCheckIntervalMs","startPaused","IntervalPollTimer","timer","running","consecutiveFailures","tick","scheduleNext","scheduleRetry","scheduleBackpressureRecheck","getIntervalMs","setIntervalMs","ms","envelopesToSyncOperations","envelope","OperationBatch","trimMailboxFromAckOrdinal","mailbox","batchOperationsByDocument","consolidateSyncOperations","syncOps","classifyJobFailure","errorName","syncOperationErrorType","quarantinesDocument","IReactorProcessorHostModuleBase","getReadModel","ReactorHostModuleBaseOptions","Pick","createReactorHostModuleBase","KeyframeValidationIssue","keyframeHash","replayedHash","SnapshotValidationIssue","snapshotHash","StreamOrderIssue","ValidationResult","isConsistent","keyframeIssues","snapshotIssues","streamOrderIssues","RebuildResult","keyframesDeleted","scopesInvalidated","IDocumentIntegrityService","validateDocument","rebuildKeyframes","rebuildSnapshots","DocumentIntegrityService","findStreamOrderIssues","discoverScopes","ProcessorManagerOptions","legacyProcessorIds","ProcessorManager","factoryRegistry","processorsByDrive","factoryToProcessors","knownDrives","cursorCache","registerFactory","unregisterFactory","allTrackedProcessors","detectAndRegisterNewDrives","isDriveCreation","detectAndCleanupDeletedDrives","discoverExistingDrives","isDeletedDocumentADrive","createProcessorsForDrive","backfillProcessor","retryProcessor","cleanupDriveProcessors","safeDisconnect","routeOperationsToProcessors","loadAllCursors","safeSaveProcessorCursor","saveProcessorCursor","deleteProcessorCursors","InMemoryJobExecutor","ReactorJobFailedEvent","StorageDatabase","WorkerErrorInfo"],"sources":["../../../node_modules/.pnpm/kysely@0.28.16/node_modules/kysely/dist/esm/kysely.d.ts","../../reactor/dist/index.d.ts","../src/hypercore-operation-store.ts","../src/types.ts","../src/hypercore-atomic-transaction.ts","../src/storage-manager.ts","../src/key-encoding.ts"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "@powerhousedao/shared/document-model";
|
|
2
2
|
import Corestore from "corestore";
|
|
3
3
|
import Hyperbee from "hyperbee";
|
|
4
|
-
//#region ../reactor/dist/drive-container-types-
|
|
4
|
+
//#region ../reactor/dist/drive-container-types-yZrksiJR.js
|
|
5
5
|
/**
|
|
6
6
|
* Thrown when an operation with the same identity already exists in the store.
|
|
7
7
|
*/
|
|
@@ -21,6 +21,52 @@ var RevisionMismatchError = class extends Error {
|
|
|
21
21
|
this.name = "RevisionMismatchError";
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* A create based on an empty stream that already has operations: the id is
|
|
26
|
+
* taken, and no retry can resolve it. Matched by `name`, all the RPC boundary keeps.
|
|
27
|
+
*/
|
|
28
|
+
var DocumentAlreadyExistsError = class extends Error {
|
|
29
|
+
documentId;
|
|
30
|
+
constructor(documentId, scope, headRevision) {
|
|
31
|
+
super(`Document ${documentId} already exists: create requested revision 0 but the "${scope}" stream is at revision ${headRevision}`);
|
|
32
|
+
this.name = "DocumentAlreadyExistsError";
|
|
33
|
+
this.documentId = documentId;
|
|
34
|
+
}
|
|
35
|
+
static isError(error) {
|
|
36
|
+
return Error.isError(error) && error.name === "DocumentAlreadyExistsError";
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
/** Error history keeps messages, not classes, so failures match by prefix. */
|
|
40
|
+
const APPEND_CONDITION_FAILED_PREFIX = "Append condition failed: ";
|
|
41
|
+
/**
|
|
42
|
+
* A read-set stream grew before the append committed. A concurrency
|
|
43
|
+
* conflict, not a fault: the caller retries against the new stream heads.
|
|
44
|
+
*/
|
|
45
|
+
var AppendConditionFailedError = class extends Error {
|
|
46
|
+
constructor(condition) {
|
|
47
|
+
const streams = condition.streams.map((s) => `${s.documentId}:${s.scope}:${s.branch}@${s.revision}`).join(", ");
|
|
48
|
+
super(`${APPEND_CONDITION_FAILED_PREFIX}a read-set stream advanced [${streams}]`);
|
|
49
|
+
this.condition = condition;
|
|
50
|
+
this.name = "AppendConditionFailedError";
|
|
51
|
+
}
|
|
52
|
+
static isError(error) {
|
|
53
|
+
return Error.isError(error) && error.name === "AppendConditionFailedError";
|
|
54
|
+
}
|
|
55
|
+
/** True when a recorded error message is an append-condition failure. */
|
|
56
|
+
static isFailureMessage(message) {
|
|
57
|
+
return message.startsWith(APPEND_CONDITION_FAILED_PREFIX);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
/** Actions the reactor reduces itself, onto the document scope. */
|
|
61
|
+
const DOCUMENT_SCOPE_ACTIONS = new Set([
|
|
62
|
+
"CREATE_DOCUMENT",
|
|
63
|
+
"DELETE_DOCUMENT",
|
|
64
|
+
"UPGRADE_DOCUMENT",
|
|
65
|
+
"ADD_RELATIONSHIP",
|
|
66
|
+
"REMOVE_RELATIONSHIP",
|
|
67
|
+
"UPDATE_RELATIONSHIP"
|
|
68
|
+
]);
|
|
69
|
+
new Set([...DOCUMENT_SCOPE_ACTIONS].filter((type) => type !== "CREATE_DOCUMENT"));
|
|
24
70
|
//#endregion
|
|
25
71
|
//#region src/hypercore-atomic-transaction.ts
|
|
26
72
|
var HypercoreAtomicTransaction = class {
|
|
@@ -89,7 +135,7 @@ var HypercoreOperationStore = class {
|
|
|
89
135
|
constructor(bee) {
|
|
90
136
|
this.bee = bee;
|
|
91
137
|
}
|
|
92
|
-
async apply(documentId, documentType, scope, branch, revision, fn, signal) {
|
|
138
|
+
async apply(documentId, documentType, scope, branch, revision, fn, signal, condition) {
|
|
93
139
|
const prevLock = this.applyLock;
|
|
94
140
|
let releaseLock;
|
|
95
141
|
this.applyLock = new Promise((resolve) => {
|
|
@@ -97,20 +143,32 @@ var HypercoreOperationStore = class {
|
|
|
97
143
|
});
|
|
98
144
|
await prevLock;
|
|
99
145
|
try {
|
|
146
|
+
if (condition) await this.assertConditionHolds(condition, signal);
|
|
100
147
|
return await this.executeApply(documentId, documentType, scope, branch, revision, fn, signal);
|
|
101
148
|
} finally {
|
|
102
149
|
releaseLock();
|
|
103
150
|
}
|
|
104
151
|
}
|
|
152
|
+
/** Throws if any read-set stream has grown past its recorded revision. */
|
|
153
|
+
async assertConditionHolds(condition, signal) {
|
|
154
|
+
for (const stream of condition.streams) {
|
|
155
|
+
if (signal?.aborted) throw new Error("Operation aborted");
|
|
156
|
+
const entry = await this.bee.get(headKey(stream.documentId, stream.scope, stream.branch));
|
|
157
|
+
if ((entry ? entry.value.index : -1) > stream.revision) throw new AppendConditionFailedError(condition);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
105
160
|
async executeApply(documentId, documentType, scope, branch, revision, fn, signal) {
|
|
106
161
|
if (signal?.aborted) throw new Error("Operation aborted");
|
|
107
162
|
const hKey = headKey(documentId, scope, branch);
|
|
108
163
|
const headEntry = await this.bee.get(hKey);
|
|
109
164
|
const currentRevision = headEntry ? headEntry.value.index : -1;
|
|
110
|
-
if (currentRevision !== revision - 1) throw new RevisionMismatchError(currentRevision + 1, revision);
|
|
111
165
|
const atomicTxn = new HypercoreAtomicTransaction(documentId, documentType, scope, branch);
|
|
112
166
|
await fn(atomicTxn);
|
|
113
167
|
const operations = atomicTxn.getOperations();
|
|
168
|
+
if (currentRevision !== revision - 1) {
|
|
169
|
+
if (revision === 0 && this.isCreate(operations)) throw new DocumentAlreadyExistsError(documentId, scope, currentRevision);
|
|
170
|
+
throw new RevisionMismatchError(currentRevision + 1, revision);
|
|
171
|
+
}
|
|
114
172
|
if (operations.length === 0) return [];
|
|
115
173
|
for (const op of operations) {
|
|
116
174
|
const dupKey = duplicateKey(op.id, op.index, op.skip);
|
|
@@ -145,6 +203,9 @@ var HypercoreOperationStore = class {
|
|
|
145
203
|
await batch.flush();
|
|
146
204
|
return operations.map((op) => this.toOperation(op));
|
|
147
205
|
}
|
|
206
|
+
isCreate(operations) {
|
|
207
|
+
return operations.some((op) => op.action.type === "CREATE_DOCUMENT");
|
|
208
|
+
}
|
|
148
209
|
async getSince(documentId, scope, branch, revision, filter, paging, signal) {
|
|
149
210
|
if (signal?.aborted) throw new Error("Operation aborted");
|
|
150
211
|
const prefix = operationPrefix(documentId, scope, branch);
|
|
@@ -300,6 +361,18 @@ var HypercoreOperationStore = class {
|
|
|
300
361
|
latestTimestamp
|
|
301
362
|
};
|
|
302
363
|
}
|
|
364
|
+
/**
|
|
365
|
+
* A real maximum over the rows, not the head record's `latestTimestampUtcMs`:
|
|
366
|
+
* that holds the last-indexed timestamp, which a re-append can leave behind a
|
|
367
|
+
* later one, so it would under-report and admit a backdated auth write.
|
|
368
|
+
*/
|
|
369
|
+
async getStreamLatestTimestamp(documentId, scope, branch, signal) {
|
|
370
|
+
if (signal?.aborted) throw new Error("Operation aborted");
|
|
371
|
+
const stored = await this.getSince(documentId, scope, branch, -1, void 0, void 0, signal);
|
|
372
|
+
let latest;
|
|
373
|
+
for (const operation of stored.results) if (latest === void 0 || operation.timestampUtcMs > latest) latest = operation.timestampUtcMs;
|
|
374
|
+
return latest;
|
|
375
|
+
}
|
|
303
376
|
serializeOperation(op) {
|
|
304
377
|
return {
|
|
305
378
|
id: op.id,
|
|
@@ -308,6 +381,7 @@ var HypercoreOperationStore = class {
|
|
|
308
381
|
timestampUtcMs: op.timestampUtcMs,
|
|
309
382
|
hash: op.hash,
|
|
310
383
|
error: op.error,
|
|
384
|
+
deniedReason: op.deniedReason,
|
|
311
385
|
action: op.action,
|
|
312
386
|
documentId: op.documentId,
|
|
313
387
|
documentType: op.documentType,
|
|
@@ -323,6 +397,7 @@ var HypercoreOperationStore = class {
|
|
|
323
397
|
timestampUtcMs: stored.timestampUtcMs,
|
|
324
398
|
hash: stored.hash,
|
|
325
399
|
error: stored.error || void 0,
|
|
400
|
+
deniedReason: stored.deniedReason || void 0,
|
|
326
401
|
action: stored.action
|
|
327
402
|
};
|
|
328
403
|
}
|