@iwentsourcing/core 0.1.0 → 0.2.0
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/aggregation/aggregation-declaration.d.ts +27 -27
- package/dist/authentication/public-auth-providers.js.map +1 -1
- package/dist/event-store/create-file-event-store.d.ts +1 -1
- package/dist/example/todo-example.d.ts +6 -6
- package/dist/management/access/access-events.d.ts +104 -104
- package/dist/management/access/access-state.d.ts +269 -269
- package/dist/management/access/access-stream.d.ts +286 -286
- package/dist/management/authentication/authentication-state.d.ts +21 -21
- package/dist/management/authentication/authentication-stream.d.ts +66 -66
- package/dist/management/permission/permission-aggregation.d.ts +101 -101
- package/dist/management/permission/permission-aggregation.test.js +0 -1
- package/dist/management/permission/permission-aggregation.test.js.map +1 -1
- package/dist/management/permission-error-schema.d.ts +29 -29
- package/dist/management/registry/registry-events.d.ts +186 -186
- package/dist/management/registry/registry-state.d.ts +55 -55
- package/dist/management/registry/registry-stream.d.ts +284 -284
- package/dist/management/state-read-policy.js.map +1 -1
- package/dist/management/system/iwentsourcing-realm.d.ts +106 -106
- package/dist/runtime/host-result-builder.d.ts +13 -13
- package/dist/runtime/permission-grant-schema.d.ts +7 -7
- package/dist/runtime/runtime-result.d.ts +26 -26
- package/dist/sequencer/create-sequencer-storage.d.ts +4 -4
- package/dist/sequencer/create-state-processor.d.ts +4 -4
- package/dist/sequencer/sequence-topic.d.ts +1 -1
- package/dist/stream/stream-declaration.d.ts +34 -34
- package/dist/tsbuild.info +1 -1
- package/dist/utils/combine-abort-signal.js.map +1 -1
- package/dist/worker/create-stream-worker.d.ts +2 -2
- package/package.json +1 -1
- package/dist/lock/exclusive-lock.d.ts +0 -4
- package/dist/lock/exclusive-lock.js +0 -8
- package/dist/lock/exclusive-lock.js.map +0 -1
- package/dist/management/managed-permission-denied-error.d.ts +0 -50
- package/dist/management/managed-permission-denied-error.js +0 -26
- package/dist/management/managed-permission-denied-error.js.map +0 -1
- package/dist/processing/create-event-processor.d.ts +0 -23
- package/dist/processing/create-event-processor.js +0 -133
- package/dist/processing/create-event-processor.js.map +0 -1
- package/dist/processing/create-event-processor.test.d.ts +0 -1
- package/dist/processing/create-event-processor.test.js +0 -218
- package/dist/processing/create-event-processor.test.js.map +0 -1
- package/dist/processing/event-processing-topic.d.ts +0 -5
- package/dist/processing/event-processing-topic.js +0 -13
- package/dist/processing/event-processing-topic.js.map +0 -1
- package/dist/processing/select-event-shard.d.ts +0 -1
- package/dist/processing/select-event-shard.js +0 -14
- package/dist/processing/select-event-shard.js.map +0 -1
- package/dist/processing/sequencer-cache-key.d.ts +0 -2
- package/dist/processing/sequencer-cache-key.js +0 -13
- package/dist/processing/sequencer-cache-key.js.map +0 -1
- package/dist/tmp-typetest.d.ts +0 -1
- package/dist/tmp-typetest.js +0 -3
- package/dist/tmp-typetest.js.map +0 -1
- package/dist/tracer/create-noop-telemetry.d.ts +0 -2
- package/dist/tracer/create-noop-telemetry.js +0 -22
- package/dist/tracer/create-noop-telemetry.js.map +0 -1
- package/dist/tracer/create-tracer.d.ts +0 -2
- package/dist/tracer/create-tracer.js +0 -15
- package/dist/tracer/create-tracer.js.map +0 -1
- package/dist/utils/lru-cache.d.ts +0 -11
- package/dist/utils/lru-cache.js +0 -44
- package/dist/utils/lru-cache.js.map +0 -1
- package/dist/worker/create-stream-wroker.test.d.ts +0 -0
- package/dist/worker/create-stream-wroker.test.js +0 -2
- package/dist/worker/create-stream-wroker.test.js.map +0 -1
- package/dist/worker/process-pending-events.d.ts +0 -20
- package/dist/worker/process-pending-events.js +0 -106
- package/dist/worker/process-pending-events.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-noop-telemetry.js","sourceRoot":"","sources":["../../src/tracer/create-noop-telemetry.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ,GAAG,EAAE,YAAY,KAAI,CAAC,EAAU,CAAC;AAE/C,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,YAAY,CAAC,KAAa;YACxB,OAAO;gBACL,UAAU,CAAI,SAAiB,EAAE,KAAkB,EAAE,EAAqB;oBACxE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;gBACD,KAAK,CAAC,CAAC,WAAW,CAChB,KAAa,EACb,KAAkB,EAClB,QAAiC;oBAEjC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACpB,CAAC;gBACD,UAAU;oBACR,OAAO;wBACL,OAAO,EAAE,EAAE;wBACX,MAAM,EAAE,EAAE;qBACX,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export function createConsoleTelemetry() {
|
|
2
|
-
return {
|
|
3
|
-
createTracer(name) {
|
|
4
|
-
return {
|
|
5
|
-
createSpan(name, opts, fn) {
|
|
6
|
-
return fn({
|
|
7
|
-
setAttribute(key, value) { },
|
|
8
|
-
end() { },
|
|
9
|
-
});
|
|
10
|
-
},
|
|
11
|
-
};
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=create-tracer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-tracer.js","sourceRoot":"","sources":["../../src/tracer/create-tracer.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,YAAY,CAAC,IAAY;YACvB,OAAO;gBACL,UAAU,CACR,IAAY,EACZ,IAAiB,EACjB,EAAqB;oBAErB,OAAO,EAAE,CAAC;wBACR,YAAY,CAAC,GAAW,EAAE,KAAa,IAAG,CAAC;wBAC3C,GAAG,KAAI,CAAC;qBACT,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare class LruCache<K, V> {
|
|
2
|
-
private readonly map;
|
|
3
|
-
private readonly maxSize;
|
|
4
|
-
constructor(maxSize: number);
|
|
5
|
-
get(key: K): V | undefined;
|
|
6
|
-
set(key: K, value: V): void;
|
|
7
|
-
has(key: K): boolean;
|
|
8
|
-
delete(key: K): boolean;
|
|
9
|
-
clear(): void;
|
|
10
|
-
private evict;
|
|
11
|
-
}
|
package/dist/utils/lru-cache.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
export class LruCache {
|
|
2
|
-
map;
|
|
3
|
-
maxSize;
|
|
4
|
-
constructor(maxSize) {
|
|
5
|
-
this.maxSize = Math.max(1, Math.floor(maxSize));
|
|
6
|
-
this.map = new Map();
|
|
7
|
-
}
|
|
8
|
-
get(key) {
|
|
9
|
-
const value = this.map.get(key);
|
|
10
|
-
if (value !== undefined) {
|
|
11
|
-
this.map.delete(key);
|
|
12
|
-
this.map.set(key, value);
|
|
13
|
-
}
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
set(key, value) {
|
|
17
|
-
if (this.map.has(key)) {
|
|
18
|
-
this.map.delete(key);
|
|
19
|
-
}
|
|
20
|
-
this.map.set(key, value);
|
|
21
|
-
this.evict();
|
|
22
|
-
}
|
|
23
|
-
has(key) {
|
|
24
|
-
return this.map.has(key);
|
|
25
|
-
}
|
|
26
|
-
delete(key) {
|
|
27
|
-
return this.map.delete(key);
|
|
28
|
-
}
|
|
29
|
-
clear() {
|
|
30
|
-
this.map.clear();
|
|
31
|
-
}
|
|
32
|
-
evict() {
|
|
33
|
-
while (this.map.size > this.maxSize) {
|
|
34
|
-
const oldestKey = this.map.keys().next().value;
|
|
35
|
-
if (oldestKey !== undefined) {
|
|
36
|
-
this.map.delete(oldestKey);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=lru-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../../src/utils/lru-cache.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAQ;IACF,GAAG,CAAY;IACf,OAAO,CAAS;IAEjC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,GAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAEO,KAAK;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAsB,CAAC;YAChE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-stream-wroker.test.js","sourceRoot":"","sources":["../../src/worker/create-stream-wroker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { RuntimeOptions } from '../management/runtime-options.js';
|
|
2
|
-
import { Registry } from '../registry/registry.js';
|
|
3
|
-
import { InMemorySystems } from '../management/system/in-memory-systems.js';
|
|
4
|
-
export interface ProcessPendingEventsOptions {
|
|
5
|
-
runtime: RuntimeOptions;
|
|
6
|
-
registry: Registry;
|
|
7
|
-
system: InMemorySystems;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Process any pending stream events on startup.
|
|
11
|
-
* This iterates through all enabled stream runs and processes any events
|
|
12
|
-
* that haven't been processed yet.
|
|
13
|
-
*/
|
|
14
|
-
export declare function processPendingStreamEvents(opts: ProcessPendingEventsOptions, tenants: string[], signal: AbortSignal): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Process any pending aggregation events on startup.
|
|
17
|
-
* This iterates through all enabled aggregation runs and processes any events
|
|
18
|
-
* that haven't been processed yet.
|
|
19
|
-
*/
|
|
20
|
-
export declare function processPendingAggregationEvents(opts: ProcessPendingEventsOptions, tenants: string[], signal: AbortSignal): Promise<void>;
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { createStreamSequencer } from './create-stream-sequencer.js';
|
|
2
|
-
import { createAggregationSequencer } from './create-aggregation-sequencer.js';
|
|
3
|
-
import { createLogger } from '../logger/logger.js';
|
|
4
|
-
const logger = createLogger('pending-events');
|
|
5
|
-
/**
|
|
6
|
-
* Process any pending stream events on startup.
|
|
7
|
-
* This iterates through all enabled stream runs and processes any events
|
|
8
|
-
* that haven't been processed yet.
|
|
9
|
-
*/
|
|
10
|
-
export async function processPendingStreamEvents(opts, tenants, signal) {
|
|
11
|
-
logger.info('checking for pending stream events');
|
|
12
|
-
for (const tenant of tenants) {
|
|
13
|
-
const management = opts.system.access(tenant);
|
|
14
|
-
// Iterate all enabled stream runs
|
|
15
|
-
for await (const streamRun of management
|
|
16
|
-
.snapshot('streamRuns')
|
|
17
|
-
.range(null, { signal })) {
|
|
18
|
-
if (!streamRun.data.enabled) {
|
|
19
|
-
continue;
|
|
20
|
-
}
|
|
21
|
-
const streamRegistration = await opts.registry.getStream({
|
|
22
|
-
tenant,
|
|
23
|
-
realm: streamRun.data.realm,
|
|
24
|
-
pattern: streamRun.data.pattern,
|
|
25
|
-
version: streamRun.data.version,
|
|
26
|
-
}, signal);
|
|
27
|
-
if (!streamRegistration) {
|
|
28
|
-
logger.debug('stream registration not found', {
|
|
29
|
-
pattern: streamRun.data.pattern,
|
|
30
|
-
version: streamRun.data.version,
|
|
31
|
-
});
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
logger.info('processing pending events for stream', {
|
|
35
|
-
name: streamRun.data.name,
|
|
36
|
-
run: streamRun.data.run,
|
|
37
|
-
pattern: streamRun.data.pattern,
|
|
38
|
-
});
|
|
39
|
-
const sequencer = createStreamSequencer({ runtime: opts.runtime }, streamRegistration, {
|
|
40
|
-
name: streamRun.data.name,
|
|
41
|
-
run: streamRun.data.run,
|
|
42
|
-
args: streamRun.data.args,
|
|
43
|
-
}, signal);
|
|
44
|
-
// Process all pending events (attach without an "until" constraint
|
|
45
|
-
// will process from last acknowledged event to the end)
|
|
46
|
-
for await (const result of sequencer.attach({ storedAt: new Date() }, signal)) {
|
|
47
|
-
logger.debug('processed pending stream event', {
|
|
48
|
-
success: result.success,
|
|
49
|
-
name: streamRun.data.name,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
logger.info('finished processing pending stream events');
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Process any pending aggregation events on startup.
|
|
58
|
-
* This iterates through all enabled aggregation runs and processes any events
|
|
59
|
-
* that haven't been processed yet.
|
|
60
|
-
*/
|
|
61
|
-
export async function processPendingAggregationEvents(opts, tenants, signal) {
|
|
62
|
-
logger.info('checking for pending aggregation events');
|
|
63
|
-
for (const tenant of tenants) {
|
|
64
|
-
const management = opts.system.access(tenant);
|
|
65
|
-
// Iterate all enabled aggregation runs
|
|
66
|
-
for await (const aggregationRun of management
|
|
67
|
-
.snapshot('aggregationRuns')
|
|
68
|
-
.range(null, { signal })) {
|
|
69
|
-
if (!aggregationRun.data.enabled) {
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
const aggregationRegistration = await opts.registry.getAggregation({
|
|
73
|
-
tenant,
|
|
74
|
-
realm: aggregationRun.data.realm,
|
|
75
|
-
pattern: aggregationRun.data.pattern,
|
|
76
|
-
version: aggregationRun.data.version,
|
|
77
|
-
}, signal);
|
|
78
|
-
if (!aggregationRegistration) {
|
|
79
|
-
logger.debug('aggregation registration not found', {
|
|
80
|
-
pattern: aggregationRun.data.pattern,
|
|
81
|
-
version: aggregationRun.data.version,
|
|
82
|
-
});
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
logger.info('processing pending events for aggregation', {
|
|
86
|
-
name: aggregationRun.data.name,
|
|
87
|
-
run: aggregationRun.data.run,
|
|
88
|
-
pattern: aggregationRun.data.pattern,
|
|
89
|
-
});
|
|
90
|
-
const sequencer = createAggregationSequencer({ runtime: opts.runtime }, aggregationRegistration, {
|
|
91
|
-
name: aggregationRun.data.name,
|
|
92
|
-
run: aggregationRun.data.run,
|
|
93
|
-
args: aggregationRun.data.args,
|
|
94
|
-
}, signal);
|
|
95
|
-
// Process all pending events
|
|
96
|
-
for await (const result of sequencer.attach({ storedAt: new Date() }, signal)) {
|
|
97
|
-
logger.debug('processed pending aggregation event', {
|
|
98
|
-
success: result.success,
|
|
99
|
-
name: aggregationRun.data.name,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
logger.info('finished processing pending aggregation events');
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=process-pending-events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process-pending-events.js","sourceRoot":"","sources":["../../src/worker/process-pending-events.ts"],"names":[],"mappings":"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"}
|