From 723712bbcca8ad78ecbc889e95a2cec2a265a9d9 Mon Sep 17 00:00:00 2001
From: Berend Sliedrecht <berend@animo.id>
Date: Mon, 27 Nov 2023 13:23:16 +0100
Subject: [PATCH] feat(shared): base event setup

Signed-off-by: Berend Sliedrecht <berend@animo.id>
---
 apps/shared/src/events/events.spec.ts | 29 +++++++++++++++++++++++++++
 apps/shared/src/events/events.ts      | 21 +++++++++++++++++++
 apps/shared/src/index.ts              |  2 ++
 3 files changed, 52 insertions(+)
 create mode 100644 apps/shared/src/events/events.spec.ts
 create mode 100644 apps/shared/src/events/events.ts

diff --git a/apps/shared/src/events/events.spec.ts b/apps/shared/src/events/events.spec.ts
new file mode 100644
index 0000000..cf3df5c
--- /dev/null
+++ b/apps/shared/src/events/events.spec.ts
@@ -0,0 +1,29 @@
+import { BaseEvent, EventDidcommConnectionsGetAll } from './events.js';
+
+describe('check logger', () => {
+  it('should return module', () => {
+    jest.requireActual('./events');
+  });
+
+  it('should create a new base event', () => {
+    const baseEvent = new BaseEvent({ some: 'data' });
+
+    expect(typeof baseEvent.id).toStrictEqual('string');
+    expect(baseEvent.type).toStrictEqual('BaseEvent');
+    expect(baseEvent.timestamp).toBeInstanceOf(Date);
+    expect(baseEvent.data).toMatchObject({ some: 'data' });
+  });
+
+  it('should create a new connections get all event', () => {
+    const getAllConnectionsEvent = new EventDidcommConnectionsGetAll({
+      connections: [],
+    });
+
+    expect(typeof getAllConnectionsEvent.id).toStrictEqual('string');
+    expect(getAllConnectionsEvent.type).toStrictEqual(
+      'EventDidcommConnectionsGetAll',
+    );
+    expect(getAllConnectionsEvent.timestamp).toBeInstanceOf(Date);
+    expect(getAllConnectionsEvent.data).toMatchObject({ connections: [] });
+  });
+});
diff --git a/apps/shared/src/events/events.ts b/apps/shared/src/events/events.ts
new file mode 100644
index 0000000..5b79978
--- /dev/null
+++ b/apps/shared/src/events/events.ts
@@ -0,0 +1,21 @@
+import { utils, type ConnectionRecord } from '@aries-framework/core';
+
+export class BaseEvent<
+  T extends Record<string, unknown> = Record<string, unknown>,
+> {
+  public id: string;
+  public type: string;
+  public timestamp: Date;
+  public data: T;
+
+  public constructor(data: T) {
+    this.id = utils.uuid();
+    this.type = this.constructor.name;
+    this.timestamp = new Date();
+    this.data = data;
+  }
+}
+
+export class EventDidcommConnectionsGetAll extends BaseEvent<{
+  connections: Array<ConnectionRecord>;
+}> {}
diff --git a/apps/shared/src/index.ts b/apps/shared/src/index.ts
index a527485..53e4cb0 100644
--- a/apps/shared/src/index.ts
+++ b/apps/shared/src/index.ts
@@ -3,3 +3,5 @@ export * from './health/health.controller.js';
 
 export * from './logging/logger.js';
 export * from './logging/logAxiosError.js';
+
+export * from './events/events.js';
-- 
GitLab