diff --git a/apps/shared/src/events/events.spec.ts b/apps/shared/src/events/events.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf3df5cbaa8ca2c5c939d3fdc45f7e62a0b40b3d
--- /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 0000000000000000000000000000000000000000..5b79978bdecf17cb8617212ea6384bc57d238812
--- /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 a527485484ea923944f3420287a6ce60d41ff47c..53e4cb004b239fe3dd92d20c6d9f0cfccf213533 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';
diff --git a/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts b/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts
index f516874f7f301baadde5b3b270bc3c1ef715936a..91d7dc8ba83e434886745bb04fc3b33c2a3e8d7e 100644
--- a/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts
+++ b/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts
@@ -29,7 +29,9 @@ describe('ConnectionsController', () => {
         .spyOn(connectionsService, 'getAll')
         .mockImplementation(() => Promise.resolve(result));
 
-      expect(await connectionsController.getAll()).toBe(result);
+      const connectionsEvent = await connectionsController.getAll();
+
+      expect(connectionsEvent.data).toStrictEqual({ connections: result });
     });
   });
 });
diff --git a/apps/ssi-abstraction/src/agent/connections/connections.controller.ts b/apps/ssi-abstraction/src/agent/connections/connections.controller.ts
index c2aa9734a7a6c2cbd27491c7e898d09461b3b085..f9637e38d1b750477dd8ff5f984904bb490323c8 100644
--- a/apps/ssi-abstraction/src/agent/connections/connections.controller.ts
+++ b/apps/ssi-abstraction/src/agent/connections/connections.controller.ts
@@ -1,5 +1,6 @@
 import { Controller } from '@nestjs/common';
 import { MessagePattern } from '@nestjs/microservices';
+import { EventDidcommConnectionsGetAll } from '@ocm/shared';
 
 import { ConnectionsService } from './connections.service.js';
 
@@ -8,7 +9,9 @@ export class ConnectionsController {
   public constructor(private connectionsService: ConnectionsService) {}
 
   @MessagePattern('didcomm.connections.getAll')
-  public async getAll() {
-    return await this.connectionsService.getAll();
+  public async getAll(): Promise<EventDidcommConnectionsGetAll> {
+    return new EventDidcommConnectionsGetAll({
+      connections: await this.connectionsService.getAll(),
+    });
   }
 }
diff --git a/apps/ssi-abstraction/test/connections.e2e-spec.ts b/apps/ssi-abstraction/test/connections.e2e-spec.ts
index d7490626e4b7660c3a8284ed792b05eb4476859e..75e7762bb220510f3f7fc6522b8ffeac46000af4 100644
--- a/apps/ssi-abstraction/test/connections.e2e-spec.ts
+++ b/apps/ssi-abstraction/test/connections.e2e-spec.ts
@@ -1,5 +1,6 @@
 import type { INestApplication } from '@nestjs/common';
 import type { ClientProxy } from '@nestjs/microservices';
+import type { EventDidcommConnectionsGetAll } from '@ocm/shared';
 
 import { ClientsModule, Transport } from '@nestjs/microservices';
 import { Test } from '@nestjs/testing';
@@ -36,12 +37,12 @@ describe('Connections', () => {
   });
 
   it('didcomm.connections.getAll', async () => {
-    const response$: Observable<unknown> = client.send(
+    const response$: Observable<EventDidcommConnectionsGetAll> = client.send(
       'didcomm.connections.getAll',
       {},
     );
     const response = await firstValueFrom(response$);
-    expect(response).toMatchObject([]);
+    expect(response.data).toMatchObject({ connections: [] });
   });
 
   afterAll(async () => {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c3d69660c77ee1c4e204f882876f8772b6e2ed06..24b76e3ad02cbd45af226803c1dd236fadf87d52 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -36,8 +36,8 @@ importers:
         specifier: ^5.0.1
         version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.54.0)(prettier@3.1.0)
       eslint-plugin-workspaces:
-        specifier: ^0.9.0
-        version: 0.9.0
+        specifier: ^0.10.0
+        version: 0.10.0
       husky:
         specifier: ^8.0.0
         version: 8.0.3
@@ -7869,10 +7869,10 @@ packages:
       synckit: 0.8.5
     dev: true
 
-  /eslint-plugin-workspaces@0.9.0:
-    resolution: {integrity: sha512-krMuZ+yZgzwv1oTBfz50oamNVPDIm7CDyot3i1GRKBqMD2oXAwnXHLQWH7ctpV8k6YVrkhcaZhuV9IJxD8OPAQ==}
+  /eslint-plugin-workspaces@0.10.0:
+    resolution: {integrity: sha512-H692yRZFczzzyde0Sq3nmRDlyywv6foYJnmsxO3slWImJdCf4g5D+gzdWeRpmfitgUsFZxXVJdvW4OS6yY4M9g==}
     dependencies:
-      find-workspaces: 0.2.0
+      find-workspaces: 0.3.0
     dev: true
 
   /eslint-scope@5.1.1:
@@ -8608,8 +8608,8 @@ packages:
       semver-regex: 4.0.5
     dev: true
 
-  /find-workspaces@0.2.0:
-    resolution: {integrity: sha512-OTHryv88yjzwvbXHGi0+XRFu7Jqe5pFuIR2mhqdatDJQOBJd7MFJOPFJv4EbNo8n1BNM/13Y2KcyDpFQYf0ETw==}
+  /find-workspaces@0.3.0:
+    resolution: {integrity: sha512-sHdt3vbddcDuN0CYnKoG/b77jrOkSYPlxoM7ve7/vEvAd29XC7u/qE2zavRzJv4eD1sbTvDnRNZskdy/e0v83A==}
     dependencies:
       fast-glob: 3.3.2
       pkg-types: 1.0.3