diff --git a/Dockerfile b/Dockerfile index 407799f7f009a118da826e6b25c60b447f2443db..4141c396608fee4b74346ac2e62f4e83b7750d49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,16 +8,6 @@ WORKDIR ${APP_HOME} RUN corepack enable -# # libindy build -# FROM node:20-bullseye AS ssi-base - -# RUN apt-get update \ -# && apt-get install -y --no-install-recommends libsodium-dev libzmq3-dev -# RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain '1.58.0' -# RUN git clone https://github.com/hyperledger/indy-sdk -# RUN cd indy-sdk/libindy && ~/.cargo/bin/cargo build --release -# RUN cd indy-sdk/libindy && mv target/release/libindy.so /usr/lib/libindy.so - # Build FROM base AS build @@ -37,15 +27,6 @@ RUN pnpm --filter ${SERVICE} build:production RUN pnpm --filter ${SERVICE} --prod deploy build RUN pnpm --filter shared --prod deploy shared -# This is a way of keeping the generated prisma client in the build folder -RUN if [ -d ./apps/${SERVICE}/node_modules/\@prisma/client ]; then \ - GLOBAL_PRISMA_SETUP=`realpath ./apps/${SERVICE}/node_modules/\@prisma/client` \ - GLOBAL_PRISMA_CLIENT=`readlink -f ${GLOBAL_PRISMA_SETUP}/../../.prisma` \ - BUILD_PRISMA_SETUP=`realpath ./build/node_modules/\@prisma/client` \ - BUILD_PRISMA_CLIENT=`readlink -f ${BUILD_PRISMA_SETUP}/../..` \ - sh -c 'cp -r $GLOBAL_PRISMA_CLIENT $BUILD_PRISMA_CLIENT'; \ - fi - # Final FROM node:20 AS final @@ -69,4 +50,4 @@ RUN node -e "\ fs.writeFileSync('./package.json', JSON.stringify({ name, version, type }, null, 2));\ " -# USER node +USER node diff --git a/README.md b/README.md index 91735ec6ceb0bd7113538711791a4d9e87a3ba1b..c23a622fff857d530017fb183e8328aadc289163 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,53 @@ -# ocm-engine version 1 +# Organizational Credential Manager (v2) -#### Dependencies +## Overview -Node 12 -Python 2.5.0 >= <3.0.0 -pnpm +OCM (Organizational Credential Manager) is a Node.js-based microservice system designed to manage organizational credentials. -### Setup local +## Prerequisites -1. pnpm install -2. pnpm prisma:generate -3. pnpm /app/:build +* Node.js (version 20 or later) +* pnpm +* Docker and Docker Compose for local development -app options: attestation, connection, principal, ssi +## Installation -### Docker compose +1. Clone the repository: -1. Go to compose dir + ```bash + git clone https://gitlab.eclipse.org/eclipse/xfsc/ocm/ocm-engine.git + ``` -2. docker-compose up +2. Navigate to the repository directory: + + ```bash + cd ocm-engine + ``` + +3. Install dependencies: + + ```bash + pnpm i + ``` + +4. Start the services locally: + + ```bash + pnpm -F ssi-abstraction start + pnpm -F connection-manager start + ... + ``` + +5. Or start the whole stack in Docker Compose: + + ```bash + docker compose up -d + ``` ## Example Flows (OCM Usage) Please refer to [OCM-flow-overview](documentation/ocm-flow-overview.md) + +## License + +This project is licensed under the [Apache 2.0 License](LICENSE) diff --git a/apps/connection-manager/src/connections/connections.service.ts b/apps/connection-manager/src/connections/connections.service.ts index 4d969e794d2822d8c2e8bc288191ec5b654a763d..a5647cacab3606c881151ef2e0e10b39be552102 100644 --- a/apps/connection-manager/src/connections/connections.service.ts +++ b/apps/connection-manager/src/connections/connections.service.ts @@ -27,10 +27,10 @@ export class ConnectionsService { tenantId: string, ): Observable<EventDidcommConnectionsGetAll['data']> { return this.natsClient - .send<EventDidcommConnectionsGetAll, EventDidcommConnectionsGetAllInput>( - EventDidcommConnectionsGetAll.token, - { tenantId }, - ) + .send< + EventDidcommConnectionsGetAll, + EventDidcommConnectionsGetAllInput + >(EventDidcommConnectionsGetAll.token, { tenantId }) .pipe(map((result) => result.data)); } @@ -62,10 +62,10 @@ export class ConnectionsService { idOrDid: string, ): Observable<EventDidcommConnectionsBlock['data']> { return this.natsClient - .send<EventDidcommConnectionsBlock, EventDidcommConnectionsBlockInput>( - EventDidcommConnectionsBlock.token, - { tenantId, idOrDid }, - ) + .send< + EventDidcommConnectionsBlock, + EventDidcommConnectionsBlockInput + >(EventDidcommConnectionsBlock.token, { tenantId, idOrDid }) .pipe(map((result) => result.data)); } } diff --git a/apps/schema-manager/src/schemas/schemas.service.ts b/apps/schema-manager/src/schemas/schemas.service.ts index b6fd0cbd9f85ee084e437ef80f845012ac125dc2..eefa949877eb028731de4779d62249f264b144bd 100644 --- a/apps/schema-manager/src/schemas/schemas.service.ts +++ b/apps/schema-manager/src/schemas/schemas.service.ts @@ -25,10 +25,10 @@ export class SchemasService { tenantId: string, ): Observable<EventAnonCredsSchemasGetAll['data']> { return this.natsClient - .send<EventAnonCredsSchemasGetAll, EventAnonCredsSchemasGetAllInput>( - EventAnonCredsSchemasGetAll.token, - { tenantId }, - ) + .send< + EventAnonCredsSchemasGetAll, + EventAnonCredsSchemasGetAllInput + >(EventAnonCredsSchemasGetAll.token, { tenantId }) .pipe(map((result) => result.data)); } @@ -37,10 +37,10 @@ export class SchemasService { schemaId: EventAnonCredsSchemasGetByIdInput['schemaId'], ): Observable<EventAnonCredsSchemasGetById['data']> { return this.natsClient - .send<EventAnonCredsSchemasGetById, EventAnonCredsSchemasGetByIdInput>( - EventAnonCredsSchemasGetById.token, - { tenantId, schemaId }, - ) + .send< + EventAnonCredsSchemasGetById, + EventAnonCredsSchemasGetByIdInput + >(EventAnonCredsSchemasGetById.token, { tenantId, schemaId }) .pipe(map((result) => result.data)); } @@ -49,10 +49,10 @@ export class SchemasService { payload: Omit<EventAnonCredsSchemasRegisterInput, 'tenantId'>, ): Observable<EventAnonCredsSchemasRegister['data']> { return this.natsClient - .send<EventAnonCredsSchemasRegister, EventAnonCredsSchemasRegisterInput>( - EventAnonCredsSchemasRegister.token, - { ...payload, tenantId }, - ) + .send< + EventAnonCredsSchemasRegister, + EventAnonCredsSchemasRegisterInput + >(EventAnonCredsSchemasRegister.token, { ...payload, tenantId }) .pipe(map((result) => result.data)); } } diff --git a/compose/docker-compose.yml b/docker-compose.yml similarity index 52% rename from compose/docker-compose.yml rename to docker-compose.yml index 15419c89121cbe4b31bedf86a4d3c59a4342f5cd..e3025bbd7a8744f72cd23d19068b0b510fa66777 100644 --- a/compose/docker-compose.yml +++ b/docker-compose.yml @@ -1,104 +1,97 @@ version: '3.9' services: - connection-manager: - build: - context: .. - args: - - SERVICE=connection-manager - init: true + nats: + image: nats ports: - - '3003:3003' - depends_on: - - db - - nats - - ssi + - '4222:4222' #Nats server port + - '8222:8222' #Nats server Monitoring port - credential-manager: + ssi: build: - context: .. args: - - SERVICE=credential-manager + - SERVICE=ssi-abstraction init: true ports: - - '3011:3011' + - '3009:3009' + - '3010:3010' + - '4000:4000' + environment: + NATS_URL: nats://nats:4222 + PORT: 3009 + AGENT_NAME: ssi-abstraction-agent + AGENT_WALLET_ID: ssi-wallet-id + AGENT_WALLET_KEY: ssi-wallet-key + AGENT_HOST: http://ssi + AGENT_PUBLIC_DID_SEED: 6b8b882e2618fa5d45ee7229ca000000 + AGENT_AUTO_ACCEPT_CONNECTION: true + AGENT_AUTO_ACCEPT_CREDENTIAL: contentApproved + AGENT_LEDGER_ID: BCOVRIN_TEST depends_on: - - db - nats - - ssi schema-manager: build: - context: .. args: - SERVICE=schema-manager init: true + environment: + - HTTP_PORT=3000 + - NATS_URL=nats://nats:4222 + - NATS_MONITORING_URL=http://nats:8222 + - SSI_AGENT_URL=http://ssi:3009 ports: - - '3013:3013' + - '4001:3000' depends_on: - - db - nats - ssi - proof-manager: + connection-manager: build: - context: .. args: - - SERVICE=proof-manager + - SERVICE=connection-manager init: true + environment: + - HTTP_PORT=3000 + - NATS_URL=nats://nats:4222 + - NATS_MONITORING_URL=http://nats:8222 + - SSI_AGENT_URL=http://ssi:3009 ports: - - '3007:3007' + - '4002:3000' depends_on: - - db - nats - ssi - ssi: + credential-manager: build: - context: .. args: - - SERVICE=ssi-abstraction + - SERVICE=credential-manager init: true - ports: - - '3009:3009' - - '3010:3010' - - '4000:4000' environment: - NATS_URL: nats://nats:4222 - PORT: 3009 - AGENT_NAME: ssi-abstraction-agent - AGENT_WALLET_ID: ssi-wallet-id - AGENT_WALLET_KEY: ssi-wallet-key - AGENT_HOST: http://localhost - AGENT_PUBLIC_DID_SEED: 6b8b882e2618fa5d45ee7229ca000000 - AGENT_AUTO_ACCEPT_CONNECTION: true - AGENT_AUTO_ACCEPT_CREDENTIAL: contentApproved - AGENT_LEDGER_ID: BCOVRIN_TEST + - HTTP_HOST=0.0.0.0 + - HTTP_PORT=3000 + - NATS_URL=nats://nats:4222 + - NATS_MONITORING_URL=http://nats:8222 + - SSI_AGENT_URL=http://ssi:3009 + ports: + - '4003:3000' depends_on: - - db - nats + - ssi - db: - image: postgres:16 - volumes: - - db-data:/var/lib/postgresql/data - ports: - - 5432:5432 - healthcheck: - test: ['CMD', 'pg_isready', '-q', '-d', 'postgres', '-U', 'root'] - timeout: 45s - interval: 10s - retries: 10 - restart: always - environment: - - POSTGRES_USER=root - - POSTGRES_PASSWORD=password - - nats: - image: nats - ports: - - '4222:4222' #Nats server port - - '8222:8222' #Nats server Monitering port - -volumes: - db-data: + # proof-manager: + # build: + # args: + # - SERVICE=proof-manager + # init: true + # environment: + # - HTTP_HOST=0.0.0.0 + # - HTTP_PORT=3000 + # - NATS_URL=nats://nats:4222 + # - NATS_MONITORING_URL=http://nats:8222 + # - SSI_AGENT_URL=http://ssi:3000 + # ports: + # - '4004:3000' + # depends_on: + # - nats + # - ssi