@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 +1 @@
1
- {"version":3,"file":"combine-abort-signal.js","sourceRoot":"","sources":["../../src/utils/combine-abort-signal.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,KAAkB,EAAE,MAAmB;IACxE,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"combine-abort-signal.js","sourceRoot":"","sources":["../../src/utils/combine-abort-signal.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,MAAmB;IAEnB,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC"}
@@ -11,11 +11,11 @@ export interface WorkerOptions {
11
11
  }
12
12
  export declare const streamWorkerProcessTopic: Readonly<import("../queue/topic-definition.js").TopicDefinition<["tenant", "realm", "pattern", "version"], import("../typing/object-type-description.js").ObjectTypeDescription<{
13
13
  event: string;
14
+ eventId: string;
15
+ storedAt: Date;
14
16
  streamArgs: {
15
17
  [key: string]: string;
16
18
  };
17
- eventId: string;
18
- storedAt: Date;
19
19
  }>>>;
20
20
  export declare const streamWorkerAttachedTopic: Readonly<import("../queue/topic-definition.js").TopicDefinition<["tenant", "realm", "pattern", "version"], import("../typing/object-type-description.js").ObjectTypeDescription<{
21
21
  event: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iwentsourcing/core",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,4 +0,0 @@
1
- export interface ExclusiveLock {
2
- runExclusive<T>(name: string, fn: () => Promise<T>): Promise<T>;
3
- }
4
- export declare function createNoopExclusiveLock(): ExclusiveLock;
@@ -1,8 +0,0 @@
1
- export function createNoopExclusiveLock() {
2
- return {
3
- runExclusive(_name, fn) {
4
- return fn();
5
- },
6
- };
7
- }
8
- //# sourceMappingURL=exclusive-lock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exclusive-lock.js","sourceRoot":"","sources":["../../src/lock/exclusive-lock.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,YAAY,CAAC,KAAK,EAAE,EAAE;YACpB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,50 +0,0 @@
1
- import type { SequencerPartition } from '../sequencer/sequencer-partition.js';
2
- import type { UserContext } from './user-context.js';
3
- export type ManagedPermissionDeniedDetail = {
4
- kind: 'state-read';
5
- stateName: string;
6
- permissionPresent: boolean;
7
- permissionRead: boolean;
8
- } | {
9
- kind: 'event-write';
10
- eventName: string;
11
- permissionPresent: boolean;
12
- permissionWrite: boolean;
13
- } | {
14
- kind: 'event-read';
15
- eventName: string;
16
- storedEventId: string;
17
- permissionPresent: boolean;
18
- permissionRead: boolean;
19
- } | {
20
- kind: 'state-read-policy';
21
- stateName: string;
22
- terminal: string;
23
- indexName?: string;
24
- indexBindings?: Record<string, string>;
25
- };
26
- export type ManagedPermissionDeniedPayload = {
27
- partition: SequencerPartition;
28
- context: {
29
- authId: string;
30
- name: string;
31
- args: Record<string, string>;
32
- auth: {
33
- sub: string;
34
- aud: string;
35
- iss: string;
36
- };
37
- };
38
- detail: ManagedPermissionDeniedDetail;
39
- };
40
- export declare function managedPermissionDeniedPayload(error: ManagedPermissionDeniedError): ManagedPermissionDeniedPayload;
41
- export declare class ManagedPermissionDeniedError extends Error {
42
- readonly context: UserContext;
43
- readonly partition: SequencerPartition;
44
- readonly detail: ManagedPermissionDeniedDetail;
45
- constructor(opts: {
46
- context: UserContext;
47
- partition: SequencerPartition;
48
- detail: ManagedPermissionDeniedDetail;
49
- });
50
- }
@@ -1,26 +0,0 @@
1
- export function managedPermissionDeniedPayload(error) {
2
- return {
3
- partition: { ...error.partition },
4
- context: {
5
- authId: error.context.authId,
6
- name: error.context.name,
7
- args: { ...error.context.args },
8
- auth: { ...error.context.auth },
9
- },
10
- detail: error.detail,
11
- };
12
- }
13
- export class ManagedPermissionDeniedError extends Error {
14
- context;
15
- partition;
16
- detail;
17
- constructor(opts) {
18
- super('no permission');
19
- this.name = 'ManagedPermissionDeniedError';
20
- this.context = opts.context;
21
- this.partition = opts.partition;
22
- this.detail = opts.detail;
23
- Object.setPrototypeOf(this, new.target.prototype);
24
- }
25
- }
26
- //# sourceMappingURL=managed-permission-denied-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-permission-denied-error.js","sourceRoot":"","sources":["../../src/management/managed-permission-denied-error.ts"],"names":[],"mappings":"AA0CA,MAAM,UAAU,8BAA8B,CAC5C,KAAmC;IAEnC,OAAO;QACL,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;QACjC,OAAO,EAAE;YACP,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;YAC5B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YACxB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YAC/B,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;SAChC;QACD,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAC5C,OAAO,CAAc;IACrB,SAAS,CAAqB;IAC9B,MAAM,CAAgC;IAE/C,YAAY,IAIX;QACC,KAAK,CAAC,eAAe,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -1,23 +0,0 @@
1
- import { BootstrapperPiece } from '../runner/bootstrapper.js';
2
- import { RuntimeOptions } from '../management/runtime-options.js';
3
- import { Systems } from '../management/system/systems.js';
4
- import { Subscription } from '../queue/subscription.js';
5
- import { eventProcessingTopic } from './event-processing-topic.js';
6
- import { Registry } from '../registry/registry.js';
7
- export interface EventProcessorOptions {
8
- runtime: RuntimeOptions;
9
- system: Systems;
10
- registry: Registry;
11
- parallelism?: number;
12
- shard?: number;
13
- shardCount?: number;
14
- subscriptionName?: string;
15
- eventProcessing?: {
16
- sequencerCacheSize?: number;
17
- };
18
- }
19
- interface EventProcessorInit {
20
- subscription: Subscription<typeof eventProcessingTopic>;
21
- }
22
- export declare function createEventProcessor(opts: EventProcessorOptions): BootstrapperPiece<EventProcessorInit>;
23
- export {};
@@ -1,133 +0,0 @@
1
- import { createLogger } from '../logger/logger.js';
2
- import { eventProcessingTopic } from './event-processing-topic.js';
3
- import { getManagedAggregationSequencers } from '../worker/get-managed-stream-sequencers.js';
4
- import { getManagedStreamSequencers } from '../worker/get-managed-stream-sequencers.js';
5
- import { getErrorMessage } from '../runtime/get-error-message.js';
6
- import { LruCache } from '../utils/lru-cache.js';
7
- const logger = createLogger('event-processor');
8
- export function createEventProcessor(opts) {
9
- const registry = opts.registry;
10
- const tracer = opts.runtime.telemetry.createTracer('event-processor');
11
- const cacheSize = opts.runtime.eventProcessing?.sequencerCacheSize ??
12
- opts.eventProcessing?.sequencerCacheSize ??
13
- 200;
14
- const streamSequencers = new LruCache(cacheSize);
15
- const aggregationSequencers = new LruCache(cacheSize);
16
- const shardFilter = opts.shard === undefined
17
- ? undefined
18
- : {
19
- shard: String(opts.shard),
20
- };
21
- const subscriptionName = opts.subscriptionName ??
22
- `event-processor-${opts.shard !== undefined ? opts.shard : 'all'}`;
23
- return {
24
- async initialize(signal) {
25
- await opts.runtime.queue.createTopic(eventProcessingTopic, {
26
- signal,
27
- });
28
- const subscription = await opts.runtime.queue.createSubscription(eventProcessingTopic, subscriptionName, {
29
- filter: shardFilter ?? {},
30
- autoRemove: false,
31
- });
32
- return {
33
- subscription,
34
- };
35
- },
36
- async run(init, signal) {
37
- const parallelism = opts.parallelism ??
38
- opts.runtime.eventProcessing?.parallelism ??
39
- 4;
40
- const limit = Math.max(1, parallelism);
41
- const inFlight = new Set();
42
- const cleanup = async () => {
43
- try {
44
- await init.subscription.remove(signal);
45
- }
46
- catch (err) {
47
- logger.debug('cleanup subscription failed', {
48
- error: getErrorMessage(err),
49
- });
50
- }
51
- };
52
- signal.addEventListener('abort', cleanup, { once: true });
53
- try {
54
- for await (const message of init.subscription.consume({ signal })) {
55
- if (signal.aborted) {
56
- break;
57
- }
58
- const task = handleMessage(message, signal).finally(() => {
59
- inFlight.delete(task);
60
- });
61
- inFlight.add(task);
62
- if (inFlight.size >= limit) {
63
- await Promise.race(inFlight);
64
- }
65
- }
66
- await Promise.allSettled(inFlight);
67
- }
68
- finally {
69
- await cleanup();
70
- }
71
- },
72
- };
73
- async function handleMessage(message, signal) {
74
- await tracer.createSpan('process.message', {
75
- attributes: {
76
- event: message.data.event,
77
- eventId: message.data.eventId,
78
- shard: message.attributes.shard,
79
- },
80
- }, async () => {
81
- try {
82
- await processSequencers(message, signal);
83
- }
84
- catch (err) {
85
- logger.error(getErrorMessage(err));
86
- }
87
- finally {
88
- await message.ack();
89
- }
90
- });
91
- }
92
- async function processSequencers(message, signal) {
93
- const sequencers = [];
94
- for await (const sequencer of getManagedStreamSequencers({ registry, runtime: opts.runtime, system: opts.system }, message.attributes.tenant, message.attributes.realm, message.attributes.pattern, message.attributes.version, message.data.event, signal, streamSequencers)) {
95
- sequencers.push(sequencer);
96
- }
97
- for await (const sequencer of getManagedAggregationSequencers({ registry, runtime: opts.runtime, system: opts.system }, message.attributes.tenant, message.attributes.realm, message.attributes.pattern, message.attributes.version, message.data.event, signal, aggregationSequencers)) {
98
- sequencers.push(sequencer);
99
- }
100
- await Promise.all(sequencers.map((sequencer) => processSingleSequencer(sequencer, {
101
- id: message.data.eventId,
102
- storedAt: message.data.storedAt,
103
- event: message.data.event,
104
- }, opts.runtime.telemetry, signal)));
105
- }
106
- }
107
- async function processSingleSequencer(sequencer, event, telemetry, signal) {
108
- const tracer = telemetry.createTracer('event-processor');
109
- await tracer.createSpan('process.sequencer', {
110
- attributes: {
111
- stream: sequencer.partition.name,
112
- realm: sequencer.partition.realm,
113
- pattern: sequencer.partition.pattern,
114
- version: sequencer.partition.version,
115
- },
116
- }, async () => {
117
- try {
118
- for await (const result of sequencer.attach({ id: event.id }, signal)) {
119
- logger.debug('event processed', {
120
- id: event.id,
121
- stream: sequencer.partition.name,
122
- success: result.success,
123
- });
124
- }
125
- }
126
- catch (err) {
127
- if (!signal.aborted) {
128
- logger.error(getErrorMessage(err));
129
- }
130
- }
131
- });
132
- }
133
- //# sourceMappingURL=create-event-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-event-processor.js","sourceRoot":"","sources":["../../src/processing/create-event-processor.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,218 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { createEventProcessor } from './create-event-processor.js';
4
- import { createTestRuntime } from '../testing/create-test-case.js';
5
- import { defineState } from '../storage/define-state.js';
6
- import { declareState } from '../storage/declare-state.js';
7
- import { string } from '../typing/string.js';
8
- import { number } from '../typing/number.js';
9
- import { defineEvents } from '../stream/define-events.js';
10
- import { declareEvent } from '../storage/declare-event.js';
11
- import { createHostRuntime } from '../runtime/create-host-runtime.js';
12
- import { mapFromStateDeclarations } from '../management/map-from-state-declarations.js';
13
- import { mapFromEventDeclarations } from '../management/map-from-event-declarations.js';
14
- import { createStreamInstanceEventStore } from '../event-store/create-stream-instance-event-store.js';
15
- import { mapToStateDefinitions } from '../management/map-from-state-declarations.js';
16
- import { createSequencerStorage } from '../sequencer/create-sequencer-storage.js';
17
- import { selectEventShard } from './select-event-shard.js';
18
- function createStubSystem() {
19
- const emptyStream = {
20
- snapshot: () => ({
21
- range: async function* () {
22
- return;
23
- },
24
- index() {
25
- return this;
26
- },
27
- filter() {
28
- return this;
29
- },
30
- get() {
31
- return Promise.resolve(null);
32
- },
33
- }),
34
- };
35
- const emptyAggregate = {
36
- snapshot: () => ({
37
- range: async function* () {
38
- return;
39
- },
40
- get() {
41
- return Promise.resolve(null);
42
- },
43
- }),
44
- };
45
- return {
46
- access() {
47
- return emptyStream;
48
- },
49
- registry() {
50
- return emptyStream;
51
- },
52
- auth() {
53
- return emptyStream;
54
- },
55
- permission() {
56
- return emptyAggregate;
57
- },
58
- };
59
- }
60
- function createCounterStreamRegistration() {
61
- const state = defineState([
62
- declareState('counters', {
63
- id: string(),
64
- value: number(),
65
- }, ['id']),
66
- ]);
67
- const events = defineEvents([
68
- declareEvent('increment', {
69
- id: string(),
70
- amount: number(),
71
- }),
72
- ]);
73
- const registration = {
74
- identifier: {
75
- tenant: 'tenant',
76
- realm: 'realm',
77
- pattern: 'counter',
78
- version: 'v1',
79
- },
80
- state: mapFromStateDeclarations(state),
81
- events: mapFromEventDeclarations(events),
82
- outputs: {},
83
- runtime: createHostRuntime(events, {
84
- increment: async (evt, ctx) => {
85
- const existing = (await ctx.snapshot('counters').get({ id: evt.id }, { signal: ctx.signal })) ?? null;
86
- if (!existing) {
87
- await ctx.state('counters').insert({
88
- id: evt.id,
89
- value: evt.amount,
90
- }, { signal: ctx.signal });
91
- }
92
- else {
93
- await ctx.state('counters').patch({
94
- id: evt.id,
95
- value: existing.data.value + evt.amount,
96
- }, { signal: ctx.signal });
97
- }
98
- },
99
- }, {}),
100
- auth: { allowAnonymous: true },
101
- };
102
- const partition = {
103
- tenant: 'tenant',
104
- realm: 'realm',
105
- pattern: 'counter',
106
- version: 'v1',
107
- name: 'counter',
108
- run: 1,
109
- };
110
- return { registration, partition };
111
- }
112
- function createStubRegistry(registration) {
113
- return {
114
- async getStream(params) {
115
- if (params.tenant === registration.identifier.tenant &&
116
- params.realm === registration.identifier.realm &&
117
- params.pattern === registration.identifier.pattern &&
118
- params.version === registration.identifier.version) {
119
- return registration;
120
- }
121
- return null;
122
- },
123
- async getAggregation() {
124
- return null;
125
- },
126
- async getAuth() {
127
- return {};
128
- },
129
- async *getAffectedAggregations() {
130
- return;
131
- },
132
- };
133
- }
134
- async function readCounterValue(opts) {
135
- const storage = createSequencerStorage({
136
- state: mapToStateDefinitions(mapFromStateDeclarations(defineState([
137
- declareState('counters', {
138
- id: string(),
139
- value: number(),
140
- }, ['id']),
141
- ]))),
142
- partition: opts.partition,
143
- partitionBuilder: opts.runtime.partitionBuilder,
144
- }, opts.signal);
145
- const counter = await storage
146
- .storage('state')
147
- .snapshot('counters')
148
- .get({ id: 'id-0' }, { signal: opts.signal });
149
- return counter?.data.value ?? 0;
150
- }
151
- describe('create-event-processor', () => {
152
- it('processes events and mutates state', async (test) => {
153
- const runCtrl = new AbortController();
154
- test.signal.addEventListener('abort', () => runCtrl.abort());
155
- const runtime = createTestRuntime(runCtrl.signal);
156
- const { registration, partition } = createCounterStreamRegistration();
157
- const registry = createStubRegistry(registration);
158
- const processor = createEventProcessor({
159
- runtime,
160
- system: createStubSystem(),
161
- registry: registry,
162
- });
163
- const init = await processor.initialize(runCtrl.signal);
164
- const runPromise = processor.run(init, runCtrl.signal);
165
- const store = createStreamInstanceEventStore({ runtime, partition, acceptCreatedAsStored: false }, runCtrl.signal);
166
- await store.push('increment', { id: 'id-0', amount: 2 }, { signal: runCtrl.signal, auth: { sub: 'sub', iss: 'iss', aud: 'aud' } });
167
- // small delay to allow processing
168
- await new Promise((resolve) => setTimeout(resolve, 50));
169
- const value = await readCounterValue({
170
- runtime,
171
- partition,
172
- signal: runCtrl.signal,
173
- });
174
- assert.equal(value, 2);
175
- runCtrl.abort();
176
- await runPromise;
177
- });
178
- it('processes events across expanded shard counts', async (test) => {
179
- const runCtrl = new AbortController();
180
- test.signal.addEventListener('abort', () => runCtrl.abort());
181
- const runtime = createTestRuntime(runCtrl.signal);
182
- runtime.eventProcessing = {
183
- shardCount: 2,
184
- shardCounts: [1, 2],
185
- };
186
- const { registration, partition } = createCounterStreamRegistration();
187
- const registry = createStubRegistry(registration);
188
- const processor = createEventProcessor({
189
- runtime,
190
- system: createStubSystem(),
191
- registry: registry,
192
- });
193
- const init = await processor.initialize(runCtrl.signal);
194
- const runPromise = processor.run(init, runCtrl.signal);
195
- const store = createStreamInstanceEventStore({ runtime, partition, acceptCreatedAsStored: false }, runCtrl.signal);
196
- const shardCount = runtime.eventProcessing.shardCount ?? 1;
197
- let idZero = 'id-0';
198
- while (selectEventShard(idZero, shardCount) !== '0') {
199
- idZero = `id-0-${Math.random()}`;
200
- }
201
- let idOne = 'id-1';
202
- while (selectEventShard(idOne, shardCount) !== '1') {
203
- idOne = `id-1-${Math.random()}`;
204
- }
205
- await store.push('increment', { id: 'id-0', amount: 1 }, { signal: runCtrl.signal, id: idZero, auth: { sub: 'sub', iss: 'iss', aud: 'aud' } });
206
- await store.push('increment', { id: 'id-0', amount: 3 }, { signal: runCtrl.signal, id: idOne, auth: { sub: 'sub', iss: 'iss', aud: 'aud' } });
207
- await new Promise((resolve) => setTimeout(resolve, 100));
208
- const value = await readCounterValue({
209
- runtime,
210
- partition,
211
- signal: runCtrl.signal,
212
- });
213
- assert.equal(value, 4);
214
- runCtrl.abort();
215
- await runPromise;
216
- });
217
- });
218
- //# sourceMappingURL=create-event-processor.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-event-processor.test.js","sourceRoot":"","sources":["../../src/processing/create-event-processor.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare const eventProcessingTopic: Readonly<import("../queue/topic-definition.js").TopicDefinition<["tenant", "realm", "pattern", "version", "shard"], import("../typing/object-type-description.js").ObjectTypeDescription<{
2
- storedAt: Date;
3
- eventId: string;
4
- event: string;
5
- }>>>;
@@ -1,13 +0,0 @@
1
- import { defineTopic } from '../queue/define-topic.js';
2
- import { object } from '../typing/object.js';
3
- import { date } from '../typing/date.js';
4
- import { string } from '../typing/string.js';
5
- export const eventProcessingTopic = defineTopic('event.processing', {
6
- attributes: ['tenant', 'realm', 'pattern', 'version', 'shard'],
7
- data: object('EventProcessingUpdate', {
8
- storedAt: date(),
9
- eventId: string(),
10
- event: string(),
11
- }),
12
- });
13
- //# sourceMappingURL=event-processing-topic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-processing-topic.js","sourceRoot":"","sources":["../../src/processing/event-processing-topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC,kBAAkB,EAAE;IAClE,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAU;IACvE,IAAI,EAAE,MAAM,CAAC,uBAAuB,EAAE;QACpC,QAAQ,EAAE,IAAI,EAAE;QAChB,OAAO,EAAE,MAAM,EAAE;QACjB,KAAK,EAAE,MAAM,EAAE;KAChB,CAAC;CACH,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export declare function selectEventShard(eventId: string, shardCount: number): string;
@@ -1,14 +0,0 @@
1
- import { serializeObject } from '../utils/serialize-object.js';
2
- export function selectEventShard(eventId, shardCount) {
3
- const normalizedShardCount = Math.max(1, Math.floor(shardCount));
4
- if (normalizedShardCount === 1) {
5
- return '0';
6
- }
7
- let hash = 0;
8
- const data = serializeObject(eventId);
9
- for (let i = 0; i < data.length; i++) {
10
- hash = (hash * 31 + data.charCodeAt(i)) >>> 0;
11
- }
12
- return String(hash % normalizedShardCount);
13
- }
14
- //# sourceMappingURL=select-event-shard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"select-event-shard.js","sourceRoot":"","sources":["../../src/processing/select-event-shard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,UAAkB;IAElB,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,IAAI,oBAAoB,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,GAAG,oBAAoB,CAAC,CAAC;AAC7C,CAAC"}
@@ -1,2 +0,0 @@
1
- import { SequencerPartition } from '../sequencer/sequencer-partition.js';
2
- export declare function sequencerCacheKey(partition: SequencerPartition, name: string, args: Record<string, string>): string;
@@ -1,13 +0,0 @@
1
- import { serializeObject } from '../utils/serialize-object.js';
2
- export function sequencerCacheKey(partition, name, args) {
3
- return [
4
- partition.tenant,
5
- partition.realm,
6
- partition.pattern,
7
- partition.version,
8
- name,
9
- partition.run,
10
- serializeObject(args),
11
- ].join(':');
12
- }
13
- //# sourceMappingURL=sequencer-cache-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sequencer-cache-key.js","sourceRoot":"","sources":["../../src/processing/sequencer-cache-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,UAAU,iBAAiB,CAC/B,SAA6B,EAC7B,IAAY,EACZ,IAA4B;IAE5B,OAAO;QACL,SAAS,CAAC,MAAM;QAChB,SAAS,CAAC,KAAK;QACf,SAAS,CAAC,OAAO;QACjB,SAAS,CAAC,OAAO;QACjB,IAAI;QACJ,SAAS,CAAC,GAAG;QACb,eAAe,CAAC,IAAI,CAAC;KACtB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- const _g = { auth: { sub: '', aud: '', iss: '' } };
2
- export {};
3
- //# sourceMappingURL=tmp-typetest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmp-typetest.js","sourceRoot":"","sources":["../src/tmp-typetest.ts"],"names":[],"mappings":"AAIA,MAAM,EAAE,GAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- import { Telemetry } from './telemetry.js';
2
- export declare function createNoopTelemetry(): Telemetry;
@@ -1,22 +0,0 @@
1
- const noopSpan = { setAttribute() { } };
2
- export function createNoopTelemetry() {
3
- return {
4
- createTracer(_name) {
5
- return {
6
- createSpan(_spanName, _opts, fn) {
7
- return fn(noopSpan);
8
- },
9
- async *iterateSpan(_name, _opts, iterator) {
10
- yield* iterator();
11
- },
12
- getContext() {
13
- return {
14
- traceId: '',
15
- spanId: '',
16
- };
17
- },
18
- };
19
- },
20
- };
21
- }
22
- //# sourceMappingURL=create-noop-telemetry.js.map