diff --git a/.eslintrc.js b/.eslintrc.js
index 3f10bbf4f71497a8fc8c172c2cd08608abb67fe0..f37a53160b3ab18fa81eb10f83adf14480649437 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -28,7 +28,10 @@ module.exports = {
   rules: {
     '@typescript-eslint/explicit-function-return-type': 'off',
     '@typescript-eslint/explicit-module-boundary-types': 'off',
-    '@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: false, variables: true }],
+    '@typescript-eslint/no-use-before-define': [
+      'error',
+      { functions: false, classes: false, variables: true },
+    ],
     '@typescript-eslint/explicit-member-accessibility': 'error',
     'no-console': 'error',
     '@typescript-eslint/ban-ts-comment': 'warn',
@@ -72,14 +75,10 @@ module.exports = {
   },
   overrides: [
     {
-      files: [
-        '*.spec.ts',
-        '*.e2e-spec.ts',
-        '**/tests/**',
-      ],
+      files: ['*.spec.ts', '*.e2e-spec.ts', '**/tests/**'],
       env: {
         jest: true,
-        node: false,
+        node: true,
       },
       rules: {
         'import/no-extraneous-dependencies': [
@@ -89,6 +88,6 @@ module.exports = {
           },
         ],
       },
-    }
-  ]
-}
+    },
+  ],
+};
diff --git a/apps/attestation-manager/package.json b/apps/attestation-manager/package.json
index 8def5be944205a00e2a0b4199c07d474e96e79b4..956f2f5355e32c852849210a067585f5f98a7a84 100644
--- a/apps/attestation-manager/package.json
+++ b/apps/attestation-manager/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "attestation-manager",
+  "name": "@ocm/attestation-manager",
   "version": "0.0.1",
   "description": "",
   "author": "Shirdhar",
diff --git a/apps/attestation-manager/tsconfig.json b/apps/attestation-manager/tsconfig.json
index 6f83eb665f830a10825b9d9b06931a87a6aad2d2..4082f16a5d91ce6f21a9092b14170eeecc8f1d75 100644
--- a/apps/attestation-manager/tsconfig.json
+++ b/apps/attestation-manager/tsconfig.json
@@ -1,3 +1,3 @@
 {
-  "extends": "../../tsconfig.json",
+  "extends": "../../tsconfig.json"
 }
diff --git a/apps/connection-manager/package.json b/apps/connection-manager/package.json
index ebe600cf1527f1a9ce0892961558ce40d759d2ca..4eacd371fba4edd43d202d09e1d05dcfe9f1f195 100644
--- a/apps/connection-manager/package.json
+++ b/apps/connection-manager/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "connection-manager",
+  "name": "@ocm/connection-manager",
   "version": "0.0.1",
   "description": "",
   "author": "Sagar",
diff --git a/apps/proof-manager/package.json b/apps/proof-manager/package.json
index 6752fc6fcd384dd2129df205f7a55cbf1e59aef2..7faebbabda7301ba01421660de129adad07594ac 100644
--- a/apps/proof-manager/package.json
+++ b/apps/proof-manager/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "proof-manager",
+  "name": "@ocm/proof-manager",
   "version": "0.0.1",
   "description": "The Proof Manager provides an endpoint to request a presentation over an existing connection",
   "author": "Sagar",
diff --git a/apps/shared/.swcrc b/apps/shared/.swcrc
new file mode 100644
index 0000000000000000000000000000000000000000..f0831e454c02bece75b8b8b60ac59891a48fe7f2
--- /dev/null
+++ b/apps/shared/.swcrc
@@ -0,0 +1,20 @@
+{
+  "jsc": {
+    "preserveAllComments": true,
+    "parser": {
+      "syntax": "typescript",
+      "tsx": false,
+      "decorators": true
+    },
+    "transform": {
+      "legacyDecorator": true,
+      "decoratorMetadata": true
+    },
+    "target": "es2022"
+  },
+  "module": {
+    "type": "es6"
+  },
+  "sourceMaps": true,
+  "exclude": [".spec.ts", ".e2e-spec.ts"]
+}
diff --git a/apps/shared/jest.config.js b/apps/shared/jest.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b2ee91fa88cada4d31ad3c2528291214de4aebe
--- /dev/null
+++ b/apps/shared/jest.config.js
@@ -0,0 +1,50 @@
+/** @type {import('jest').Config} */
+
+import { readFileSync } from 'node:fs';
+
+const swcConfig = JSON.parse(readFileSync('./.swcrc', 'utf8'));
+
+export default {
+  moduleFileExtensions: ['js', 'ts'],
+  testEnvironment: 'node',
+  transform: {
+    '^.+\\.ts$': [
+      '@swc/jest',
+      {
+        ...swcConfig,
+        sourceMaps: false,
+        exclude: [],
+        swcrc: false,
+      },
+    ],
+  },
+  extensionsToTreatAsEsm: ['.ts'],
+  moduleNameMapper: {
+    // ESM modules require `.js` extension to be specified, but Jest doesn't work with them
+    // Removing `.js` extension from module imports
+    '^uuid$': 'uuid',
+    '^(.*)/(.*)\\.js$': '$1/$2',
+  },
+  collectCoverageFrom: ['src/**/*.(t|j)s'],
+  coverageReporters:
+    process.env.CI === 'true'
+      ? ['text-summary', 'json-summary']
+      : ['text-summary', 'html'],
+  coveragePathIgnorePatterns: [
+    '<rootDir>/node_modules/',
+    '<rootDir>/test/',
+    '<rootDir>/coverage/',
+    '<rootDir>/dist/',
+    '<rootDir>/**/test',
+    '@types',
+    '.dto.(t|j)s',
+    '.enum.ts',
+    '.interface.ts',
+    '.type.ts',
+    '.spec.ts',
+  ],
+  coverageDirectory: './coverage',
+  // With v8 coverage provider it's much faster, but
+  // with this enabled it's not possible to ignore whole files' coverage
+  coverageProvider: 'v8',
+};
diff --git a/apps/shared/nest-cli.json b/apps/shared/nest-cli.json
new file mode 100644
index 0000000000000000000000000000000000000000..0a947a58e97e43e99b3e3464b02179459ac759c7
--- /dev/null
+++ b/apps/shared/nest-cli.json
@@ -0,0 +1,8 @@
+{
+  "collection": "@nestjs/schematics",
+  "sourceRoot": "src",
+  "compilerOptions": {
+    "builder": "swc",
+    "typeCheck": true
+  }
+}
diff --git a/apps/shared/package.json b/apps/shared/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7e03331c11ce5bf77b37e18714e45cba6161174c
--- /dev/null
+++ b/apps/shared/package.json
@@ -0,0 +1,46 @@
+{
+  "name": "@ocm/shared",
+  "version": "0.0.1",
+  "description": "Shared functionality that can be reused between the services",
+  "author": "Spherity",
+  "private": true,
+  "type": "module",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "scripts": {
+    "clean": "rimraf dist *.tsbuildinfo",
+    "prebuild": "rimraf dist",
+    "build": "nest build",
+    "build:production": "nest build -p tsconfig.production.json",
+    "start": "nest start",
+    "start:dev": "nest start --watch --preserveWatchOutput",
+    "test": "jest",
+    "test:watch": "jest --watch",
+    "test:cov": "jest --coverage",
+    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
+    "test:e2e": "jest --config ./test/jest.config.js"
+  },
+  "dependencies": {
+    "@aries-framework/core": "0.4.2",
+    "@elastic/ecs-winston-format": "^1.5.0",
+    "@nestjs/common": "^10.2.10",
+    "@nestjs/microservices": "^10.2.10",
+    "axios": "^1.6.2",
+    "joi": "^17.6.0",
+    "nats": "^2.18.0",
+    "rxjs": "^7.2.0",
+    "winston": "^3.11.0"
+  },
+  "devDependencies": {
+    "@types/jest": "^29.5.9",
+    "@types/node": "^20.9.3",
+    "@nestjs/cli": "^10.2.1",
+    "@nestjs/testing": "^10.2.10",
+    "rimraf": "^5.0.5",
+    "supertest": "^6.1.3",
+    "ts-jest": "^29.1.1",
+    "ts-node": "^10.0.0",
+    "tsconfig-paths": "^4.2.0",
+    "typescript": "~5.3.2"
+  }
+}
diff --git a/apps/ssi-abstraction/src/globalUtils/exception.handler.ts b/apps/shared/src/exceptions/rpcExceptionHandler.ts
similarity index 99%
rename from apps/ssi-abstraction/src/globalUtils/exception.handler.ts
rename to apps/shared/src/exceptions/rpcExceptionHandler.ts
index 593237dfbb996f579bfc0c1b6d88a4ca31dbe8af..b381da2db7fe906c44073faccb9b72393d34a9a8 100644
--- a/apps/ssi-abstraction/src/globalUtils/exception.handler.ts
+++ b/apps/shared/src/exceptions/rpcExceptionHandler.ts
@@ -4,7 +4,6 @@ import type { RpcException } from '@nestjs/microservices';
 import { Catch } from '@nestjs/common';
 import { throwError } from 'rxjs';
 
-
 @Catch()
 export class ExceptionHandler implements RpcExceptionFilter<RpcException> {
   public catch(exception: RpcException) {
diff --git a/apps/ssi-abstraction/src/health/health.controller.ts b/apps/shared/src/health/health.controller.ts
similarity index 100%
rename from apps/ssi-abstraction/src/health/health.controller.ts
rename to apps/shared/src/health/health.controller.ts
diff --git a/apps/shared/src/index.ts b/apps/shared/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a527485484ea923944f3420287a6ce60d41ff47c
--- /dev/null
+++ b/apps/shared/src/index.ts
@@ -0,0 +1,5 @@
+export * from './exceptions/rpcExceptionHandler.js';
+export * from './health/health.controller.js';
+
+export * from './logging/logger.js';
+export * from './logging/logAxiosError.js';
diff --git a/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts b/apps/shared/src/logging/logAxiosError.ts
similarity index 91%
rename from apps/ssi-abstraction/src/agent/utils/helperFunctions.ts
rename to apps/shared/src/logging/logAxiosError.ts
index b21a3a6fa9da192487cdb4c9ddf17020555df1bb..8c82389216585d5325145f1f05277f45e64786c3 100644
--- a/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts
+++ b/apps/shared/src/logging/logAxiosError.ts
@@ -1,6 +1,6 @@
 import type { AxiosError } from 'axios';
 
-import { logger } from '../../globalUtils/logger.js';
+import { logger } from './logger.js';
 
 export function logAxiosError(err: AxiosError) {
   if (err.response) {
diff --git a/apps/ssi-abstraction/src/globalUtils/logger.spec.ts b/apps/shared/src/logging/logger.spec.ts
similarity index 64%
rename from apps/ssi-abstraction/src/globalUtils/logger.spec.ts
rename to apps/shared/src/logging/logger.spec.ts
index 3247bad1b74884cb96ccd76ce9728dbe93cca092..e6126f22cf7278b5405739e5e4e52f7ab4d5dccf 100644
--- a/apps/ssi-abstraction/src/globalUtils/logger.spec.ts
+++ b/apps/shared/src/logging/logger.spec.ts
@@ -1,5 +1,5 @@
 describe('check logger', () => {
-  it('should return module', async () => {
+  it('should return module', () => {
     jest.requireActual('./logger');
   });
 });
diff --git a/apps/ssi-abstraction/src/globalUtils/logger.ts b/apps/shared/src/logging/logger.ts
similarity index 91%
rename from apps/ssi-abstraction/src/globalUtils/logger.ts
rename to apps/shared/src/logging/logger.ts
index 73c79a3e80f97ca2342f6df064719b032635ec2f..5244fc717ec0eca096f0666f424c99a90564d22a 100644
--- a/apps/ssi-abstraction/src/globalUtils/logger.ts
+++ b/apps/shared/src/logging/logger.ts
@@ -8,6 +8,9 @@ export const logger: Logger = createLogger({
   transports: [new transports.Console()],
 });
 
+/**
+ * @todo: disable in production
+ */
 logger.on('error', (error: Error) => {
   // eslint-disable-next-line no-console
   console.error('Error in logger caught', error);
diff --git a/apps/shared/tsconfig.build.json b/apps/shared/tsconfig.build.json
new file mode 100644
index 0000000000000000000000000000000000000000..b7dacb2abdea4b9e891f9c09da23f3f788628561
--- /dev/null
+++ b/apps/shared/tsconfig.build.json
@@ -0,0 +1,14 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "removeComments": false,
+    "declaration": true,
+    "sourceMap": true,
+
+    "incremental": true,
+    "baseUrl": ".",
+    "outDir": "./dist",
+    "rootDir": "./src"
+  },
+  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
+}
diff --git a/apps/shared/tsconfig.json b/apps/shared/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..4082f16a5d91ce6f21a9092b14170eeecc8f1d75
--- /dev/null
+++ b/apps/shared/tsconfig.json
@@ -0,0 +1,3 @@
+{
+  "extends": "../../tsconfig.json"
+}
diff --git a/apps/shared/tsconfig.production.json b/apps/shared/tsconfig.production.json
new file mode 100644
index 0000000000000000000000000000000000000000..0f476e0e42f3cedfb4b8d2b22b48d2d1ce28df0f
--- /dev/null
+++ b/apps/shared/tsconfig.production.json
@@ -0,0 +1,14 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "composite": false,
+    "removeComments": true,
+    "declaration": false,
+    "sourceMap": false,
+
+    "baseUrl": ".",
+    "outDir": "./dist",
+    "rootDir": "./src"
+  },
+  "exclude": ["node_modules", "dist", "**/*spec.ts"]
+}
diff --git a/apps/ssi-abstraction/nest-cli.json b/apps/ssi-abstraction/nest-cli.json
index 681ff0f833b6991dee64ef7d0a2c6d6c61caa77a..0a947a58e97e43e99b3e3464b02179459ac759c7 100644
--- a/apps/ssi-abstraction/nest-cli.json
+++ b/apps/ssi-abstraction/nest-cli.json
@@ -3,8 +3,6 @@
   "sourceRoot": "src",
   "compilerOptions": {
     "builder": "swc",
-    "typeCheck": true,
-
-    "assets": ["**/*.prisma"]
+    "typeCheck": true
   }
 }
diff --git a/apps/ssi-abstraction/package.json b/apps/ssi-abstraction/package.json
index 5ec76770c919f0dc9b952ba4e2cbc420c843c78f..3a05f268eb6f1b7e5a683360f82b92cc6bb898ae 100644
--- a/apps/ssi-abstraction/package.json
+++ b/apps/ssi-abstraction/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "ssi-abstraction",
+  "name": "@ocm/ssi-abstraction",
   "version": "0.0.1",
   "description": "A core OCM service that provides the SSI interface through REST endpoints and events.",
   "author": "Vereign",
@@ -36,6 +36,7 @@
     "@nestjs/core": "^10.2.10",
     "@nestjs/microservices": "^10.2.10",
     "@nestjs/terminus": "^10.1.1",
+    "@ocm/shared": "workspace:*",
     "axios": "^1.6.2",
     "express": "^4.17.3",
     "joi": "^17.6.0",
diff --git a/apps/ssi-abstraction/src/agent/agent.service.ts b/apps/ssi-abstraction/src/agent/agent.service.ts
index 6c3855e4dab472b1246aed442accfa2d4fd6feab..7e06a896bf77496b3db9532b23b318afabbe96d9 100644
--- a/apps/ssi-abstraction/src/agent/agent.service.ts
+++ b/apps/ssi-abstraction/src/agent/agent.service.ts
@@ -1,9 +1,6 @@
-import type {
-  LedgerIds} from './utils/ledgerConfig.js';
-import type {
-  InitConfig} from '@aries-framework/core';
-import type {
-  IndyVdrPoolConfig} from '@aries-framework/indy-vdr';
+import type { LedgerIds } from '../config/ledger.js';
+import type { InitConfig } from '@aries-framework/core';
+import type { IndyVdrPoolConfig } from '@aries-framework/indy-vdr';
 
 import { AnonCredsModule } from '@aries-framework/anoncreds';
 import { AnonCredsRsModule } from '@aries-framework/anoncreds-rs';
@@ -34,16 +31,12 @@ import { ariesAskar } from '@hyperledger/aries-askar-nodejs';
 import { indyVdr } from '@hyperledger/indy-vdr-nodejs';
 import { Injectable } from '@nestjs/common';
 import { ConfigService } from '@nestjs/config';
+import { logger } from '@ocm/shared';
 
-import { logger } from '../globalUtils/logger.js';
+import { LEDGERS } from '../config/ledger.js';
 
 import { registerPublicDids } from './ledger/register.js';
-import {
-  ledgerNamespaces,
-  LEDGER_GENESIS,
-} from './utils/ledgerConfig.js';
-import { AgentLogger } from './utils/logger.js';
-
+import { AgentLogger } from './logger.js';
 
 export type AppAgent = Agent<AgentService['modules']>;
 
@@ -134,15 +127,15 @@ export class AgentService {
     return ledgerIds.map((id: LedgerIds) => {
       const ledgerId: LedgerIds = id;
 
-      if (!LEDGER_GENESIS?.[ledgerId]) {
+      if (!LEDGERS[ledgerId]) {
         throw new Error(
           `No pool transaction genesis provided for ledger ${ledgerId}`,
         );
       }
 
       const ledger: IndyVdrPoolConfig = {
-        indyNamespace: ledgerNamespaces[ledgerId],
-        genesisTransactions: LEDGER_GENESIS?.[ledgerId],
+        indyNamespace: LEDGERS[ledgerId].namespace,
+        genesisTransactions: LEDGERS[ledgerId].genesisTransaction,
         isProduction: false,
       };
 
diff --git a/apps/ssi-abstraction/src/agent/ledger/register.ts b/apps/ssi-abstraction/src/agent/ledger/register.ts
index a14c1260df442a4f93808eb91a49167df48acff9..1bff2fb5ad5c22acfda14280cd5190fac871bd4f 100644
--- a/apps/ssi-abstraction/src/agent/ledger/register.ts
+++ b/apps/ssi-abstraction/src/agent/ledger/register.ts
@@ -1,10 +1,9 @@
-import type { LedgerIds } from '../utils/ledgerConfig.js';
+import type { LedgerIds } from '../../config/ledger.js';
 
+import { logger, logAxiosError } from '@ocm/shared';
 import axios from 'axios';
 
-import { logger } from '../../globalUtils/logger.js';
-import { logAxiosError } from '../utils/helperFunctions.js';
-import { ledgerNamespaces, NYM_URL } from '../utils/ledgerConfig.js';
+import { LEDGERS } from '../../config/ledger.js';
 
 type RegisterPublicDidOptions = {
   alias: string;
@@ -32,8 +31,8 @@ export const registerPublicDids = async ({
   const responses: Array<RegisterPublicDidResponse> = [];
   for (const ledgerId of ledgerIds) {
     try {
-      const ledgerRegisterUrl = NYM_URL[ledgerId];
-      const ledgerNamespace = ledgerNamespaces[ledgerId];
+      const ledgerRegisterUrl = LEDGERS[ledgerId].registerNymUrl;
+      const ledgerNamespace = LEDGERS[ledgerId].namespace;
 
       const body: LedgerRegistrationBody = {
         role: 'ENDORSER',
diff --git a/apps/ssi-abstraction/src/agent/utils/logger.ts b/apps/ssi-abstraction/src/agent/logger.ts
similarity index 96%
rename from apps/ssi-abstraction/src/agent/utils/logger.ts
rename to apps/ssi-abstraction/src/agent/logger.ts
index 8fbd7793eddecebd9ba038856c2b708d75302b0a..a3702af530fcec21e0c33c865567301a721c8e13 100644
--- a/apps/ssi-abstraction/src/agent/utils/logger.ts
+++ b/apps/ssi-abstraction/src/agent/logger.ts
@@ -1,6 +1,5 @@
 import { BaseLogger, LogLevel } from '@aries-framework/core';
-
-import { logger } from '../../globalUtils/logger.js';
+import { logger } from '@ocm/shared';
 
 export class AgentLogger extends BaseLogger {
   public test(
diff --git a/apps/ssi-abstraction/src/app.module.ts b/apps/ssi-abstraction/src/app.module.ts
index d7c24842f0a01aa1a45e889e232ed3325a4aaf46..762a4ebabc01787d9729b8a7cd547a39a3b46db3 100644
--- a/apps/ssi-abstraction/src/app.module.ts
+++ b/apps/ssi-abstraction/src/app.module.ts
@@ -1,12 +1,12 @@
 import { Module } from '@nestjs/common';
 import { ConfigModule } from '@nestjs/config';
 import { TerminusModule } from '@nestjs/terminus';
+import { HealthController } from '@ocm/shared';
 
 import { AgentModule } from './agent/agent.module.js';
 import { ConnectionModule } from './agent/connection/connection.module.js';
 import { config } from './config/config.js';
 import { validationSchema } from './config/validation.js';
-import { HealthController } from './health/health.controller.js';
 
 @Module({
   imports: [
diff --git a/apps/ssi-abstraction/src/common/response.ts b/apps/ssi-abstraction/src/common/response.ts
deleted file mode 100644
index 6fe63e566ee537d340d7372754536b85dda0dd74..0000000000000000000000000000000000000000
--- a/apps/ssi-abstraction/src/common/response.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export interface ResponseType {
-  statusCode: number;
-  message: string;
-  data?: unknown;
-  error?: unknown;
-}
diff --git a/apps/ssi-abstraction/src/config/config.ts b/apps/ssi-abstraction/src/config/config.ts
index 102dd755059d0c83f897009172910aa05a022b41..874026b28f0d69b6135be58ee4f567d7bde7c0ab 100644
--- a/apps/ssi-abstraction/src/config/config.ts
+++ b/apps/ssi-abstraction/src/config/config.ts
@@ -1,4 +1,4 @@
-import type { AutoAcceptCredential } from '@aries-framework/core';
+import { AutoAcceptCredential } from '@aries-framework/core';
 
 interface Config {
   agentHost: string;
@@ -13,7 +13,7 @@ interface Config {
     name: string;
     walletId: string;
     walletKey: string;
-    ledgerIds: string[] | undefined;
+    ledgerIds?: string[];
     host: string;
     peerPort: string;
     path: string;
@@ -37,14 +37,15 @@ export const config = (): Config => ({
     name: process.env.AGENT_NAME || '',
     walletId: process.env.AGENT_WALLET_ID || '',
     walletKey: process.env.AGENT_WALLET_KEY || '',
-    ledgerIds: process.env.AGENT_LEDGER_ID?.split(',') || undefined,
+    ledgerIds: process.env.AGENT_LEDGER_ID?.split(','),
     host: process.env.AGENT_HOST || '',
     peerPort: process.env.AGENT_PEER_PORT || '',
     path: process.env.AGENT_URL_PATH || '',
     publicDidSeed: process.env.AGENT_PUBLIC_DID_SEED || '',
     autoAcceptConnection: process.env.AGENT_AUTO_ACCEPT_CONNECTION === 'true',
-    autoAcceptCredential: process.env
-      .AGENT_AUTO_ACCEPT_CREDENTIAL as AutoAcceptCredential,
+    autoAcceptCredential:
+      (process.env.AGENT_AUTO_ACCEPT_CREDENTIAL as AutoAcceptCredential) ||
+      AutoAcceptCredential.ContentApproved,
     idUnionKey: process.env.AGENT_ID_UNION_KEY || '',
   },
 });
diff --git a/apps/ssi-abstraction/src/agent/utils/ledgerConfig.ts b/apps/ssi-abstraction/src/config/ledger.ts
similarity index 79%
rename from apps/ssi-abstraction/src/agent/utils/ledgerConfig.ts
rename to apps/ssi-abstraction/src/config/ledger.ts
index 0c2675d8084de2fd7af95d94f9166fbdb90e9a88..eea8e8c6ebf3306904f91d7b02e26cee3dbbb194 100644
--- a/apps/ssi-abstraction/src/agent/utils/ledgerConfig.ts
+++ b/apps/ssi-abstraction/src/config/ledger.ts
@@ -1,5 +1,8 @@
-export const LEDGER_GENESIS = {
-  ID_UNION: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"MainIncubator","blskey":"14MPfxHnRvCL5dnbpD3SjxekAGnKyjkmifDFLnMJAvHcvEAarDLWX6KawhubPujSmmUMqRmQfPQzBambrdUqBGgHDryDS6Aj8BioWRwZkyTcH1zzkVQ7vZjE5S6ri5epkiS1VkVX42Z22z4cohdHVuKTgeQB5mjAwi55xNeRxpxhrNb","blskey_pop":"QoqRe3vMPr5Bt1qHDstYewWkxb5VEdugnvumLCWpkZAeUpdqjjaSTSKKJtT7U7aCe8CmShGSdCZFWs9hcpmMSGfMnmon7R99UTJj4jEr48smyxo1UpBcgooznc8N8USkZ8hSec3bRbN9y6NppuaFzfgt1WmJ3cdFi9L1Wbj1fNs5CK","client_ip":"35.207.81.15","client_port":"9702","node_ip":"35.207.81.15","node_port":"9701","services":["VALIDATOR"]},"dest":"EQ2oCtWpMdUCzKgQ2hvbyQ2i6VyJuQF9LcpHRfiah6rW"},"metadata":{"from":"2MZYuPv2Km7Q1eD4GCsSb6"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"0a35c047f19448f12a0c2961d8e3085140b8149d87291acbdaf56ed956900d48"},"ver":"1"}
+export const LEDGERS = {
+  ID_UNION: {
+    registerNymUrl: 'https://idu.cloudcompass.ca/register',
+    namespace: 'idunion:test',
+    genesisTransaction: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"MainIncubator","blskey":"14MPfxHnRvCL5dnbpD3SjxekAGnKyjkmifDFLnMJAvHcvEAarDLWX6KawhubPujSmmUMqRmQfPQzBambrdUqBGgHDryDS6Aj8BioWRwZkyTcH1zzkVQ7vZjE5S6ri5epkiS1VkVX42Z22z4cohdHVuKTgeQB5mjAwi55xNeRxpxhrNb","blskey_pop":"QoqRe3vMPr5Bt1qHDstYewWkxb5VEdugnvumLCWpkZAeUpdqjjaSTSKKJtT7U7aCe8CmShGSdCZFWs9hcpmMSGfMnmon7R99UTJj4jEr48smyxo1UpBcgooznc8N8USkZ8hSec3bRbN9y6NppuaFzfgt1WmJ3cdFi9L1Wbj1fNs5CK","client_ip":"35.207.81.15","client_port":"9702","node_ip":"35.207.81.15","node_port":"9701","services":["VALIDATOR"]},"dest":"EQ2oCtWpMdUCzKgQ2hvbyQ2i6VyJuQF9LcpHRfiah6rW"},"metadata":{"from":"2MZYuPv2Km7Q1eD4GCsSb6"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"0a35c047f19448f12a0c2961d8e3085140b8149d87291acbdaf56ed956900d48"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"tubzecm","blskey":"3Zpdx6LMWPdybnQKPq62S3TaWUhwypr7RV2BBFkeFigjKuue7KJ7rh5w1gZY9qgugww9vZnpURLSjBuTonJpfyfN5nn2ofwFQQa3viiT77hhFf6kQqoMH53f66ZfBNWU2LzphQikXsma9zjZWALMtMsNWx7ftNZ8yzMrZpf1X6VqYX5","blskey_pop":"RbPQSMsV8iuxNXVFNEUPvb6k1wQe1rxaXroMMkpHTstiiJfCApER38jW79Ew1yrnt5ndz7wJeDRU7CkLNzJ6pEZaRYjLzhZL2shRgyaGqnMqkxvD1ewxNMSz7cSgBSChwUgLBxsms5iDyshwAM5dx8B1GayMyATcFxAdgCRiDv3EHm","client_ip":"141.23.35.186","client_port":"9702","node_ip":"141.23.35.186","node_port":"9701","services":["VALIDATOR"]},"dest":"Ddqm5GATTcEb5hrgMBbVL8w6R6mtTHjUpdpyCeWg3pVS"},"metadata":{"from":"JhyMn8Nn3xy2zsXjPaPu3B"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"e2f9efff1bfef015098ae299a665154fa39a898a5071d0af03c7f2311fe8577f"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Bosch","blskey":"WNBd2CBPJMSaBan72XhY1v5XSkExX7GRCqxM7WNSfveoDcHSLXbQ59K1mWAcgoJZd89NaYa5pLb7N3AcLxSNUj8HJXwjd8jMECvX9iiGESVn2ssb8VFX2TDE2RBVC4nU5jDexzpwqnhJk27ev64J8H21SpbBecbHvP49ZQpRVaq6WL","blskey_pop":"QkmprUBuiKmoUGkFLGVbozGfiFRcNnjfyL8Zg4VfjPpUT7i8YPoPExbDhFxUKofgavJ1ZEsG8VZECpNDC75anfTfivsuMBr5w4a31ZKuqwCscAXzmeTPrkTPo7QLXuYc1SQMTjrm8YEkBYzHuXktJzkJXvLERnoAdLWqPqMyYWUzGo","client_ip":"20.52.38.11","client_port":"9702","node_ip":"20.52.38.11","node_port":"9701","services":["VALIDATOR"]},"dest":"9oB1GdDzFyn4p1Pb6BotYuSXozdwDWXW5s2jRjg86KpZ"},"metadata":{"from":"K3Bf63TUe3nTj1SKuQVZ2e"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"865ce0cf621e0d5f9c2dccb9e5079733a83d80ea2e814d32c3300bc2c2755b7b"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Bundesdruckerei","blskey":"ypA6Fzaqx3WgyeBWjahz94ZYMXdyRuC9v4NruuNVehxt3VgyRPnBeiRxNcXuN9x7PgD4Y585EkAZMSEUrpego9H75hiNppqFTBppPh8cMisKKxW2qZmePnwM8AR2MkWfsytP64AcZFxhXQw1Sx9SeDZwEZAhzNFg2CGY1Ywf1VyCkB","blskey_pop":"RBGcyWimwwZhTtJrW8f3br5osAFkSbpEsEyR3UtX3Lq82kFCA2yEn1H2HHYapmQ5KQ42ZAE2srfjYa5ihZGgs96oxAHpKdkPWX4rXcnxyFcbPihDCmqY9YvnR6DrzfLMc9ew5ac6xeQfiefiEZGMENFsehLPtiQyohSzZBFEqB8Tdy","client_ip":"193.28.64.163","client_port":"9702","node_ip":"193.28.64.163","node_port":"9701","services":["VALIDATOR"]},"dest":"8CMjmTUmAULZ25XUmLx3Gd2HX8bKf5uwPvF6oxcv3qfz"},"metadata":{"from":"BdrsFY8EFRNDwQpdKb6f5k"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"8406be5a8bde1145f642a9955a80475c7256a9957b3a984c74ca6a8484f9c0f7"},"ver":"1"}
@@ -8,26 +11,23 @@ export const LEDGER_GENESIS = {
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"DeutscheBahn","blskey":"4nJSdxfx7MPdBH1ioFy4dk9hDgRV1D21JTKbWCkWAtvqwnMNfLgg8qrXhuNf5Ux8owBjMZPPQMiYsgwd7UbBTKmi8P4Hef6udXDq7p2EYGcM512JRRi8Z6igeijcRinnzLTM3Bso7xjJngaohMTZ2yNdRmB5WuyJKbZfr5qRbzEReMd","blskey_pop":"RZTAfkfry51g41qCVbYkKbsE9Nw16hx9k6Dnnun4vJbFLbtnyvuRfWHUVrjvfdbq48MRRRyY3miVGgxdugKMCSA9LxzmXJSCJG2Hxck2xsiFKUzznsqF6DWtGfo639WNz4Qk5xCvbDxhmmRYmZ3mJhUg8X3MEoCkQCsqAEi2oAQg9D","client_ip":"81.200.193.232","client_port":"9702","node_ip":"81.200.193.232","node_port":"9701","services":["VALIDATOR"]},"dest":"Ahb65rjbm94hNxM8jynTbWBMZyNmuuvtvsCAyntKSd3k"},"metadata":{"from":"JoCzEPXHeef6zYoXGx87aZ"},"type":"0"},"txnMetadata":{"seqNo":7,"txnId":"58b0a0cb860a20b41082d4d1b2419867156ca7aea3a0bdf2bdb318a270a6a367"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"siemens","blskey":"2DpsFyaZFWpHChf9pbHiNtZx9ze7RfzRhdnaAp3ZHZmLrZivyyMcnM7xhyKoc9LkZCAd1kuQHtfYNtAW4yY4DsoDQnXzKmWkLbRRwA8aNjxFK1uGP8npAXpVNTnWieNuQpj9EgQSDU5WJYR3SDgrV7sx51vwsa6ggkhAJNENyMRqZHY","blskey_pop":"RCx6QwyeaLpAHaD3AGgGZSNqyxQLsaAa9H2kKoQAMpQXkh9XZfsZtGbZTvPK2ZTXHMVvUyfCmWvaM8YxuJGRZ7QQTFAg9ECaqLPKexrp3P4huHMMs7nzj992ECVnuu66Dppbn6AEEF46NQXcXEDsEquHEHhuzD1JV9oAvcqaPGu2Hm","client_ip":"3.120.0.165","client_port":"9702","node_ip":"3.120.0.165","node_port":"9701","services":["VALIDATOR"]},"dest":"9XrquGpmLMXq5v5UuVLmPdZ5nPVDbdtMLSEWzE9Phm8H"},"metadata":{"from":"GewebF4Nq1LLRw5gwX1Dwv"},"type":"0"},"txnMetadata":{"seqNo":8,"txnId":"30e363d3e8c59f2c1319f8d73d48e3ad26db5e087951a4d7ab809c6f5401aea8"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"T-Labs","blskey":"qLCWHTGoARJxSM8yCj3zDnx4gUDaTwMoX2v9enhYTg1FRLN2Wcu9Dg91hrHKcrp1RiJMphAvRYbpXZLYN7AGiu3vCfiTfSuwM9qEWmhRe23KF67kQyRDNDVa8PZjPL7xhtsQRkJ5Gox3H6TmC8H2JFYBZ5JwcbieGfZMzMF5eDku1c","blskey_pop":"RPrk8q1pZAQhzEM8KhPTp9BKixe2PrJFJFhEV6M3uq8qDrUvpbZEWJUvm9iPnfh5cXrXTojNFo472XrVtbcxtnRwxz9Xrm2dfbARu5Gjxd5s9TGn145iKuzEEFrVt2usyf18E8XudD4ZwPovVVQgp9seKStnfYPKVTYTp726Ps5fQs","client_ip":"185.27.183.119","client_port":"9702","node_ip":"185.27.183.119","node_port":"9701","services":["VALIDATOR"]},"dest":"9k4Sjfxg2XqP2GcVAPHFuVJeY2bLbSUCPcVty6FRLzbY"},"metadata":{"from":"Ta94MpvKrQwTtiNMegQMvs"},"type":"0"},"txnMetadata":{"seqNo":9,"txnId":"1626d887a6323309883ab5fb8381f6176ab5e4ff4502389bb2978daee076cc39"},"ver":"1"}`,
-  BCOVRIN_TEST: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.138.255","client_port":9702,"node_ip":"138.197.138.255","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"}
+  },
+  BCOVRIN_TEST: {
+    registerNymUrl: 'http://test.bcovrin.vonx.io/register',
+    namespace: 'bcovrin:test',
+    genesisTransaction: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.138.255","client_port":9702,"node_ip":"138.197.138.255","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node2","blskey":"37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk","blskey_pop":"Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5","client_ip":"138.197.138.255","client_port":9704,"node_ip":"138.197.138.255","node_port":9703,"services":["VALIDATOR"]},"dest":"8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"},"metadata":{"from":"EbP4aYNeTHL6q385GuVpRV"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node3","blskey":"3WFpdbg7C5cnLYZwFZevJqhubkFALBfCBBok15GdrKMUhUjGsk3jV6QKj6MZgEubF7oqCafxNdkm7eswgA4sdKTRc82tLGzZBd6vNqU8dupzup6uYUf32KTHTPQbuUM8Yk4QFXjEf2Usu2TJcNkdgpyeUSX42u5LqdDDpNSWUK5deC5","blskey_pop":"QwDeb2CkNSx6r8QC8vGQK3GRv7Yndn84TGNijX8YXHPiagXajyfTjoR87rXUu4G4QLk2cF8NNyqWiYMus1623dELWwx57rLCFqGh7N4ZRbGDRP4fnVcaKg1BcUxQ866Ven4gw8y4N56S5HzxXNBZtLYmhGHvDtk6PFkFwCvxYrNYjh","client_ip":"138.197.138.255","client_port":9706,"node_ip":"138.197.138.255","node_port":9705,"services":["VALIDATOR"]},"dest":"DKVxG2fXXTU8yT5N7hGEbXB3dfdAnYv1JczDUHpmDxya"},"metadata":{"from":"4cU41vWW82ArfxJxHkzXPG"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"7e9f355dffa78ed24668f0e0e369fd8c224076571c51e2ea8be5f26479edebe4"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node4","blskey":"2zN3bHM1m4rLz54MJHYSwvqzPchYp8jkHswveCLAEJVcX6Mm1wHQD1SkPYMzUDTZvWvhuE6VNAkK3KxVeEmsanSmvjVkReDeBEMxeDaayjcZjFGPydyey1qxBHmTvAnBKoPydvuTAqx5f7YNNRAdeLmUi99gERUU7TD8KfAa6MpQ9bw","blskey_pop":"RPLagxaR5xdimFzwmzYnz4ZhWtYQEj8iR5ZU53T2gitPCyCHQneUn2Huc4oeLd2B2HzkGnjAff4hWTJT6C7qHYB1Mv2wU5iHHGFWkhnTX9WsEAbunJCV2qcaXScKj4tTfvdDKfLiVuU2av6hbsMztirRze7LvYBkRHV3tGwyCptsrP","client_ip":"138.197.138.255","client_port":9708,"node_ip":"138.197.138.255","node_port":9707,"services":["VALIDATOR"]},"dest":"4PS3EDQ3dW1tci1Bp6543CfuuebjFrg36kLAUcskGfaA"},"metadata":{"from":"TWwCRQRZ2ZHMJFn9TzLp7W"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"aa5e817d7cc626170eca175822029339a444eb0ee8f0bd20d3b0b76e566fb008"},"ver":"1"}`,
-  GREEN_LIGHT: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.161.221","client_port":9702,"node_ip":"138.197.161.221","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"}
+  },
+  GREEN_LIGHT: {
+    registerNymUrl: 'http://greenlight.bcovrin.vonx.io/register',
+    namespace: 'bcovrin:greenlight',
+    genesisTransaction: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.161.221","client_port":9702,"node_ip":"138.197.161.221","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node2","blskey":"37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk","blskey_pop":"Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5","client_ip":"138.197.161.221","client_port":9704,"node_ip":"138.197.161.221","node_port":9703,"services":["VALIDATOR"]},"dest":"8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"},"metadata":{"from":"EbP4aYNeTHL6q385GuVpRV"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node3","blskey":"3WFpdbg7C5cnLYZwFZevJqhubkFALBfCBBok15GdrKMUhUjGsk3jV6QKj6MZgEubF7oqCafxNdkm7eswgA4sdKTRc82tLGzZBd6vNqU8dupzup6uYUf32KTHTPQbuUM8Yk4QFXjEf2Usu2TJcNkdgpyeUSX42u5LqdDDpNSWUK5deC5","blskey_pop":"QwDeb2CkNSx6r8QC8vGQK3GRv7Yndn84TGNijX8YXHPiagXajyfTjoR87rXUu4G4QLk2cF8NNyqWiYMus1623dELWwx57rLCFqGh7N4ZRbGDRP4fnVcaKg1BcUxQ866Ven4gw8y4N56S5HzxXNBZtLYmhGHvDtk6PFkFwCvxYrNYjh","client_ip":"138.197.161.221","client_port":9706,"node_ip":"138.197.161.221","node_port":9705,"services":["VALIDATOR"]},"dest":"DKVxG2fXXTU8yT5N7hGEbXB3dfdAnYv1JczDUHpmDxya"},"metadata":{"from":"4cU41vWW82ArfxJxHkzXPG"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"7e9f355dffa78ed24668f0e0e369fd8c224076571c51e2ea8be5f26479edebe4"},"ver":"1"}
   {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node4","blskey":"2zN3bHM1m4rLz54MJHYSwvqzPchYp8jkHswveCLAEJVcX6Mm1wHQD1SkPYMzUDTZvWvhuE6VNAkK3KxVeEmsanSmvjVkReDeBEMxeDaayjcZjFGPydyey1qxBHmTvAnBKoPydvuTAqx5f7YNNRAdeLmUi99gERUU7TD8KfAa6MpQ9bw","blskey_pop":"RPLagxaR5xdimFzwmzYnz4ZhWtYQEj8iR5ZU53T2gitPCyCHQneUn2Huc4oeLd2B2HzkGnjAff4hWTJT6C7qHYB1Mv2wU5iHHGFWkhnTX9WsEAbunJCV2qcaXScKj4tTfvdDKfLiVuU2av6hbsMztirRze7LvYBkRHV3tGwyCptsrP","client_ip":"138.197.161.221","client_port":9708,"node_ip":"138.197.161.221","node_port":9707,"services":["VALIDATOR"]},"dest":"4PS3EDQ3dW1tci1Bp6543CfuuebjFrg36kLAUcskGfaA"},"metadata":{"from":"TWwCRQRZ2ZHMJFn9TzLp7W"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"aa5e817d7cc626170eca175822029339a444eb0ee8f0bd20d3b0b76e566fb008"},"ver":"1"}`,
-};
-
-export const NYM_URL = {
-  ID_UNION: 'https://idu.cloudcompass.ca/register',
-  BCOVRIN_TEST: 'http://test.bcovrin.vonx.io/register',
-  GREEN_LIGHT: 'http://greenlight.bcovrin.vonx.io/register',
+  },
 } as const;
 
-export type LedgerIds = keyof typeof LEDGER_GENESIS;
-
-export const ledgerNamespaces = {
-  ID_UNION: 'idunion:test',
-  BCOVRIN_TEST: 'bcovrin:test',
-  GREEN_LIGHT: 'bcovrin:greenlight',
-};
+export type LedgerIds = keyof typeof LEDGERS;
diff --git a/apps/ssi-abstraction/src/main.ts b/apps/ssi-abstraction/src/main.ts
index 1d500b60262b2a2fd8c20103a72fe6bb5e7bcdd7..f2d3a7371dde4d9fd10330dde08ae5bb0da89b7f 100644
--- a/apps/ssi-abstraction/src/main.ts
+++ b/apps/ssi-abstraction/src/main.ts
@@ -1,4 +1,4 @@
-import type { MicroserviceOptions} from '@nestjs/microservices';
+import type { MicroserviceOptions } from '@nestjs/microservices';
 
 import { NestFactory } from '@nestjs/core';
 import { Transport } from '@nestjs/microservices';
diff --git a/apps/ssi-abstraction/src/middleware/agentMid.middleware.ts b/apps/ssi-abstraction/src/middleware/agent.middleware.ts
similarity index 85%
rename from apps/ssi-abstraction/src/middleware/agentMid.middleware.ts
rename to apps/ssi-abstraction/src/middleware/agent.middleware.ts
index 56d1bd13d8ed3bfa51b7b928afe21d5a1ce81a0f..494f6d39f81c571619b2c9ad6650600a46474316 100644
--- a/apps/ssi-abstraction/src/middleware/agentMid.middleware.ts
+++ b/apps/ssi-abstraction/src/middleware/agent.middleware.ts
@@ -1,4 +1,4 @@
-import type { NestMiddleware} from '@nestjs/common';
+import type { NestMiddleware } from '@nestjs/common';
 import type { Request, NextFunction, Response } from 'express';
 
 import { Injectable, HttpStatus } from '@nestjs/common';
@@ -8,7 +8,7 @@ import { Injectable, HttpStatus } from '@nestjs/common';
  * to the requests.
  */
 @Injectable()
-export class AgentMid implements NestMiddleware {
+export class AgentMiddleware implements NestMiddleware {
   public use(req: Request, res: Response, next: NextFunction) {
     const [, prop] = req.url.split('/');
     if (prop === 'info') {
diff --git a/apps/ssi-abstraction/test/didComm.e2e-spec.ts b/apps/ssi-abstraction/test/didComm.e2e-spec.ts
deleted file mode 100644
index 28e77ba9a17fbe1db4ff62daabf6bda633774d57..0000000000000000000000000000000000000000
--- a/apps/ssi-abstraction/test/didComm.e2e-spec.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import type { INestApplication } from '@nestjs/common';
-import type { TestingModule } from '@nestjs/testing';
-
-import { Test } from '@nestjs/testing';
-import request from 'supertest';
-
-import { AppModule } from '../src/app.module.js';
-
-describe('DidCommController (e2e)', () => {
-  let app: INestApplication;
-
-  beforeAll(async () => {
-    const moduleFixture: TestingModule = await Test.createTestingModule({
-      imports: [AppModule],
-    }).compile();
-
-    app = moduleFixture.createNestApplication();
-    await app.init();
-  });
-  afterAll(async () => {
-    await app.close();
-  });
-
-  it('/v1/agent/connections/createConnection (POST)', async () => {
-    await request(app.getHttpServer())
-      .post('v1/agent/connections/createConnection')
-      .expect(200);
-  });
-
-  it('/v1/agent/info (GET)', async () => {
-    await request(app.getHttpServer()).post('v1/agent/info').expect(200);
-  });
-});
diff --git a/apps/ssi-abstraction/tsconfig.json b/apps/ssi-abstraction/tsconfig.json
index 6f83eb665f830a10825b9d9b06931a87a6aad2d2..4082f16a5d91ce6f21a9092b14170eeecc8f1d75 100644
--- a/apps/ssi-abstraction/tsconfig.json
+++ b/apps/ssi-abstraction/tsconfig.json
@@ -1,3 +1,3 @@
 {
-  "extends": "../../tsconfig.json",
+  "extends": "../../tsconfig.json"
 }
diff --git a/compose/aries-mediator-service/acapy/configs/mediator-auto-accept.yml b/compose/aries-mediator-service/acapy/configs/mediator-auto-accept.yml
index 8f828a31d21265b674243740d42cebaeb6fb5242..caa6eff781911a50af0a8847bc370b0f016eed3d 100644
--- a/compose/aries-mediator-service/acapy/configs/mediator-auto-accept.yml
+++ b/compose/aries-mediator-service/acapy/configs/mediator-auto-accept.yml
@@ -21,5 +21,5 @@ auto-ping-connection: true
 
 # Print an admin invite
 connections-invite: true
-invite-label: "Mediator"
+invite-label: 'Mediator'
 invite-multi-use: true
diff --git a/compose/aries-mediator-service/acapy/configs/mediator-with-controller.yml b/compose/aries-mediator-service/acapy/configs/mediator-with-controller.yml
index 5955f18c6b072f27cc2d759108cd6d626951cce3..afe62367e2e8bd413f7db9d023242eec61c138ca 100644
--- a/compose/aries-mediator-service/acapy/configs/mediator-with-controller.yml
+++ b/compose/aries-mediator-service/acapy/configs/mediator-with-controller.yml
@@ -20,5 +20,5 @@ auto-ping-connection: true
 
 # Print an admin invite
 connections-invite: true
-invite-label: "Mediator"
+invite-label: 'Mediator'
 invite-multi-use: true
diff --git a/compose/aries-mediator-service/acapy/configs/mediator-with-plugin.yml b/compose/aries-mediator-service/acapy/configs/mediator-with-plugin.yml
index 967bb426a00eb49a51558b304c066a60b5a637b7..cff780e028b15a41a7028ecf6c1d1391670cb1b2 100644
--- a/compose/aries-mediator-service/acapy/configs/mediator-with-plugin.yml
+++ b/compose/aries-mediator-service/acapy/configs/mediator-with-plugin.yml
@@ -58,5 +58,5 @@ plugin:
 # Print an admin invite
 connections-invite: true
 invite-metadata: '{"group": "admin"}'
-invite-label: "Mediator (Admin)"
+invite-label: 'Mediator (Admin)'
 invite-multi-use: true
diff --git a/compose/aries-mediator-service/docker-compose.yml b/compose/aries-mediator-service/docker-compose.yml
index 6ab06071b055223e87a7863111b2ab4fc202fe49..4cbb954dc51a4f295226a8096ddffd95de86472c 100644
--- a/compose/aries-mediator-service/docker-compose.yml
+++ b/compose/aries-mediator-service/docker-compose.yml
@@ -1,4 +1,4 @@
-version: "3"
+version: '3'
 
 networks:
   mediator-network:
@@ -120,7 +120,7 @@ services:
     environment:
       POSTGRES_PASSWORD: ${POSTGRESQL_ADMIN_PASSWORD:-development}
     ports: # Uncomment to access postgres outside of containers
-      - "5435:5432"
+      - '5435:5432'
     networks:
       - mediator-network
     volumes:
diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml
index 9f3530f4061e469d1f981ec4b6d1f2ebf73521dc..befb8e148819ddb0b1e880fd310f69dbf10a7500 100644
--- a/compose/docker-compose.yml
+++ b/compose/docker-compose.yml
@@ -1,4 +1,4 @@
-version: "3.9"
+version: '3.9'
 
 services:
   connection-manager:
@@ -8,7 +8,7 @@ services:
         - SERVICE=connection-manager
     init: true
     ports:
-      - "3003:3003"
+      - '3003:3003'
     env_file: ./env/connection-manager.env
     depends_on:
       - db
@@ -22,7 +22,7 @@ services:
         - SERVICE=attestation-manager
     init: true
     ports:
-      - "3005:3005"
+      - '3005:3005'
     env_file: ./env/attestation-manager.env
     depends_on:
       - db
@@ -36,7 +36,7 @@ services:
         - SERVICE=proof-manager
     init: true
     ports:
-      - "3007:3007"
+      - '3007:3007'
     env_file: ./env/proof-manager.env
     depends_on:
       - db
@@ -50,9 +50,9 @@ services:
         - SERVICE=ssi-abstraction
     init: true
     ports:
-      - "3009:3009"
-      - "3010:3010"
-      - "4000:4000"
+      - '3009:3009'
+      - '3010:3010'
+      - '4000:4000'
     env_file: ./env/ssi-abstraction.env
     depends_on:
       - db
@@ -65,7 +65,7 @@ services:
     ports:
       - 5432:5432
     healthcheck:
-      test: ["CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root"]
+      test: ['CMD', 'pg_isready', '-q', '-d', 'postgres', '-U', 'root']
       timeout: 45s
       interval: 10s
       retries: 10
diff --git a/package.json b/package.json
index 92df10c51cd7d82fa7931fd5823a83d8d10f119e..973e734dd3f6f350c54329a7daa02abc2dc76581 100644
--- a/package.json
+++ b/package.json
@@ -10,9 +10,9 @@
     "proof:build": "pnpm -F proof-manager build",
     "ssi:build": "pnpm -F ssi-abstraction build",
     "lint": "eslint --fix",
-    "lint:all": "npm run lint -- .",
+    "lint:all": "pnpm lint -- .",
     "format": "prettier --write",
-    "format:all": "npm run format -- .",
+    "format:all": "pnpm format -- .",
     "lint-staged": "lint-staged",
     "prepare": "husky install"
   },
@@ -31,4 +31,4 @@
     "lint-staged": "^15.1.0",
     "prettier": "^3.1.0"
   }
-}
\ No newline at end of file
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 49df92a65ab29df4cd16a0908fccaccf11bbadfb..33d3924ae78ff9ac06d26d5085e7ab170bceb11f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,11 +9,11 @@ importers:
   .:
     devDependencies:
       '@commitlint/cli':
-        specifier: ^18.4.2
-        version: 18.4.2(typescript@5.3.2)
+        specifier: ^18.4.3
+        version: 18.4.3(typescript@5.3.2)
       '@commitlint/config-conventional':
-        specifier: ^18.4.2
-        version: 18.4.2
+        specifier: ^18.4.3
+        version: 18.4.3
       '@typescript-eslint/eslint-plugin':
         specifier: ^6.12.0
         version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2)
@@ -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
@@ -477,6 +477,67 @@ importers:
         specifier: ^5.2.2
         version: 5.2.2
 
+  apps/shared:
+    dependencies:
+      '@aries-framework/core':
+        specifier: 0.4.2
+        version: 0.4.2(expo@49.0.18)(react-native@0.72.7)
+      '@elastic/ecs-winston-format':
+        specifier: ^1.5.0
+        version: 1.5.0
+      '@nestjs/common':
+        specifier: ^10.2.10
+        version: 10.2.10(reflect-metadata@0.1.13)(rxjs@7.8.1)
+      '@nestjs/microservices':
+        specifier: ^10.2.10
+        version: 10.2.10(@nestjs/common@10.2.10)(@nestjs/core@10.2.10)(nats@2.18.0)(reflect-metadata@0.1.13)(rxjs@7.8.1)
+      axios:
+        specifier: ^1.6.2
+        version: 1.6.2
+      joi:
+        specifier: ^17.6.0
+        version: 17.11.0
+      nats:
+        specifier: ^2.18.0
+        version: 2.18.0
+      rxjs:
+        specifier: ^7.2.0
+        version: 7.8.1
+      winston:
+        specifier: ^3.11.0
+        version: 3.11.0
+    devDependencies:
+      '@nestjs/cli':
+        specifier: ^10.2.1
+        version: 10.2.1
+      '@nestjs/testing':
+        specifier: ^10.2.10
+        version: 10.2.10(@nestjs/common@10.2.10)(@nestjs/core@10.2.10)(@nestjs/microservices@10.2.10)
+      '@types/jest':
+        specifier: ^29.5.9
+        version: 29.5.10
+      '@types/node':
+        specifier: ^20.9.3
+        version: 20.9.4
+      rimraf:
+        specifier: ^5.0.5
+        version: 5.0.5
+      supertest:
+        specifier: ^6.1.3
+        version: 6.3.3
+      ts-jest:
+        specifier: ^29.1.1
+        version: 29.1.1(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.3.2)
+      ts-node:
+        specifier: ^10.0.0
+        version: 10.9.1(@types/node@20.9.4)(typescript@5.3.2)
+      tsconfig-paths:
+        specifier: ^4.2.0
+        version: 4.2.0
+      typescript:
+        specifier: ~5.3.2
+        version: 5.3.2
+
   apps/ssi-abstraction:
     dependencies:
       '@aries-framework/anoncreds':
@@ -527,6 +588,9 @@ importers:
       '@nestjs/terminus':
         specifier: ^10.1.1
         version: 10.1.1(@nestjs/axios@3.0.1)(@nestjs/common@10.2.10)(@nestjs/core@10.2.10)(@nestjs/microservices@10.2.10)(reflect-metadata@0.1.13)(rxjs@7.8.1)
+      '@ocm/shared':
+        specifier: workspace:*
+        version: link:../shared
       axios:
         specifier: ^1.6.2
         version: 1.6.2
@@ -2356,16 +2420,16 @@ packages:
     engines: {node: '>=0.1.90'}
     dev: false
 
-  /@commitlint/cli@18.4.2(typescript@5.3.2):
-    resolution: {integrity: sha512-dDfb2+wzeQe6ogdHNHOy0J0nraok+La0BoxamNMhBOng9/5GoESPDmKUJ1Lt1oivh5MfIgZh0Vm6f0rxkB8CoA==}
+  /@commitlint/cli@18.4.3(typescript@5.3.2):
+    resolution: {integrity: sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==}
     engines: {node: '>=v18'}
     hasBin: true
     dependencies:
-      '@commitlint/format': 18.4.0
-      '@commitlint/lint': 18.4.2
-      '@commitlint/load': 18.4.2(typescript@5.3.2)
-      '@commitlint/read': 18.4.0
-      '@commitlint/types': 18.4.0
+      '@commitlint/format': 18.4.3
+      '@commitlint/lint': 18.4.3
+      '@commitlint/load': 18.4.3(typescript@5.3.2)
+      '@commitlint/read': 18.4.3
+      '@commitlint/types': 18.4.3
       execa: 5.1.1
       lodash.isfunction: 3.0.9
       resolve-from: 5.0.0
@@ -2375,26 +2439,26 @@ packages:
       - typescript
     dev: true
 
-  /@commitlint/config-conventional@18.4.2:
-    resolution: {integrity: sha512-qFjIqgKGV89lzUGHxanq2WJDXk5wZIxoZmZvf0I4i4CirL06Xj8qRh1shPsXNyI15d8Rj2HExww6cGJSFU9DdA==}
+  /@commitlint/config-conventional@18.4.3:
+    resolution: {integrity: sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==}
     engines: {node: '>=v18'}
     dependencies:
       conventional-changelog-conventionalcommits: 7.0.2
     dev: true
 
-  /@commitlint/config-validator@18.4.0:
-    resolution: {integrity: sha512-1y6qHMU3o4cYQSK+Y9EnmH6H1GRiwQGjnLIUOIKlekrmfc8MrMk1ByNmb8od4vK3qHJAaL/77/5n+1uyyIF5dA==}
+  /@commitlint/config-validator@18.4.3:
+    resolution: {integrity: sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/types': 18.4.0
+      '@commitlint/types': 18.4.3
       ajv: 8.12.0
     dev: true
 
-  /@commitlint/ensure@18.4.0:
-    resolution: {integrity: sha512-N5cJo/n61ULSwz3W5Iz/IZJ0I9H/PaHc+OMcF2XcRVbLa6B3YwzEW66XGCRKVULlsBNSrIH6tk5un9ayXAXIdw==}
+  /@commitlint/ensure@18.4.3:
+    resolution: {integrity: sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/types': 18.4.0
+      '@commitlint/types': 18.4.3
       lodash.camelcase: 4.3.0
       lodash.kebabcase: 4.1.1
       lodash.snakecase: 4.1.1
@@ -2402,45 +2466,45 @@ packages:
       lodash.upperfirst: 4.3.1
     dev: true
 
-  /@commitlint/execute-rule@18.4.0:
-    resolution: {integrity: sha512-g013SWki6ZWhURBLOSXTaVQGWHdA0QlPJGiW4a+YpThezmJOemvc4LiKVpn13AjSKQ40QnmBqpBrxujOaSo+3A==}
+  /@commitlint/execute-rule@18.4.3:
+    resolution: {integrity: sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==}
     engines: {node: '>=v18'}
     dev: true
 
-  /@commitlint/format@18.4.0:
-    resolution: {integrity: sha512-MiAe4D5/ahty38CzULdQbpRa3ReKZtx0kyigOWcntq+N5uqez+Ac4/MO7H+3j1kC4G7nfJVfBu6TqcXeyNvhCQ==}
+  /@commitlint/format@18.4.3:
+    resolution: {integrity: sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/types': 18.4.0
+      '@commitlint/types': 18.4.3
       chalk: 4.1.2
     dev: true
 
-  /@commitlint/is-ignored@18.4.2:
-    resolution: {integrity: sha512-uujjyJlrXsMsQrv0r8HDGigAwJELPAMtA1Vxi2WUB54HbyAWa0Ue6ujMRZNKov2YeA96r6o72gLDnugb6yu8IA==}
+  /@commitlint/is-ignored@18.4.3:
+    resolution: {integrity: sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/types': 18.4.0
+      '@commitlint/types': 18.4.3
       semver: 7.5.4
     dev: true
 
-  /@commitlint/lint@18.4.2:
-    resolution: {integrity: sha512-ljGOIH7w9SnjvZFoKjf30iWFxDnezfRtOc50+rNLdDP0TpLspaYYLPhDO/TeVdmii1/AJiDgBIuBboQlaIy7Bw==}
+  /@commitlint/lint@18.4.3:
+    resolution: {integrity: sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/is-ignored': 18.4.2
-      '@commitlint/parse': 18.4.0
-      '@commitlint/rules': 18.4.0
-      '@commitlint/types': 18.4.0
+      '@commitlint/is-ignored': 18.4.3
+      '@commitlint/parse': 18.4.3
+      '@commitlint/rules': 18.4.3
+      '@commitlint/types': 18.4.3
     dev: true
 
-  /@commitlint/load@18.4.2(typescript@5.3.2):
-    resolution: {integrity: sha512-CKmzXdF9XwZJoVijAqpUlV9qzZOkyiYni4KuSCtTZVAAVudi9H84cJ4FqZxSwEP9G21vmoJiNrW8G042AsduVg==}
+  /@commitlint/load@18.4.3(typescript@5.3.2):
+    resolution: {integrity: sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/config-validator': 18.4.0
-      '@commitlint/execute-rule': 18.4.0
-      '@commitlint/resolve-extends': 18.4.0
-      '@commitlint/types': 18.4.0
+      '@commitlint/config-validator': 18.4.3
+      '@commitlint/execute-rule': 18.4.3
+      '@commitlint/resolve-extends': 18.4.3
+      '@commitlint/types': 18.4.3
       '@types/node': 18.18.10
       chalk: 4.1.2
       cosmiconfig: 8.3.6(typescript@5.3.2)
@@ -2453,68 +2517,68 @@ packages:
       - typescript
     dev: true
 
-  /@commitlint/message@18.4.0:
-    resolution: {integrity: sha512-3kg6NQO6pJ+VdBTWi51KInT8ngkxPJaW+iI7URtUALjKcO9K4XY3gf80ZPmS1hDessrjb7qCr1lau8eWMINAQw==}
+  /@commitlint/message@18.4.3:
+    resolution: {integrity: sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==}
     engines: {node: '>=v18'}
     dev: true
 
-  /@commitlint/parse@18.4.0:
-    resolution: {integrity: sha512-SxTCSUZH8CJNYWOlFg18YUQ2RLz8ubXKbpHUIiSNwCbiQx7UDCydp1JnhoB4sOYOxgV8d3nuDwYluRU5KnEY4A==}
+  /@commitlint/parse@18.4.3:
+    resolution: {integrity: sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/types': 18.4.0
-      conventional-changelog-angular: 6.0.0
+      '@commitlint/types': 18.4.3
+      conventional-changelog-angular: 7.0.0
       conventional-commits-parser: 5.0.0
     dev: true
 
-  /@commitlint/read@18.4.0:
-    resolution: {integrity: sha512-IpnABCbDeOw5npZ09SZZGLfd3T7cFtsxUYm6wT3aGmIB2fXKE3fMeuj3jxXjMibiGIyA3Z5voCMuOcKWpkNySA==}
+  /@commitlint/read@18.4.3:
+    resolution: {integrity: sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/top-level': 18.4.0
-      '@commitlint/types': 18.4.0
+      '@commitlint/top-level': 18.4.3
+      '@commitlint/types': 18.4.3
       fs-extra: 11.1.1
       git-raw-commits: 2.0.11
       minimist: 1.2.8
     dev: true
 
-  /@commitlint/resolve-extends@18.4.0:
-    resolution: {integrity: sha512-qhgU6ach+S6sJMD9NjCYiEycOObGhxzWQLQzqlScJCv9zkPs15Bg0ffLXTQ3z7ipXv46XEKYMnSJzjLRw2Tlkg==}
+  /@commitlint/resolve-extends@18.4.3:
+    resolution: {integrity: sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/config-validator': 18.4.0
-      '@commitlint/types': 18.4.0
+      '@commitlint/config-validator': 18.4.3
+      '@commitlint/types': 18.4.3
       import-fresh: 3.3.0
       lodash.mergewith: 4.6.2
       resolve-from: 5.0.0
       resolve-global: 1.0.0
     dev: true
 
-  /@commitlint/rules@18.4.0:
-    resolution: {integrity: sha512-T3ChRxQZ6g0iNCpVLc6KeQId0/86TnyQA8PFkng+dWElO2DAA5km/yirgKZV1Xlc+gF7Rf6d+a0ottxdKpOY+w==}
+  /@commitlint/rules@18.4.3:
+    resolution: {integrity: sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==}
     engines: {node: '>=v18'}
     dependencies:
-      '@commitlint/ensure': 18.4.0
-      '@commitlint/message': 18.4.0
-      '@commitlint/to-lines': 18.4.0
-      '@commitlint/types': 18.4.0
+      '@commitlint/ensure': 18.4.3
+      '@commitlint/message': 18.4.3
+      '@commitlint/to-lines': 18.4.3
+      '@commitlint/types': 18.4.3
       execa: 5.1.1
     dev: true
 
-  /@commitlint/to-lines@18.4.0:
-    resolution: {integrity: sha512-bZXuCtfBPjNgtEnG3gwJrveIgfKK2UdhIhFvKpMTrQl/gAwoto/3mzmE7qGAHwmuP4eZ2U8X7iwMnqIlWmv2Tw==}
+  /@commitlint/to-lines@18.4.3:
+    resolution: {integrity: sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==}
     engines: {node: '>=v18'}
     dev: true
 
-  /@commitlint/top-level@18.4.0:
-    resolution: {integrity: sha512-TfulcA8UHF7MZ6tm4Ci3aqZgMBZa1OoCg4prccWHvwG/hsHujZ7+0FKbeKqDbcSli/YWm4NJwEjl4uh5itIJeA==}
+  /@commitlint/top-level@18.4.3:
+    resolution: {integrity: sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==}
     engines: {node: '>=v18'}
     dependencies:
       find-up: 5.0.0
     dev: true
 
-  /@commitlint/types@18.4.0:
-    resolution: {integrity: sha512-MKeaFxt0I9fhqUb2E+YIzX/gZtmkuodJET/XKiZIMvXUff8Ee4Ih86eLg+yAm2jf1pwGBmU02uNOp0y094w2Uw==}
+  /@commitlint/types@18.4.3:
+    resolution: {integrity: sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==}
     engines: {node: '>=v18'}
     dependencies:
       chalk: 4.1.2
@@ -6874,9 +6938,9 @@ packages:
     resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
     engines: {node: '>= 0.6'}
 
-  /conventional-changelog-angular@6.0.0:
-    resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==}
-    engines: {node: '>=14'}
+  /conventional-changelog-angular@7.0.0:
+    resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
+    engines: {node: '>=16'}
     dependencies:
       compare-func: 2.0.0
     dev: true
@@ -7805,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:
@@ -8140,7 +8204,7 @@ packages:
       '@expo/config': 8.1.2
       chalk: 4.1.2
       commander: 7.2.0
-      fast-glob: 3.3.1
+      fast-glob: 3.3.2
       find-up: 5.0.0
       fs-extra: 9.1.0
     transitivePeerDependencies:
@@ -8286,6 +8350,16 @@ packages:
       merge2: 1.4.1
       micromatch: 4.0.5
 
+  /fast-glob@3.3.2:
+    resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+    engines: {node: '>=8.6.0'}
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      '@nodelib/fs.walk': 1.2.8
+      glob-parent: 5.1.2
+      merge2: 1.4.1
+      micromatch: 4.0.5
+
   /fast-json-stable-stringify@2.1.0:
     resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
 
@@ -8534,10 +8608,10 @@ 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.1
+      fast-glob: 3.3.2
       pkg-types: 1.0.3
       yaml: 2.3.4
     dev: true