@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.
Files changed (68) hide show
  1. package/dist/aggregation/aggregation-declaration.d.ts +27 -27
  2. package/dist/authentication/public-auth-providers.js.map +1 -1
  3. package/dist/event-store/create-file-event-store.d.ts +1 -1
  4. package/dist/example/todo-example.d.ts +6 -6
  5. package/dist/management/access/access-events.d.ts +104 -104
  6. package/dist/management/access/access-state.d.ts +269 -269
  7. package/dist/management/access/access-stream.d.ts +286 -286
  8. package/dist/management/authentication/authentication-state.d.ts +21 -21
  9. package/dist/management/authentication/authentication-stream.d.ts +66 -66
  10. package/dist/management/permission/permission-aggregation.d.ts +101 -101
  11. package/dist/management/permission/permission-aggregation.test.js +0 -1
  12. package/dist/management/permission/permission-aggregation.test.js.map +1 -1
  13. package/dist/management/permission-error-schema.d.ts +29 -29
  14. package/dist/management/registry/registry-events.d.ts +186 -186
  15. package/dist/management/registry/registry-state.d.ts +55 -55
  16. package/dist/management/registry/registry-stream.d.ts +284 -284
  17. package/dist/management/state-read-policy.js.map +1 -1
  18. package/dist/management/system/iwentsourcing-realm.d.ts +106 -106
  19. package/dist/runtime/host-result-builder.d.ts +13 -13
  20. package/dist/runtime/permission-grant-schema.d.ts +7 -7
  21. package/dist/runtime/runtime-result.d.ts +26 -26
  22. package/dist/sequencer/create-sequencer-storage.d.ts +4 -4
  23. package/dist/sequencer/create-state-processor.d.ts +4 -4
  24. package/dist/sequencer/sequence-topic.d.ts +1 -1
  25. package/dist/stream/stream-declaration.d.ts +34 -34
  26. package/dist/tsbuild.info +1 -1
  27. package/dist/utils/combine-abort-signal.js.map +1 -1
  28. package/dist/worker/create-stream-worker.d.ts +2 -2
  29. package/package.json +1 -1
  30. package/dist/lock/exclusive-lock.d.ts +0 -4
  31. package/dist/lock/exclusive-lock.js +0 -8
  32. package/dist/lock/exclusive-lock.js.map +0 -1
  33. package/dist/management/managed-permission-denied-error.d.ts +0 -50
  34. package/dist/management/managed-permission-denied-error.js +0 -26
  35. package/dist/management/managed-permission-denied-error.js.map +0 -1
  36. package/dist/processing/create-event-processor.d.ts +0 -23
  37. package/dist/processing/create-event-processor.js +0 -133
  38. package/dist/processing/create-event-processor.js.map +0 -1
  39. package/dist/processing/create-event-processor.test.d.ts +0 -1
  40. package/dist/processing/create-event-processor.test.js +0 -218
  41. package/dist/processing/create-event-processor.test.js.map +0 -1
  42. package/dist/processing/event-processing-topic.d.ts +0 -5
  43. package/dist/processing/event-processing-topic.js +0 -13
  44. package/dist/processing/event-processing-topic.js.map +0 -1
  45. package/dist/processing/select-event-shard.d.ts +0 -1
  46. package/dist/processing/select-event-shard.js +0 -14
  47. package/dist/processing/select-event-shard.js.map +0 -1
  48. package/dist/processing/sequencer-cache-key.d.ts +0 -2
  49. package/dist/processing/sequencer-cache-key.js +0 -13
  50. package/dist/processing/sequencer-cache-key.js.map +0 -1
  51. package/dist/tmp-typetest.d.ts +0 -1
  52. package/dist/tmp-typetest.js +0 -3
  53. package/dist/tmp-typetest.js.map +0 -1
  54. package/dist/tracer/create-noop-telemetry.d.ts +0 -2
  55. package/dist/tracer/create-noop-telemetry.js +0 -22
  56. package/dist/tracer/create-noop-telemetry.js.map +0 -1
  57. package/dist/tracer/create-tracer.d.ts +0 -2
  58. package/dist/tracer/create-tracer.js +0 -15
  59. package/dist/tracer/create-tracer.js.map +0 -1
  60. package/dist/utils/lru-cache.d.ts +0 -11
  61. package/dist/utils/lru-cache.js +0 -44
  62. package/dist/utils/lru-cache.js.map +0 -1
  63. package/dist/worker/create-stream-wroker.test.d.ts +0 -0
  64. package/dist/worker/create-stream-wroker.test.js +0 -2
  65. package/dist/worker/create-stream-wroker.test.js.map +0 -1
  66. package/dist/worker/process-pending-events.d.ts +0 -20
  67. package/dist/worker/process-pending-events.js +0 -106
  68. 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,2 +0,0 @@
1
- import { Telemetry } from './telemetry.js';
2
- export declare function createConsoleTelemetry(): Telemetry;
@@ -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
- }
@@ -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,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=create-stream-wroker.test.js.map
@@ -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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"}