@velony/contracts 2.0.0 → 3.0.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 (31) hide show
  1. package/README.md +16 -17
  2. package/dist/identity/user-avatar-changed.integration-event.d.ts +12 -0
  3. package/dist/identity/user-avatar-changed.integration-event.js +3 -0
  4. package/dist/identity/user-avatar-changed.integration-event.js.map +1 -0
  5. package/dist/identity/user-avatar-path-added.integration-event.d.ts +11 -10
  6. package/dist/identity/user-avatar-path-changed.integration-event.d.ts +11 -10
  7. package/dist/identity/user-avatar-path-removed.integration-event.d.ts +10 -9
  8. package/dist/identity/user-created.integration-event.d.ts +16 -0
  9. package/dist/identity/user-created.integration-event.js +3 -0
  10. package/dist/identity/user-created.integration-event.js.map +1 -0
  11. package/dist/identity/user-deleted.integration-event.d.ts +10 -9
  12. package/dist/identity/user-email-added.integration-event.d.ts +11 -10
  13. package/dist/identity/user-email-change-issued.integration-event.d.ts +11 -10
  14. package/dist/identity/user-email-change-revoked.integration-event.d.ts +10 -9
  15. package/dist/identity/user-email-changed.integration-event.d.ts +11 -10
  16. package/dist/identity/user-email-removed.integration-event.d.ts +10 -9
  17. package/dist/identity/user-name-changed.integration-event.d.ts +11 -10
  18. package/dist/identity/user-phone-number-added.integration-event.d.ts +11 -10
  19. package/dist/identity/user-phone-number-change-issued.integration-event.d.ts +11 -10
  20. package/dist/identity/user-phone-number-change-revoked.integration-event.d.ts +10 -9
  21. package/dist/identity/user-phone-number-changed.integration-event.d.ts +11 -10
  22. package/dist/identity/user-phone-number-removed.integration-event.d.ts +10 -9
  23. package/dist/identity/user-registered-local.integration-event.d.ts +12 -11
  24. package/dist/identity/user-username-changed.integration-event.d.ts +11 -10
  25. package/dist/index.d.ts +3 -11
  26. package/dist/integration-event.d.ts +67 -0
  27. package/dist/{integration-event.interface.js → integration-event.js} +1 -1
  28. package/dist/integration-event.js.map +1 -0
  29. package/package.json +1 -1
  30. package/dist/integration-event.interface.d.ts +0 -10
  31. package/dist/integration-event.interface.js.map +0 -1
package/README.md CHANGED
@@ -16,21 +16,24 @@ This package provides TypeScript interfaces for integration events used across V
16
16
 
17
17
  ```typescript
18
18
  import {
19
- UserRegisteredLocalIntegrationEvent,
20
- UserEmailAddedIntegrationEvent,
21
- UserPhoneNumberAddedIntegrationEvent
19
+ UserCreatedIntegrationEvent,
20
+ UserEmailChangedIntegrationEvent,
21
+ UserPhoneNumberChangedIntegrationEvent
22
22
  } from '@velony/contracts';
23
23
 
24
- // Example: Handle a user registered event
25
- const event: UserRegisteredLocalIntegrationEvent = {
24
+ // Example: Handle a user created event
25
+ const event: UserCreatedIntegrationEvent = {
26
26
  id: 'evt-123',
27
- type: 'user.registered-local',
27
+ type: 'user.created',
28
28
  version: '1.0.0',
29
29
  occurredAt: new Date(),
30
30
  payload: {
31
31
  userId: 'user-123',
32
32
  name: 'John Doe',
33
- username: 'johndoe'
33
+ username: 'johndoe',
34
+ avatarPath: 'https://example.com/avatar.jpg',
35
+ email: 'john.doe@example.com',
36
+ phoneNumber: '+1234567890'
34
37
  },
35
38
  partitionKey: 'user-123',
36
39
  createdAt: new Date(),
@@ -42,19 +45,15 @@ const event: UserRegisteredLocalIntegrationEvent = {
42
45
 
43
46
  ### Identity Domain
44
47
 
48
+ - `UserAvatarChangedIntegrationEvent` - Fired when a user's avatar is changed
45
49
  - `UserCreatedIntegrationEvent` - Fired when a new user is created
46
50
  - `UserDeletedIntegrationEvent` - Fired when a user is deleted
47
- - `UserNameUpdatedIntegrationEvent` - Fired when a user's name is updated
48
- - `UserUsernameUpdatedIntegrationEvent` - Fired when a user's username is updated
49
- - `UserEmailAddedIntegrationEvent` - Fired when an email is added to a user
51
+ - `UserEmailChangedIntegrationEvent` - Fired when a user's email is changed
50
52
  - `UserEmailRemovedIntegrationEvent` - Fired when an email is removed from a user
51
- - `UserEmailUpdatedIntegrationEvent` - Fired when a user's email is updated
52
- - `UserPhoneAddedIntegrationEvent` - Fired when a phone number is added to a user
53
- - `UserPhoneRemovedIntegrationEvent` - Fired when a phone number is removed from a user
54
- - `UserPhoneUpdatedIntegrationEvent` - Fired when a user's phone number is updated
55
- - `UserAvatarPathAddedIntegrationEvent` - Fired when an avatar path is added to a user
56
- - `UserAvatarPathRemovedIntegrationEvent` - Fired when an avatar path is removed from a user
57
- - `UserAvatarPathUpdatedIntegrationEvent` - Fired when a user's avatar path is updated
53
+ - `UserNameChangedIntegrationEvent` - Fired when a user's name is changed
54
+ - `UserPhoneNumberChangedIntegrationEvent` - Fired when a user's phone number is changed
55
+ - `UserPhoneNumberRemovedIntegrationEvent` - Fired when a phone number is removed from a user
56
+ - `UserUsernameChangedIntegrationEvent` - Fired when a user's username is changed
58
57
 
59
58
  ## License
60
59
 
@@ -0,0 +1,12 @@
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.avatar.changed': {
5
+ payload: {
6
+ userId: string;
7
+ avatarPath: string | null;
8
+ };
9
+ };
10
+ }
11
+ }
12
+ export type UserAvatarChangedIntegrationEvent = IntegrationEvent<'user.avatar.changed'>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=user-avatar-changed.integration-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-avatar-changed.integration-event.js","sourceRoot":"","sources":["../../src/identity/user-avatar-changed.integration-event.ts"],"names":[],"mappings":""}
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.avatar-path.added';
3
- interface Payload {
4
- userId: string;
5
- avatarPath: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.avatar-path.added': {
5
+ payload: {
6
+ userId: string;
7
+ avatarPath: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserAvatarPathAddedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserAvatarPathAddedIntegrationEvent = IntegrationEvent<'user.avatar-path.added'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.avatar-path.changed';
3
- interface Payload {
4
- userId: string;
5
- avatarPath: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.avatar-path.changed': {
5
+ payload: {
6
+ userId: string;
7
+ avatarPath: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserAvatarPathChangedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserAvatarPathChangedIntegrationEvent = IntegrationEvent<'user.avatar-path.changed'>;
@@ -1,10 +1,11 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.avatar-path.removed';
3
- interface Payload {
4
- userId: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.avatar-path.removed': {
5
+ payload: {
6
+ userId: string;
7
+ };
8
+ };
9
+ }
5
10
  }
6
- export interface UserAvatarPathRemovedIntegrationEvent extends IntegrationEvent<Type, Payload> {
7
- type: Type;
8
- payload: Payload;
9
- }
10
- export {};
11
+ export type UserAvatarPathRemovedIntegrationEvent = IntegrationEvent<'user.avatar-path.removed'>;
@@ -0,0 +1,16 @@
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.created': {
5
+ payload: {
6
+ userId: string;
7
+ name: string;
8
+ username: string;
9
+ avatarPath?: string;
10
+ email?: string;
11
+ phoneNumber?: string;
12
+ };
13
+ };
14
+ }
15
+ }
16
+ export type UserCreatedIntegrationEvent = IntegrationEvent<'user.created'>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=user-created.integration-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-created.integration-event.js","sourceRoot":"","sources":["../../src/identity/user-created.integration-event.ts"],"names":[],"mappings":""}
@@ -1,10 +1,11 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.deleted';
3
- interface Payload {
4
- userId: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.deleted': {
5
+ payload: {
6
+ userId: string;
7
+ };
8
+ };
9
+ }
5
10
  }
6
- export interface UserDeletedIntegrationEvent extends IntegrationEvent<Type, Payload> {
7
- type: Type;
8
- payload: Payload;
9
- }
10
- export {};
11
+ export type UserDeletedIntegrationEvent = IntegrationEvent<'user.deleted'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.email.added';
3
- interface Payload {
4
- userId: string;
5
- email: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.email.added': {
5
+ payload: {
6
+ userId: string;
7
+ email: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserEmailAddedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserEmailAddedIntegrationEvent = IntegrationEvent<'user.email.added'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.email-change.issued';
3
- interface Payload {
4
- userId: string;
5
- email: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.email-change.issued': {
5
+ payload: {
6
+ userId: string;
7
+ email: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserEmailChangeIssuedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserEmailChangeIssuedIntegrationEvent = IntegrationEvent<'user.email-change.issued'>;
@@ -1,10 +1,11 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.email-change.revoked';
3
- interface Payload {
4
- userId: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.email-change.revoked': {
5
+ payload: {
6
+ userId: string;
7
+ };
8
+ };
9
+ }
5
10
  }
6
- export interface UserEmailChangeRevokedIntegrationEvent extends IntegrationEvent<Type, Payload> {
7
- type: Type;
8
- payload: Payload;
9
- }
10
- export {};
11
+ export type UserEmailChangeRevokedIntegrationEvent = IntegrationEvent<'user.email-change.revoked'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.email.changed';
3
- interface Payload {
4
- userId: string;
5
- email: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.email.changed': {
5
+ payload: {
6
+ userId: string;
7
+ email: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserEmailChangedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserEmailChangedIntegrationEvent = IntegrationEvent<'user.email.changed'>;
@@ -1,10 +1,11 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.email.removed';
3
- interface Payload {
4
- userId: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.email.removed': {
5
+ payload: {
6
+ userId: string;
7
+ };
8
+ };
9
+ }
5
10
  }
6
- export interface UserEmailRemovedIntegrationEvent extends IntegrationEvent<Type, Payload> {
7
- type: Type;
8
- payload: Payload;
9
- }
10
- export {};
11
+ export type UserEmailRemovedIntegrationEvent = IntegrationEvent<'user.email.removed'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.name.changed';
3
- interface Payload {
4
- userId: string;
5
- name: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.name.changed': {
5
+ payload: {
6
+ userId: string;
7
+ name: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserNameChangedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserNameChangedIntegrationEvent = IntegrationEvent<'user.name.changed'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.phone-number.added';
3
- interface Payload {
4
- userId: string;
5
- phoneNumber: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.phone-number.added': {
5
+ payload: {
6
+ userId: string;
7
+ phoneNumber: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserPhoneNumberAddedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserPhoneNumberAddedIntegrationEvent = IntegrationEvent<'user.phone-number.added'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.phone-number-change.issued';
3
- interface Payload {
4
- userId: string;
5
- phoneNumber: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.phone-number-change.issued': {
5
+ payload: {
6
+ userId: string;
7
+ phoneNumber: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserPhoneNumberChangeIssuedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserPhoneNumberChangeIssuedIntegrationEvent = IntegrationEvent<'user.phone-number-change.issued'>;
@@ -1,10 +1,11 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.phone-number-change.revoked';
3
- interface Payload {
4
- userId: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.phone-number-change.revoked': {
5
+ payload: {
6
+ userId: string;
7
+ };
8
+ };
9
+ }
5
10
  }
6
- export interface UserPhoneNumberChangeRevokedIntegrationEvent extends IntegrationEvent<Type, Payload> {
7
- type: Type;
8
- payload: Payload;
9
- }
10
- export {};
11
+ export type UserPhoneNumberChangeRevokedIntegrationEvent = IntegrationEvent<'user.phone-number-change.revoked'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.phone-number.changed';
3
- interface Payload {
4
- userId: string;
5
- phoneNumber: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.phone-number.changed': {
5
+ payload: {
6
+ userId: string;
7
+ phoneNumber: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserPhoneNumberChangedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserPhoneNumberChangedIntegrationEvent = IntegrationEvent<'user.phone-number.changed'>;
@@ -1,10 +1,11 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.phone-number.removed';
3
- interface Payload {
4
- userId: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.phone-number.removed': {
5
+ payload: {
6
+ userId: string;
7
+ };
8
+ };
9
+ }
5
10
  }
6
- export interface UserPhoneNumberRemovedIntegrationEvent extends IntegrationEvent<Type, Payload> {
7
- type: Type;
8
- payload: Payload;
9
- }
10
- export {};
11
+ export type UserPhoneNumberRemovedIntegrationEvent = IntegrationEvent<'user.phone-number.removed'>;
@@ -1,12 +1,13 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.registered-local';
3
- interface Payload {
4
- userId: string;
5
- name: string;
6
- username: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.registered-local': {
5
+ payload: {
6
+ userId: string;
7
+ name: string;
8
+ username: string;
9
+ };
10
+ };
11
+ }
7
12
  }
8
- export interface UserRegisteredLocalIntegrationEvent extends IntegrationEvent<Type, Payload> {
9
- type: Type;
10
- payload: Payload;
11
- }
12
- export {};
13
+ export type UserRegisteredLocalIntegrationEvent = IntegrationEvent<'user.registered-local'>;
@@ -1,11 +1,12 @@
1
- import { IntegrationEvent } from '../integration-event.interface';
2
- type Type = 'user.username.changed';
3
- interface Payload {
4
- userId: string;
5
- username: string;
1
+ import { IntegrationEvent } from '../integration-event';
2
+ declare module '../integration-event' {
3
+ interface IntegrationEventRegistry {
4
+ 'user.username.changed': {
5
+ payload: {
6
+ userId: string;
7
+ username: string;
8
+ };
9
+ };
10
+ }
6
11
  }
7
- export interface UserUsernameChangedIntegrationEvent extends IntegrationEvent<Type, Payload> {
8
- type: Type;
9
- payload: Payload;
10
- }
11
- export {};
12
+ export type UserUsernameChangedIntegrationEvent = IntegrationEvent<'user.username.changed'>;
package/dist/index.d.ts CHANGED
@@ -1,18 +1,10 @@
1
- export type { IntegrationEvent } from './integration-event.interface';
2
- export type { UserAvatarPathAddedIntegrationEvent } from './identity/user-avatar-path-added.integration-event';
3
- export type { UserAvatarPathChangedIntegrationEvent } from './identity/user-avatar-path-changed.integration-event';
4
- export type { UserAvatarPathRemovedIntegrationEvent } from './identity/user-avatar-path-removed.integration-event';
1
+ export type { IntegrationEvent, AnyIntegrationEvent, IntegrationEventRegistry, } from './integration-event';
2
+ export type { UserAvatarChangedIntegrationEvent } from './identity/user-avatar-changed.integration-event';
3
+ export type { UserCreatedIntegrationEvent } from './identity/user-created.integration-event';
5
4
  export type { UserDeletedIntegrationEvent } from './identity/user-deleted.integration-event';
6
- export type { UserEmailAddedIntegrationEvent } from './identity/user-email-added.integration-event';
7
- export type { UserEmailChangeIssuedIntegrationEvent } from './identity/user-email-change-issued.integration-event';
8
- export type { UserEmailChangeRevokedIntegrationEvent } from './identity/user-email-change-revoked.integration-event';
9
5
  export type { UserEmailChangedIntegrationEvent } from './identity/user-email-changed.integration-event';
10
6
  export type { UserEmailRemovedIntegrationEvent } from './identity/user-email-removed.integration-event';
11
7
  export type { UserNameChangedIntegrationEvent } from './identity/user-name-changed.integration-event';
12
- export type { UserPhoneNumberAddedIntegrationEvent } from './identity/user-phone-number-added.integration-event';
13
- export type { UserPhoneNumberChangeIssuedIntegrationEvent } from './identity/user-phone-number-change-issued.integration-event';
14
- export type { UserPhoneNumberChangeRevokedIntegrationEvent } from './identity/user-phone-number-change-revoked.integration-event';
15
8
  export type { UserPhoneNumberChangedIntegrationEvent } from './identity/user-phone-number-changed.integration-event';
16
9
  export type { UserPhoneNumberRemovedIntegrationEvent } from './identity/user-phone-number-removed.integration-event';
17
- export type { UserRegisteredLocalIntegrationEvent } from './identity/user-registered-local.integration-event';
18
10
  export type { UserUsernameChangedIntegrationEvent } from './identity/user-username-changed.integration-event';
@@ -0,0 +1,67 @@
1
+ declare const INTEGRATION_EVENT_BRAND: unique symbol;
2
+ /**
3
+ * Registry that maps integration event types to their payload types.
4
+ * Extend this interface to register new integration event types.
5
+ */
6
+ export interface IntegrationEventRegistry {
7
+ [key: string]: {
8
+ payload: unknown;
9
+ };
10
+ }
11
+ /**
12
+ * Integration event represents a significant business event that has occurred
13
+ * and needs to be communicated to external systems or bounded contexts.
14
+ * Unlike domain events which are internal, integration events cross bounded context boundaries.
15
+ *
16
+ * @template TType - The type identifier for the event (must be registered in IntegrationEventRegistry)
17
+ */
18
+ export type IntegrationEvent<TType extends keyof IntegrationEventRegistry> = {
19
+ readonly [INTEGRATION_EVENT_BRAND]: void;
20
+ /**
21
+ * Unique identifier for this event instance.
22
+ * @readonly
23
+ */
24
+ readonly id: string;
25
+ /**
26
+ * Type identifier for the event.
27
+ * @readonly
28
+ */
29
+ readonly type: TType;
30
+ /**
31
+ * Version of the event schema for backward compatibility.
32
+ * @readonly
33
+ */
34
+ readonly version: string;
35
+ /**
36
+ * The timestamp when the original domain event occurred.
37
+ * @readonly
38
+ */
39
+ readonly occurredAt: Date;
40
+ /**
41
+ * The data payload specific to this event.
42
+ * @readonly
43
+ */
44
+ readonly payload: IntegrationEventRegistry[TType]['payload'];
45
+ /**
46
+ * Key used for partitioning in message brokers for ordering guarantees.
47
+ * @readonly
48
+ */
49
+ readonly partitionKey: string;
50
+ /**
51
+ * The timestamp when this integration event was created.
52
+ * @readonly
53
+ */
54
+ readonly createdAt: Date;
55
+ /**
56
+ * The timestamp when this event was published to the message broker.
57
+ * Null if not yet published.
58
+ * @readonly
59
+ */
60
+ readonly publishedAt: Date | null;
61
+ };
62
+ /**
63
+ * Union type representing any integration event registered in the IntegrationEventRegistry.
64
+ * Useful for type-safe collections and handlers that work with multiple integration event types.
65
+ */
66
+ export type AnyIntegrationEvent = IntegrationEvent<keyof IntegrationEventRegistry>;
67
+ export {};
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=integration-event.interface.js.map
3
+ //# sourceMappingURL=integration-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-event.js","sourceRoot":"","sources":["../src/integration-event.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velony/contracts",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "TypeScript contracts library providing integration event interfaces for event-driven architecture",
5
5
  "keywords": [
6
6
  "contracts",
@@ -1,10 +0,0 @@
1
- export interface IntegrationEvent<TType extends string, TPayload> {
2
- id: string;
3
- type: TType;
4
- version: string;
5
- occurredAt: Date;
6
- payload: TPayload;
7
- partitionKey: string;
8
- createdAt: Date;
9
- publishedAt: Date | null;
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration-event.interface.js","sourceRoot":"","sources":["../src/integration-event.interface.ts"],"names":[],"mappings":""}