@powerhousedao/reactor 5.0.0-staging.2 → 5.0.0-staging.21
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/src/client/reactor-client.d.ts +103 -0
- package/dist/src/client/reactor-client.d.ts.map +1 -0
- package/dist/src/client/reactor-client.js +182 -0
- package/dist/src/client/reactor-client.js.map +1 -0
- package/dist/src/client/types.d.ts +213 -0
- package/dist/src/client/types.d.ts.map +1 -0
- package/dist/src/client/types.js +14 -0
- package/dist/src/client/types.js.map +1 -0
- package/dist/src/core/builder.d.ts +20 -0
- package/dist/src/core/builder.d.ts.map +1 -0
- package/dist/src/core/builder.js +47 -0
- package/dist/src/core/builder.js.map +1 -0
- package/dist/src/{reactor.d.ts → core/reactor.d.ts} +5 -15
- package/dist/src/core/reactor.d.ts.map +1 -0
- package/dist/src/{reactor.js → core/reactor.js} +49 -29
- package/dist/src/core/reactor.js.map +1 -0
- package/dist/src/{interfaces/reactor.d.ts → core/types.d.ts} +3 -3
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +2 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/{utils.d.ts → core/utils.d.ts} +2 -2
- package/dist/src/core/utils.d.ts.map +1 -0
- package/dist/src/{utils.js → core/utils.js} +3 -1
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/events/event-bus.d.ts +3 -3
- package/dist/src/events/event-bus.d.ts.map +1 -1
- package/dist/src/events/event-bus.js +1 -1
- package/dist/src/events/event-bus.js.map +1 -1
- package/dist/src/events/interfaces.d.ts +1 -1
- package/dist/src/events/interfaces.d.ts.map +1 -1
- package/dist/src/executor/interfaces.d.ts +2 -2
- package/dist/src/executor/interfaces.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +9 -9
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/types.d.ts +1 -1
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +9 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/queue/interfaces.d.ts +20 -5
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.d.ts +24 -0
- package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
- package/dist/src/queue/job-execution-handle.js +62 -0
- package/dist/src/queue/job-execution-handle.js.map +1 -0
- package/dist/src/queue/queue.d.ts +24 -5
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +128 -46
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +21 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js +12 -0
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/shared/awaiter.d.ts +32 -0
- package/dist/src/shared/awaiter.d.ts.map +1 -0
- package/dist/src/shared/awaiter.js +132 -0
- package/dist/src/shared/awaiter.js.map +1 -0
- package/dist/src/shared/factories.d.ts +1 -1
- package/dist/src/shared/factories.d.ts.map +1 -1
- package/dist/src/shared/types.d.ts +3 -0
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/signer/passthrough-signer.d.ts +6 -0
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
- package/dist/src/signer/passthrough-signer.js +6 -0
- package/dist/src/signer/passthrough-signer.js.map +1 -0
- package/dist/src/signer/types.d.ts +15 -0
- package/dist/src/signer/types.d.ts.map +1 -0
- package/dist/src/signer/types.js +2 -0
- package/dist/src/signer/types.js.map +1 -0
- package/dist/src/subs/default-error-handler.d.ts +13 -0
- package/dist/src/subs/default-error-handler.d.ts.map +1 -0
- package/dist/src/subs/default-error-handler.js +27 -0
- package/dist/src/subs/default-error-handler.js.map +1 -0
- package/dist/src/subs/react-subscription-manager.d.ts +45 -0
- package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
- package/dist/src/subs/react-subscription-manager.js +185 -0
- package/dist/src/subs/react-subscription-manager.js.map +1 -0
- package/dist/src/subs/types.d.ts +64 -0
- package/dist/src/subs/types.d.ts.map +1 -0
- package/dist/src/subs/types.js +2 -0
- package/dist/src/subs/types.js.map +1 -0
- package/package.json +6 -6
- package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
- package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
- package/dist/bench/end-to-end-flow.bench.js +0 -284
- package/dist/bench/end-to-end-flow.bench.js.map +0 -1
- package/dist/bench/event-bus.bench.d.ts +0 -2
- package/dist/bench/event-bus.bench.d.ts.map +0 -1
- package/dist/bench/event-bus.bench.js +0 -238
- package/dist/bench/event-bus.bench.js.map +0 -1
- package/dist/bench/queue-only.bench.d.ts +0 -2
- package/dist/bench/queue-only.bench.d.ts.map +0 -1
- package/dist/bench/queue-only.bench.js +0 -46
- package/dist/bench/queue-only.bench.js.map +0 -1
- package/dist/bench/reactor-throughput.bench.d.ts +0 -2
- package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
- package/dist/bench/reactor-throughput.bench.js +0 -164
- package/dist/bench/reactor-throughput.bench.js.map +0 -1
- package/dist/src/interfaces/reactor.d.ts.map +0 -1
- package/dist/src/interfaces/reactor.js +0 -2
- package/dist/src/interfaces/reactor.js.map +0 -1
- package/dist/src/reactor.d.ts.map +0 -1
- package/dist/src/reactor.js.map +0 -1
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js.map +0 -1
- package/dist/test/event-bus.test.d.ts +0 -2
- package/dist/test/event-bus.test.d.ts.map +0 -1
- package/dist/test/event-bus.test.js +0 -532
- package/dist/test/event-bus.test.js.map +0 -1
- package/dist/test/executor-integration.test.d.ts +0 -2
- package/dist/test/executor-integration.test.d.ts.map +0 -1
- package/dist/test/executor-integration.test.js +0 -290
- package/dist/test/executor-integration.test.js.map +0 -1
- package/dist/test/factories.d.ts +0 -131
- package/dist/test/factories.d.ts.map +0 -1
- package/dist/test/factories.js +0 -347
- package/dist/test/factories.js.map +0 -1
- package/dist/test/queue.test.d.ts +0 -2
- package/dist/test/queue.test.d.ts.map +0 -1
- package/dist/test/queue.test.js +0 -587
- package/dist/test/queue.test.js.map +0 -1
- package/dist/test/reactor-queue.test.d.ts +0 -2
- package/dist/test/reactor-queue.test.d.ts.map +0 -1
- package/dist/test/reactor-queue.test.js +0 -328
- package/dist/test/reactor-queue.test.js.map +0 -1
- package/dist/test/reactor-read.test.d.ts +0 -2
- package/dist/test/reactor-read.test.d.ts.map +0 -1
- package/dist/test/reactor-read.test.js +0 -355
- package/dist/test/reactor-read.test.js.map +0 -1
- package/dist/test/registry.test.d.ts +0 -2
- package/dist/test/registry.test.d.ts.map +0 -1
- package/dist/test/registry.test.js +0 -182
- package/dist/test/registry.test.js.map +0 -1
- package/dist/test/simple-job-executor-manager.test.d.ts +0 -2
- package/dist/test/simple-job-executor-manager.test.d.ts.map +0 -1
- package/dist/test/simple-job-executor-manager.test.js +0 -132
- package/dist/test/simple-job-executor-manager.test.js.map +0 -1
- package/dist/test/simple-job-executor.test.d.ts +0 -2
- package/dist/test/simple-job-executor.test.d.ts.map +0 -1
- package/dist/test/simple-job-executor.test.js +0 -139
- package/dist/test/simple-job-executor.test.js.map +0 -1
- package/dist/test/utils.test.d.ts +0 -2
- package/dist/test/utils.test.d.ts.map +0 -1
- package/dist/test/utils.test.js +0 -66
- package/dist/test/utils.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/vitest.config.d.ts +0 -3
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -11
- package/dist/vitest.config.js.map +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type JobInfo } from "./types.js";
|
|
2
|
+
export interface IJobAwaiter {
|
|
3
|
+
/**
|
|
4
|
+
* Waits for a job to complete: turns a job into a promise.
|
|
5
|
+
*
|
|
6
|
+
* @param jobId - The job id or job object
|
|
7
|
+
* @param signal - Optional abort signal to cancel the request
|
|
8
|
+
* @returns The result of the job
|
|
9
|
+
*/
|
|
10
|
+
waitForJob(jobId: string, signal?: AbortSignal): Promise<JobInfo>;
|
|
11
|
+
/**
|
|
12
|
+
* Shuts down the job awaiter. This will synchronously reject all pending jobs.
|
|
13
|
+
*/
|
|
14
|
+
shutdown(): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Default implementation of IJobAwaiter that polls for job status.
|
|
18
|
+
* Uses a single interval timer to check all pending jobs.
|
|
19
|
+
*/
|
|
20
|
+
export declare class JobAwaiter implements IJobAwaiter {
|
|
21
|
+
private getJobStatus;
|
|
22
|
+
private pollIntervalMs;
|
|
23
|
+
private pendingJobs;
|
|
24
|
+
private intervalId;
|
|
25
|
+
constructor(getJobStatus: (jobId: string, signal?: AbortSignal) => Promise<JobInfo>, pollIntervalMs?: number);
|
|
26
|
+
shutdown(): void;
|
|
27
|
+
waitForJob(jobId: string, signal?: AbortSignal): Promise<JobInfo>;
|
|
28
|
+
private startInterval;
|
|
29
|
+
private stopIntervalIfNoJobs;
|
|
30
|
+
private checkPendingJobs;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=awaiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awaiter.d.ts","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE;;OAEG;IACH,QAAQ,IAAI,IAAI,CAAC;CAClB;AAQD;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IAM1C,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IARxB,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,UAAU,CAA+B;gBAGvC,YAAY,EAAE,CACpB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,OAAO,CAAC,EACb,cAAc,SAAK;IAK7B,QAAQ,IAAI,IAAI;IAcV,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA2CvE,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,oBAAoB;YAOd,gBAAgB;CA+D/B"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { JobStatus } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Default implementation of IJobAwaiter that polls for job status.
|
|
4
|
+
* Uses a single interval timer to check all pending jobs.
|
|
5
|
+
*/
|
|
6
|
+
export class JobAwaiter {
|
|
7
|
+
getJobStatus;
|
|
8
|
+
pollIntervalMs;
|
|
9
|
+
// Map from job ID to list of waiters (multiple waiters can wait for same job)
|
|
10
|
+
pendingJobs = new Map();
|
|
11
|
+
intervalId = null;
|
|
12
|
+
constructor(getJobStatus, pollIntervalMs = 10) {
|
|
13
|
+
this.getJobStatus = getJobStatus;
|
|
14
|
+
this.pollIntervalMs = pollIntervalMs;
|
|
15
|
+
//
|
|
16
|
+
}
|
|
17
|
+
shutdown() {
|
|
18
|
+
if (this.intervalId !== null) {
|
|
19
|
+
clearInterval(this.intervalId);
|
|
20
|
+
this.intervalId = null;
|
|
21
|
+
}
|
|
22
|
+
// Reject all pending jobs
|
|
23
|
+
for (const [, waiters] of this.pendingJobs) {
|
|
24
|
+
for (const waiter of waiters) {
|
|
25
|
+
waiter.reject(new Error("JobAwaiter destroyed"));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
this.pendingJobs.clear();
|
|
29
|
+
}
|
|
30
|
+
async waitForJob(jobId, signal) {
|
|
31
|
+
// Check if signal is already aborted
|
|
32
|
+
if (signal?.aborted) {
|
|
33
|
+
throw new Error("Operation aborted");
|
|
34
|
+
}
|
|
35
|
+
// Create promise for this job
|
|
36
|
+
const promise = new Promise((resolve, reject) => {
|
|
37
|
+
const waiter = { resolve, reject, signal };
|
|
38
|
+
// Add to the list of waiters for this job
|
|
39
|
+
const existingWaiters = this.pendingJobs.get(jobId) || [];
|
|
40
|
+
existingWaiters.push(waiter);
|
|
41
|
+
this.pendingJobs.set(jobId, existingWaiters);
|
|
42
|
+
// If signal is provided, handle abort
|
|
43
|
+
if (signal) {
|
|
44
|
+
const abortHandler = () => {
|
|
45
|
+
// Find and remove this specific waiter
|
|
46
|
+
const waiters = this.pendingJobs.get(jobId);
|
|
47
|
+
if (waiters) {
|
|
48
|
+
const index = waiters.indexOf(waiter);
|
|
49
|
+
if (index !== -1) {
|
|
50
|
+
waiters.splice(index, 1);
|
|
51
|
+
if (waiters.length === 0) {
|
|
52
|
+
this.pendingJobs.delete(jobId);
|
|
53
|
+
}
|
|
54
|
+
waiter.reject(new Error("Operation aborted"));
|
|
55
|
+
this.stopIntervalIfNoJobs();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
signal.addEventListener("abort", abortHandler, { once: true });
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// Start interval if not already running
|
|
63
|
+
this.startInterval();
|
|
64
|
+
return promise;
|
|
65
|
+
}
|
|
66
|
+
startInterval() {
|
|
67
|
+
if (this.intervalId === null && this.pendingJobs.size > 0) {
|
|
68
|
+
this.intervalId = setInterval(async () => {
|
|
69
|
+
await this.checkPendingJobs();
|
|
70
|
+
}, this.pollIntervalMs);
|
|
71
|
+
// Check immediately as well - schedule it for next tick
|
|
72
|
+
setTimeout(() => this.checkPendingJobs(), 0);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
stopIntervalIfNoJobs() {
|
|
76
|
+
if (this.pendingJobs.size === 0 && this.intervalId !== null) {
|
|
77
|
+
clearInterval(this.intervalId);
|
|
78
|
+
this.intervalId = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async checkPendingJobs() {
|
|
82
|
+
// Get unique job IDs to check
|
|
83
|
+
const jobIds = Array.from(this.pendingJobs.keys());
|
|
84
|
+
// Check each job
|
|
85
|
+
const jobChecks = jobIds.map(async (jobId) => {
|
|
86
|
+
const waiters = this.pendingJobs.get(jobId);
|
|
87
|
+
if (!waiters || waiters.length === 0) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
// Filter out aborted waiters
|
|
92
|
+
const activeWaiters = waiters.filter((w) => !w.signal?.aborted);
|
|
93
|
+
if (activeWaiters.length === 0) {
|
|
94
|
+
// All waiters were aborted
|
|
95
|
+
this.pendingJobs.delete(jobId);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Use the first active waiter's signal for the status check
|
|
99
|
+
const jobInfo = await this.getJobStatus(jobId, activeWaiters[0].signal);
|
|
100
|
+
// Check if job is complete
|
|
101
|
+
if (jobInfo.status === JobStatus.COMPLETED ||
|
|
102
|
+
jobInfo.status === JobStatus.FAILED) {
|
|
103
|
+
// Remove from pending
|
|
104
|
+
this.pendingJobs.delete(jobId);
|
|
105
|
+
// Resolve all active waiters
|
|
106
|
+
for (const waiter of activeWaiters) {
|
|
107
|
+
waiter.resolve(jobInfo);
|
|
108
|
+
}
|
|
109
|
+
// Reject aborted waiters
|
|
110
|
+
for (const waiter of waiters) {
|
|
111
|
+
if (waiter.signal?.aborted) {
|
|
112
|
+
waiter.reject(new Error("Operation aborted"));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Remove from pending
|
|
119
|
+
this.pendingJobs.delete(jobId);
|
|
120
|
+
// Reject all waiters with the error
|
|
121
|
+
for (const waiter of waiters) {
|
|
122
|
+
waiter.reject(error instanceof Error ? error : new Error(String(error)));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
// Wait for all checks to complete
|
|
127
|
+
await Promise.all(jobChecks);
|
|
128
|
+
// Stop interval if no more jobs
|
|
129
|
+
this.stopIntervalIfNoJobs();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=awaiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awaiter.js","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/shared/factories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/shared/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,CAQxE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,UAAQ,GACnB,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAc5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;OAQG;IACH,IAAI,UAAU,IAAI,OAAO,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;OAQG;IACH,IAAI,UAAU,IAAI,OAAO,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,oBAAY,SAAS;IACnB,wCAAwC;IACxC,OAAO,YAAY;IACnB,sCAAsC;IACtC,OAAO,YAAY;IACnB,iCAAiC;IACjC,SAAS,cAAc;IACvB,kCAAkC;IAClC,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IAEvB,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,sCAAmB,CAAA;AACrB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,yCAAe,CAAA;IACf,6CAAmB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,sCAAmB,CAAA;AACrB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,yCAAe,CAAA;IACf,6CAAmB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAcD;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,wCAAwC;IACxC,gCAAmB,CAAA;IACnB,sCAAsC;IACtC,gCAAmB,CAAA;IACnB,iCAAiC;IACjC,oCAAuB,CAAA;IACvB,kCAAkC;IAClC,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passthrough-signer.d.ts","sourceRoot":"","sources":["../../../src/signer/passthrough-signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;CAG3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passthrough-signer.js","sourceRoot":"","sources":["../../../src/signer/passthrough-signer.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,iBAAiB;IAC5B,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Action, Signature } from "document-model";
|
|
2
|
+
/**
|
|
3
|
+
* Interface for signing actions before submission to the reactor.
|
|
4
|
+
*/
|
|
5
|
+
export interface ISigner {
|
|
6
|
+
/**
|
|
7
|
+
* Signs an action
|
|
8
|
+
*
|
|
9
|
+
* @param action - The action to sign
|
|
10
|
+
* @param abortSignal - Optional abort signal to cancel the signing
|
|
11
|
+
* @returns The signature
|
|
12
|
+
*/
|
|
13
|
+
sign(action: Action, abortSignal?: AbortSignal): Promise<Signature>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/signer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/signer/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ISubscriptionErrorHandler, SubscriptionErrorContext } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Default error handler that re-throws subscription errors.
|
|
4
|
+
* This ensures that errors are not silently swallowed.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DefaultSubscriptionErrorHandler implements ISubscriptionErrorHandler {
|
|
7
|
+
handleError(error: unknown, context: SubscriptionErrorContext): void;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a default subscription error handler instance
|
|
11
|
+
*/
|
|
12
|
+
export declare function createDefaultSubscriptionErrorHandler(): ISubscriptionErrorHandler;
|
|
13
|
+
//# sourceMappingURL=default-error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-error-handler.d.ts","sourceRoot":"","sources":["../../../src/subs/default-error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,+BACX,YAAW,yBAAyB;IAEpC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,GAAG,IAAI;CAcrE;AAED;;GAEG;AACH,wBAAgB,qCAAqC,IAAI,yBAAyB,CAEjF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default error handler that re-throws subscription errors.
|
|
3
|
+
* This ensures that errors are not silently swallowed.
|
|
4
|
+
*/
|
|
5
|
+
export class DefaultSubscriptionErrorHandler {
|
|
6
|
+
handleError(error, context) {
|
|
7
|
+
const errorMessage = `Subscription error in ${context.eventType} (${context.subscriptionId})`;
|
|
8
|
+
if (error instanceof Error) {
|
|
9
|
+
// Preserve the original error with additional context
|
|
10
|
+
const enhancedError = new Error(`${errorMessage}: ${error.message}`);
|
|
11
|
+
enhancedError.cause = error;
|
|
12
|
+
enhancedError.stack = error.stack;
|
|
13
|
+
throw enhancedError;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
// Handle non-Error objects
|
|
17
|
+
throw new Error(`${errorMessage}: ${String(error)}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates a default subscription error handler instance
|
|
23
|
+
*/
|
|
24
|
+
export function createDefaultSubscriptionErrorHandler() {
|
|
25
|
+
return new DefaultSubscriptionErrorHandler();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=default-error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-error-handler.js","sourceRoot":"","sources":["../../../src/subs/default-error-handler.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,OAAO,+BAA+B;IAG1C,WAAW,CAAC,KAAc,EAAE,OAAiC;QAC3D,MAAM,YAAY,GAAG,yBAAyB,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,cAAc,GAAG,CAAC;QAE9F,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,sDAAsD;YACtD,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,GAAG,YAAY,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;YAC5B,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAClC,MAAM,aAAa,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,qCAAqC;IACnD,OAAO,IAAI,+BAA+B,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { PHDocument } from "document-model";
|
|
2
|
+
import type { PagedResults, RelationshipChangeType, SearchFilter, ViewFilter } from "../shared/types.js";
|
|
3
|
+
import type { IReactorSubscriptionManager, ISubscriptionErrorHandler } from "./types.js";
|
|
4
|
+
type DocumentCreatedCallback = (result: PagedResults<string>) => void;
|
|
5
|
+
type DocumentDeletedCallback = (documentIds: string[]) => void;
|
|
6
|
+
type DocumentStateUpdatedCallback = (result: PagedResults<PHDocument>) => void;
|
|
7
|
+
type RelationshipChangedCallback = (parentId: string, childId: string, changeType: RelationshipChangeType) => void;
|
|
8
|
+
export declare class ReactorSubscriptionManager implements IReactorSubscriptionManager {
|
|
9
|
+
private createdSubscriptions;
|
|
10
|
+
private deletedSubscriptions;
|
|
11
|
+
private updatedSubscriptions;
|
|
12
|
+
private relationshipSubscriptions;
|
|
13
|
+
private subscriptionCounter;
|
|
14
|
+
private errorHandler;
|
|
15
|
+
constructor(errorHandler: ISubscriptionErrorHandler);
|
|
16
|
+
onDocumentCreated(callback: DocumentCreatedCallback, search?: SearchFilter): () => void;
|
|
17
|
+
onDocumentDeleted(callback: DocumentDeletedCallback, search?: SearchFilter): () => void;
|
|
18
|
+
onDocumentStateUpdated(callback: DocumentStateUpdatedCallback, search?: SearchFilter, view?: ViewFilter): () => void;
|
|
19
|
+
onRelationshipChanged(callback: RelationshipChangedCallback, search?: SearchFilter): () => void;
|
|
20
|
+
/**
|
|
21
|
+
* Notify subscribers about created documents
|
|
22
|
+
*/
|
|
23
|
+
notifyDocumentsCreated(documentIds: string[], documentTypes?: Map<string, string>, parentIds?: Map<string, string | null>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Notify subscribers about deleted documents
|
|
26
|
+
*/
|
|
27
|
+
notifyDocumentsDeleted(documentIds: string[], documentTypes?: Map<string, string>, parentIds?: Map<string, string | null>): void;
|
|
28
|
+
/**
|
|
29
|
+
* Notify subscribers about updated documents
|
|
30
|
+
*/
|
|
31
|
+
notifyDocumentsUpdated(documents: PHDocument[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Notify subscribers about relationship changes
|
|
34
|
+
*/
|
|
35
|
+
notifyRelationshipChanged(parentId: string, childId: string, changeType: RelationshipChangeType, childType?: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Clear all subscriptions
|
|
38
|
+
*/
|
|
39
|
+
clearAll(): void;
|
|
40
|
+
private filterDocumentIds;
|
|
41
|
+
private filterDocuments;
|
|
42
|
+
private matchesRelationshipFilter;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=react-subscription-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-subscription-manager.d.ts","sourceRoot":"","sources":["../../../src/subs/react-subscription-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAEpB,KAAK,uBAAuB,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AACtE,KAAK,uBAAuB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAC/D,KAAK,4BAA4B,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;AAC/E,KAAK,2BAA2B,GAAG,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,sBAAsB,KAC/B,IAAI,CAAC;AASV,qBAAa,0BAA2B,YAAW,2BAA2B;IAC5E,OAAO,CAAC,oBAAoB,CAGxB;IACJ,OAAO,CAAC,oBAAoB,CAGxB;IACJ,OAAO,CAAC,oBAAoB,CAGxB;IACJ,OAAO,CAAC,yBAAyB,CAG7B;IAEJ,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,YAAY,EAAE,yBAAyB;IAInD,iBAAiB,CACf,QAAQ,EAAE,uBAAuB,EACjC,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,IAAI;IASb,iBAAiB,CACf,QAAQ,EAAE,uBAAuB,EACjC,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,IAAI;IASb,sBAAsB,CACpB,QAAQ,EAAE,4BAA4B,EACtC,MAAM,CAAC,EAAE,YAAY,EACrB,IAAI,CAAC,EAAE,UAAU,GAChB,MAAM,IAAI;IASb,qBAAqB,CACnB,QAAQ,EAAE,2BAA2B,EACrC,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,IAAI;IASb;;OAEG;IACH,sBAAsB,CACpB,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACrC,IAAI;IA+BP;;OAEG;IACH,sBAAsB,CACpB,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACrC,IAAI;IAuBP;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI;IA0BrD;;OAEG;IACH,yBAAyB,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IAuBP;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,yBAAyB;CAclC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
export class ReactorSubscriptionManager {
|
|
2
|
+
createdSubscriptions = new Map();
|
|
3
|
+
deletedSubscriptions = new Map();
|
|
4
|
+
updatedSubscriptions = new Map();
|
|
5
|
+
relationshipSubscriptions = new Map();
|
|
6
|
+
subscriptionCounter = 0;
|
|
7
|
+
errorHandler;
|
|
8
|
+
constructor(errorHandler) {
|
|
9
|
+
this.errorHandler = errorHandler;
|
|
10
|
+
}
|
|
11
|
+
onDocumentCreated(callback, search) {
|
|
12
|
+
const id = `created-${++this.subscriptionCounter}`;
|
|
13
|
+
this.createdSubscriptions.set(id, { id, callback, search });
|
|
14
|
+
return () => {
|
|
15
|
+
this.createdSubscriptions.delete(id);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
onDocumentDeleted(callback, search) {
|
|
19
|
+
const id = `deleted-${++this.subscriptionCounter}`;
|
|
20
|
+
this.deletedSubscriptions.set(id, { id, callback, search });
|
|
21
|
+
return () => {
|
|
22
|
+
this.deletedSubscriptions.delete(id);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
onDocumentStateUpdated(callback, search, view) {
|
|
26
|
+
const id = `updated-${++this.subscriptionCounter}`;
|
|
27
|
+
this.updatedSubscriptions.set(id, { id, callback, search, view });
|
|
28
|
+
return () => {
|
|
29
|
+
this.updatedSubscriptions.delete(id);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
onRelationshipChanged(callback, search) {
|
|
33
|
+
const id = `relationship-${++this.subscriptionCounter}`;
|
|
34
|
+
this.relationshipSubscriptions.set(id, { id, callback, search });
|
|
35
|
+
return () => {
|
|
36
|
+
this.relationshipSubscriptions.delete(id);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Notify subscribers about created documents
|
|
41
|
+
*/
|
|
42
|
+
notifyDocumentsCreated(documentIds, documentTypes, parentIds) {
|
|
43
|
+
const result = {
|
|
44
|
+
results: documentIds,
|
|
45
|
+
options: { cursor: "", limit: documentIds.length },
|
|
46
|
+
};
|
|
47
|
+
for (const subscription of this.createdSubscriptions.values()) {
|
|
48
|
+
const filteredIds = this.filterDocumentIds(documentIds, subscription.search, documentTypes, parentIds);
|
|
49
|
+
if (filteredIds.length > 0) {
|
|
50
|
+
try {
|
|
51
|
+
subscription.callback({
|
|
52
|
+
...result,
|
|
53
|
+
results: filteredIds,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
this.errorHandler.handleError(error, {
|
|
58
|
+
eventType: "created",
|
|
59
|
+
subscriptionId: subscription.id,
|
|
60
|
+
eventData: filteredIds,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Notify subscribers about deleted documents
|
|
68
|
+
*/
|
|
69
|
+
notifyDocumentsDeleted(documentIds, documentTypes, parentIds) {
|
|
70
|
+
for (const subscription of this.deletedSubscriptions.values()) {
|
|
71
|
+
const filteredIds = this.filterDocumentIds(documentIds, subscription.search, documentTypes, parentIds);
|
|
72
|
+
if (filteredIds.length > 0) {
|
|
73
|
+
try {
|
|
74
|
+
subscription.callback(filteredIds);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
this.errorHandler.handleError(error, {
|
|
78
|
+
eventType: "deleted",
|
|
79
|
+
subscriptionId: subscription.id,
|
|
80
|
+
eventData: filteredIds,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Notify subscribers about updated documents
|
|
88
|
+
*/
|
|
89
|
+
notifyDocumentsUpdated(documents) {
|
|
90
|
+
const result = {
|
|
91
|
+
results: documents,
|
|
92
|
+
options: { cursor: "", limit: documents.length },
|
|
93
|
+
};
|
|
94
|
+
for (const subscription of this.updatedSubscriptions.values()) {
|
|
95
|
+
const filteredDocs = this.filterDocuments(documents, subscription.search);
|
|
96
|
+
if (filteredDocs.length > 0) {
|
|
97
|
+
try {
|
|
98
|
+
subscription.callback({
|
|
99
|
+
...result,
|
|
100
|
+
results: filteredDocs,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
this.errorHandler.handleError(error, {
|
|
105
|
+
eventType: "updated",
|
|
106
|
+
subscriptionId: subscription.id,
|
|
107
|
+
eventData: filteredDocs,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Notify subscribers about relationship changes
|
|
115
|
+
*/
|
|
116
|
+
notifyRelationshipChanged(parentId, childId, changeType, childType) {
|
|
117
|
+
for (const subscription of this.relationshipSubscriptions.values()) {
|
|
118
|
+
if (this.matchesRelationshipFilter(parentId, childId, childType, subscription.search)) {
|
|
119
|
+
try {
|
|
120
|
+
subscription.callback(parentId, childId, changeType);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
this.errorHandler.handleError(error, {
|
|
124
|
+
eventType: "relationshipChanged",
|
|
125
|
+
subscriptionId: subscription.id,
|
|
126
|
+
eventData: { parentId, childId, changeType },
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Clear all subscriptions
|
|
134
|
+
*/
|
|
135
|
+
clearAll() {
|
|
136
|
+
this.createdSubscriptions.clear();
|
|
137
|
+
this.deletedSubscriptions.clear();
|
|
138
|
+
this.updatedSubscriptions.clear();
|
|
139
|
+
this.relationshipSubscriptions.clear();
|
|
140
|
+
}
|
|
141
|
+
filterDocumentIds(documentIds, search, documentTypes, parentIds) {
|
|
142
|
+
if (!search)
|
|
143
|
+
return documentIds;
|
|
144
|
+
return documentIds.filter((id) => {
|
|
145
|
+
if (search.ids && !search.ids.includes(id))
|
|
146
|
+
return false;
|
|
147
|
+
if (search.type && documentTypes) {
|
|
148
|
+
const docType = documentTypes.get(id);
|
|
149
|
+
if (docType !== search.type)
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
if (search.parentId && parentIds) {
|
|
153
|
+
const parentId = parentIds.get(id);
|
|
154
|
+
if (parentId !== search.parentId)
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
filterDocuments(documents, search) {
|
|
161
|
+
if (!search)
|
|
162
|
+
return documents;
|
|
163
|
+
return documents.filter((doc) => {
|
|
164
|
+
if (search.ids && !search.ids.includes(doc.header.id))
|
|
165
|
+
return false;
|
|
166
|
+
if (search.type && doc.header.documentType !== search.type)
|
|
167
|
+
return false;
|
|
168
|
+
if (search.slugs && !search.slugs.includes(doc.header.slug))
|
|
169
|
+
return false;
|
|
170
|
+
return true;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
matchesRelationshipFilter(parentId, childId, childType, search) {
|
|
174
|
+
if (!search)
|
|
175
|
+
return true;
|
|
176
|
+
if (search.parentId && parentId !== search.parentId)
|
|
177
|
+
return false;
|
|
178
|
+
if (search.ids && !search.ids.includes(childId))
|
|
179
|
+
return false;
|
|
180
|
+
if (search.type && childType && childType !== search.type)
|
|
181
|
+
return false;
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=react-subscription-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-subscription-manager.js","sourceRoot":"","sources":["../../../src/subs/react-subscription-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { PHDocument } from "document-model";
|
|
2
|
+
import type { PagedResults, RelationshipChangeType, SearchFilter, ViewFilter } from "../shared/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Error handler for subscription callback errors
|
|
5
|
+
*/
|
|
6
|
+
export interface ISubscriptionErrorHandler {
|
|
7
|
+
/**
|
|
8
|
+
* Called when a subscription callback throws an error
|
|
9
|
+
* @param error - The error that was thrown
|
|
10
|
+
* @param context - Context about which subscription failed
|
|
11
|
+
*/
|
|
12
|
+
handleError(error: unknown, context: SubscriptionErrorContext): void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Context information about a subscription error
|
|
16
|
+
*/
|
|
17
|
+
export interface SubscriptionErrorContext {
|
|
18
|
+
/** The type of event that was being processed */
|
|
19
|
+
eventType: "created" | "deleted" | "updated" | "relationshipChanged";
|
|
20
|
+
/** The subscription ID that failed */
|
|
21
|
+
subscriptionId: string;
|
|
22
|
+
/** Optional additional data about the event */
|
|
23
|
+
eventData?: unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Interface for subscribing to document events in the reactor.
|
|
27
|
+
*/
|
|
28
|
+
export interface IReactorSubscriptionManager {
|
|
29
|
+
/**
|
|
30
|
+
* Subscribes to document creation events
|
|
31
|
+
*
|
|
32
|
+
* @param callback - Function called when documents are created
|
|
33
|
+
* @param search - Optional search filter to limit which documents trigger events
|
|
34
|
+
* @param view - Optional filter containing branch and scopes information
|
|
35
|
+
* @returns A function that unsubscribes from the events
|
|
36
|
+
*/
|
|
37
|
+
onDocumentCreated(callback: (result: PagedResults<string>) => void, search?: SearchFilter): () => void;
|
|
38
|
+
/**
|
|
39
|
+
* Subscribes to document deletion events
|
|
40
|
+
*
|
|
41
|
+
* @param callback - Function called when documents are deleted
|
|
42
|
+
* @param search - Optional search filter to limit which documents trigger events
|
|
43
|
+
* @returns A function that unsubscribes from the events
|
|
44
|
+
*/
|
|
45
|
+
onDocumentDeleted(callback: (documentIds: string[]) => void, search?: SearchFilter): () => void;
|
|
46
|
+
/**
|
|
47
|
+
* Subscribes to document state updates
|
|
48
|
+
*
|
|
49
|
+
* @param callback - Function called when documents are updated
|
|
50
|
+
* @param search - Optional search filter to limit which documents trigger events
|
|
51
|
+
* @param view - Optional filter containing branch and scopes information
|
|
52
|
+
* @returns A function that unsubscribes from the events
|
|
53
|
+
*/
|
|
54
|
+
onDocumentStateUpdated(callback: (result: PagedResults<PHDocument>) => void, search?: SearchFilter, view?: ViewFilter): () => void;
|
|
55
|
+
/**
|
|
56
|
+
* Subscribes to parent-child relationship change events
|
|
57
|
+
*
|
|
58
|
+
* @param callback - Function called when parent-child relationships change
|
|
59
|
+
* @param search - Optional search filter to limit which documents trigger events
|
|
60
|
+
* @returns A function that unsubscribes from the events
|
|
61
|
+
*/
|
|
62
|
+
onRelationshipChanged(callback: (parentId: string, childId: string, changeType: RelationshipChangeType) => void, search?: SearchFilter): () => void;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/subs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,iDAAiD;IACjD,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,qBAAqB,CAAC;IACrE,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;OAOG;IACH,iBAAiB,CACf,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,EAChD,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,IAAI,CAAC;IAEd;;;;;;OAMG;IACH,iBAAiB,CACf,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,EACzC,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,IAAI,CAAC;IAEd;;;;;;;OAOG;IACH,sBAAsB,CACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,EACpD,MAAM,CAAC,EAAE,YAAY,EACrB,IAAI,CAAC,EAAE,UAAU,GAChB,MAAM,IAAI,CAAC;IAEd;;;;;;OAMG;IACH,qBAAqB,CACnB,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,sBAAsB,KAC/B,IAAI,EACT,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,IAAI,CAAC;CACf"}
|