From 3186abb0bcbfddd2075cd920eb88b0804bf8f53d Mon Sep 17 00:00:00 2001 From: Carlos Amaro Date: Fri, 17 Jan 2025 15:06:53 +0000 Subject: [PATCH] fix(satp-hermes): update docker image for the new logging implementation to database and postgres test case Signed-off-by: Carlos Amaro --- .../docker-compose.yml | 15 -- .../cactus-plugin-satp-hermes/package.json | 17 +- .../satp-hermes-gateway.Dockerfile | 5 +- .../validateKnexRepositoryConfig.ts | 126 +++++++++++ .../validateSatpEnableCrashRecovery.ts | 14 ++ .../client/stage0-client-service.ts | 3 - .../client/stage1-client-service.ts | 2 - .../server/stage0-server-service.ts | 3 - .../server/stage1-server-service.ts | 2 - .../server/stage2-server-service.ts | 2 - .../server/stage3-server-service.ts | 3 - .../src/main/typescript/core/types.ts | 2 +- .../src/main/typescript/knex/knexfile.ts | 16 -- .../20220331132128_create_logs_table.ts | 2 +- .../src/main/typescript/logging.ts | 3 +- .../plugin-satp-hermes-gateway-cli.ts | 24 +++ .../typescript/plugin-satp-hermes-gateway.ts | 21 +- .../repository/knex-local-log-repository.ts | 4 +- .../repository/knex-remote-log-repository.ts | 4 +- .../recovery/recovery-stage-1.test.ts | 4 +- .../recovery/recovery-stage-2.test.ts | 4 +- .../recovery/recovery-stage-3.test.ts | 4 +- .../rollback/rollback-stage-0.test.ts | 4 +- .../rollback/rollback-stage-1.test.ts | 4 +- .../rollback/rollback-stage-2.test.ts | 4 +- .../rollback/rollback-stage-3.test.ts | 4 +- ...e-transfer-1-gateway-dockerization.test.ts | 50 ++++- ...e2e-transfer-1-gateway-with-bungee.test.ts | 2 +- .../satp-e2e-transfer-1-gateway.test.ts | 2 +- ...-transfer-2-gateways-dockerization.test.ts | 12 +- ...tp-e2e-transfer-2-gateways-openapi.test.ts | 2 +- .../satp-e2e-transfer-2-gateways.test.ts | 2 +- ...-end-transfer-1-gateway-api-server.test.ts | 2 +- .../src/test/typescript/knex.config.ts | 20 +- .../src/test/typescript/test-utils.ts | 139 ++++++++++++ .../SATPGatewayRunner-instantiation.test.ts | 2 +- .../unit/crash-management/cron-job.test.ts | 3 +- .../unit/crash-management/scenarios.test.ts | 3 +- .../satp-runner/satp-gateway-runner.ts | 9 +- yarn.lock | 202 ++---------------- 40 files changed, 450 insertions(+), 296 deletions(-) create mode 100644 packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateKnexRepositoryConfig.ts create mode 100644 packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateSatpEnableCrashRecovery.ts diff --git a/packages/cactus-plugin-satp-hermes/docker-compose.yml b/packages/cactus-plugin-satp-hermes/docker-compose.yml index f3d25c4350..75cc6307e4 100644 --- a/packages/cactus-plugin-satp-hermes/docker-compose.yml +++ b/packages/cactus-plugin-satp-hermes/docker-compose.yml @@ -9,18 +9,3 @@ services: - 3010:3010/tcp # SERVER_PORT - 3011:3011/tcp # CLIENT_PORT - 4010:4010/tcp # API_PORT - db: - image: postgres:13 - environment: - POSTGRES_DB: ${DB_NAME} - POSTGRES_USER: ${DB_USER} - POSTGRES_PASSWORD: ${DB_PASSWORD} - POSTGRES_HOST: ${DB_HOST} - PGPORT: ${DB_PORT} - ports: - - "${DB_PORT}:5432" - volumes: - - pgdata:/var/lib/postgresql/data - -volumes: - pgdata: \ No newline at end of file diff --git a/packages/cactus-plugin-satp-hermes/package.json b/packages/cactus-plugin-satp-hermes/package.json index 5ad22a7ec9..ade3bdc66d 100644 --- a/packages/cactus-plugin-satp-hermes/package.json +++ b/packages/cactus-plugin-satp-hermes/package.json @@ -56,7 +56,7 @@ "build:bundle": "ncc build ./dist/lib/main/typescript/plugin-satp-hermes-gateway-cli.js --minify --out=./dist/bundle/ncc/ --external=fabric-common", "build": "run-s codegen tsc", "build-proto": "buf build --path src/main/proto --verbose", - "build:dev:backend:postbuild": "mkdir -p ./dist/lib/knex && cp -r ./src/knex/* ./dist/lib/knex", + "build:dev:backend:postbuild": "", "bundle-openapi-json": "swagger-cli bundle ./src/main/yml/bol/openapi-blo.yml -o ./src/main/json/openapi-blo-bundled.json -r -t json", "bundle-openapi-yaml": "swagger-cli bundle ./src/main/yml/bol/openapi-blo.yml -o ./src/main/yml/bol/openapi-blo-bundled.yml -r -t yaml", "codegen": "run-p 'codegen:*'", @@ -95,7 +95,13 @@ "db:migrate": "knex migrate:latest --knexfile src/knex/knexfile.js", "db:migrate:production": "knex migrate:latest --env production --knexfile src/knex/knexfile.ts", "db:seed": "knex seed:run --knexfile src/knex/knexfile.ts", - "db:cleanup": "find src/knex/ -name '.dev.local-*.sqlite3' -delete" + "db:cleanup": "find src/knex/ -name '.dev.local-*.sqlite3' -delete", + "docker:build:stable": "docker build --file ./satp-hermes-gateway.Dockerfile ./ --tag hyperledger/cacti-satp-hermes-gateway:$(node -e \"console.log(require('./package.json').version)\")", + "docker:build:dev": "docker build --file ./satp-hermes-gateway.Dockerfile ./ --tag hyperledger/cacti-satp-hermes-gateway:$(git rev-parse --short HEAD)-$(date +\"%Y-%m-%d\")", + "docker:build:latest": "docker build --file ./satp-hermes-gateway.Dockerfile ./ --tag hyperledger/cacti-satp-hermes-gateway:latest", + "docker:run:stable": "docker run -it hyperledger/cacti-satp-hermes-gateway:$(node -e \"console.log(require('./package.json').version)\")", + "docker:run:dev": "docker run -it hyperledger/cacti-satp-hermes-gateway:$(git rev-parse --short HEAD)-$(date +\"%Y-%m-%d\")", + "docker:compose": "docker compose --project-directory ./ -f ./docker-compose.yml up --build" }, "jest": { "moduleNameMapper": { @@ -131,6 +137,7 @@ "class-validator": "0.14.1", "cors": "2.8.5", "crypto-js": "4.2.0", + "dockerode": "3.3.0", "dotenv": "16.4.5", "ethereum-abi-types-generator": "1.3.4", "ethers": "6.13.1", @@ -143,6 +150,7 @@ "knex": "2.4.0", "kubo-rpc-client": "3.0.1", "node-schedule": "2.1.1", + "node-ssh": "^13.2.0", "npm-run-all": "4.1.5", "openzeppelin-solidity": "3.4.2", "pg": "8.13.1", @@ -161,11 +169,12 @@ "@bufbuild/buf": "^1.47.2", "@bufbuild/protoc-gen-es": "2.2.2", "@grpc/proto-loader": "0.7.13", - "@hyperledger/cactus-api-client": "2.0.0", - "@hyperledger/cactus-test-geth-ledger": "2.0.0-rc.7", + "@hyperledger/cactus-api-client": "2.1.0", + "@hyperledger/cactus-test-geth-ledger": "2.1.0", "@quobix/vacuum": "0.9.16", "@types/body-parser": "1.19.4", "@types/crypto-js": "4.0.1", + "@types/dockerode": "3.2.7", "@types/express": "5.0.0", "@types/fs-extra": "11.0.4", "@types/google-protobuf": "3.15.12", diff --git a/packages/cactus-plugin-satp-hermes/satp-hermes-gateway.Dockerfile b/packages/cactus-plugin-satp-hermes/satp-hermes-gateway.Dockerfile index 74597c61b6..3f88af1201 100644 --- a/packages/cactus-plugin-satp-hermes/satp-hermes-gateway.Dockerfile +++ b/packages/cactus-plugin-satp-hermes/satp-hermes-gateway.Dockerfile @@ -7,12 +7,13 @@ RUN apt-get remove -y --allow-remove-essential perl perl-base && apt-get autorem ARG APP_DIR=/opt/cacti/satp-hermes WORKDIR ${APP_DIR} -RUN mkdir -p /opt/cacti/satp-hermes/log/ +RUN mkdir -p ${APP_DIR}/log/ COPY ./dist/bundle/ncc/ ${APP_DIR} COPY ./satp-hermes-gateway.Dockerfile.healthcheck.mjs ${APP_DIR} COPY ./gateway-config.json /gateway-config.json -COPY ./src/knex/ ${APP_DIR}/src/knex/ + +COPY ./dist/lib/main/typescript/knex/migrations/*.js ${APP_DIR}/migrations/ COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY ./supervisord.conf /etc/supervisord.conf diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateKnexRepositoryConfig.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateKnexRepositoryConfig.ts new file mode 100644 index 0000000000..5a0fe0fa6b --- /dev/null +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateKnexRepositoryConfig.ts @@ -0,0 +1,126 @@ +import { Knex } from "knex"; + +export function validateKnexRepositoryConfig(opts: { + readonly configValue: unknown; +}): Knex.Config | undefined { + if (!opts || !opts.configValue) { + return undefined; + } + + if (opts.configValue === null) { + return undefined; + } + + if (typeof opts.configValue !== "object") { + throw new Error( + `Configuration must be an object: ${JSON.stringify(opts.configValue)}`, + ); + } + + const config = opts.configValue as Knex.Config; + + // Validate 'client' property + if (!config.client || typeof config.client !== "string") { + throw new Error( + `Invalid or missing 'client' property: ${JSON.stringify(config)}`, + ); + } + + // Validate 'connection' property + if (!config.connection) { + throw new Error(`Missing 'connection' property: ${JSON.stringify(config)}`); + } + + if (typeof config.connection === "string") { + // If connection is a string, ensure it's not empty + if (config.connection.trim() === "") { + throw new Error( + `Connection string cannot be empty: ${JSON.stringify(config)}`, + ); + } + } else if (typeof config.connection === "object") { + // Validate connection object based on client type + const connection = config.connection as any; + + switch (config.client) { + case "sqlite3": + if (!connection.filename || typeof connection.filename !== "string") { + throw new Error( + `Invalid or missing 'connection.filename' for sqlite3: ${JSON.stringify(config)}`, + ); + } + break; + case "mysql": + case "mysql2": + case "pg": + case "oracledb": + case "mssql": + if (!connection.host || typeof connection.host !== "string") { + throw new Error( + `Invalid or missing 'connection.host': ${JSON.stringify(config)}`, + ); + } + if (!connection.user || typeof connection.user !== "string") { + throw new Error( + `Invalid or missing 'connection.user': ${JSON.stringify(config)}`, + ); + } + if (!connection.password || typeof connection.password !== "string") { + throw new Error( + `Invalid 'connection.password': ${JSON.stringify(config)}`, + ); + } + if (!connection.database || typeof connection.database !== "string") { + throw new Error( + `Invalid or missing 'connection.database': ${JSON.stringify(config)}`, + ); + } + break; + default: + throw new Error(`Unsupported client type: ${config.client}`); + } + } else { + // Connection is neither a string nor an object + throw new Error(`Invalid 'connection' property: ${JSON.stringify(config)}`); + } + + // Validate 'migrations' property if present + if (config.migrations !== undefined) { + if (typeof config.migrations !== "object" || config.migrations === null) { + throw new Error( + `Invalid 'migrations' property: ${JSON.stringify(config)}`, + ); + } else { + if ( + config.migrations.directory !== undefined && + typeof config.migrations.directory !== "string" + ) { + throw new Error( + `Invalid 'migrations.directory' property: ${JSON.stringify(config)}`, + ); + } + if ( + config.migrations.tableName !== undefined && + typeof config.migrations.tableName !== "string" + ) { + throw new Error( + `Invalid 'migrations.tableName' property: ${JSON.stringify(config)}`, + ); + } + } + } + + // Validate 'useNullAsDefault' property if present + if ( + config.useNullAsDefault !== undefined && + typeof config.useNullAsDefault !== "boolean" + ) { + throw new Error( + `Invalid 'useNullAsDefault' property; it must be a boolean: ${JSON.stringify(config)}`, + ); + } + + // Additional validation can be added here as needed + + return config; +} diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateSatpEnableCrashRecovery.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateSatpEnableCrashRecovery.ts new file mode 100644 index 0000000000..5c0841852f --- /dev/null +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/config-validating-functions/validateSatpEnableCrashRecovery.ts @@ -0,0 +1,14 @@ +export function validateSatpEnableCrashRecovery(opts: { + readonly configValue: unknown; +}): boolean { + if (!opts || opts.configValue === undefined) { + return false; + } + + if (typeof opts.configValue !== "boolean") { + throw new TypeError( + `Invalid config.enableCrashRecovery: ${opts.configValue}. Expected a boolean`, + ); + } + return opts.configValue; +} diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage0-client-service.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage0-client-service.ts index 495b0078b5..e7d400b42b 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage0-client-service.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage0-client-service.ts @@ -89,7 +89,6 @@ export class Stage0ClientService extends SATPService { session.verify(fnTag, SessionType.CLIENT); const sessionData = session.getClientSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -266,7 +265,6 @@ export class Stage0ClientService extends SATPService { session.verify(fnTag, SessionType.CLIENT); const sessionData = session.getClientSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -378,7 +376,6 @@ export class Stage0ClientService extends SATPService { session.verify(fnTag, SessionType.CLIENT); const sessionData = session.getClientSessionData(); - this.Log.info(`init-${stepTag}`); this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: "wrap-token-client", diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage1-client-service.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage1-client-service.ts index 68a34a7d88..1383589948 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage1-client-service.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/client/stage1-client-service.ts @@ -77,7 +77,6 @@ export class Stage1ClientService extends SATPService { const sessionData = session.getClientSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -262,7 +261,6 @@ export class Stage1ClientService extends SATPService { const sessionData = session.getClientSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage0-server-service.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage0-server-service.ts index c8e5993792..f7ba3b7353 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage0-server-service.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage0-server-service.ts @@ -292,7 +292,6 @@ export class Stage0ServerService extends SATPService { } const sessionData = session.getServerSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -429,7 +428,6 @@ export class Stage0ServerService extends SATPService { const sessionData = session.getServerSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -514,7 +512,6 @@ export class Stage0ServerService extends SATPService { } const sessionData = session.getServerSessionData(); - this.Log.info(`init-${stepTag}`); this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: "wrap-token-server", diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage1-server-service.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage1-server-service.ts index 51f0a557a3..4afdd70f7a 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage1-server-service.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage1-server-service.ts @@ -86,7 +86,6 @@ export class Stage1ServerService extends SATPService { const sessionData = session.getServerSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -259,7 +258,6 @@ export class Stage1ServerService extends SATPService { session.verify(fnTag, SessionType.SERVER); const sessionData = session.getServerSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage2-server-service.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage2-server-service.ts index f0ca1f8785..f6b4fdc13a 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage2-server-service.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage2-server-service.ts @@ -66,7 +66,6 @@ export class Stage2ServerService extends SATPService { session.verify(fnTag, SessionType.SERVER); const sessionData = session.getServerSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -75,7 +74,6 @@ export class Stage2ServerService extends SATPService { sequenceNumber: Number(sessionData.lastSequenceNumber), }); try { - this.Log.info(`exec-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage3-server-service.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage3-server-service.ts index b9ad9a2b7c..d07fc3e12d 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage3-server-service.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/stage-services/server/stage3-server-service.ts @@ -94,7 +94,6 @@ export class Stage3ServerService extends SATPService { session.verify(fnTag, SessionType.SERVER); const sessionData = session.getServerSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -228,7 +227,6 @@ export class Stage3ServerService extends SATPService { const sessionData = session.getServerSessionData(); - this.Log.info(`init-${messageType}`); await this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: messageType, @@ -745,7 +743,6 @@ export class Stage3ServerService extends SATPService { session.verify(fnTag, SessionType.SERVER); const sessionData = session.getServerSessionData(); - this.Log.info(`init-${stepTag}`); this.dbLogger.persistLogEntry({ sessionID: sessionData.id, type: "assign-asset", diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/types.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/types.ts index 1ac7e06b7f..9e9d9c8e87 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/core/types.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/core/types.ts @@ -84,7 +84,7 @@ export interface SATPGatewayConfig { bridgesConfig?: NetworkConfig[]; knexLocalConfig?: Knex.Config; knexRemoteConfig?: Knex.Config; - enableCrashManager?: boolean; + enableCrashRecovery?: boolean; } // export interface SATPBridgeConfig { diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/knexfile.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/knexfile.ts index d7e42cab1f..e41c799a54 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/knexfile.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/knexfile.ts @@ -15,22 +15,6 @@ export const knexLocalInstance: { [key: string]: Knex.Config } = { migrations: { directory: path.resolve(__dirname, "migrations"), }, - seeds: { - directory: path.resolve(__dirname, "seeds"), - }, useNullAsDefault: true, }, - production: { - client: "pg", - connection: { - host: process.env.DB_HOST, - port: Number(process.env.DB_PORT), - user: process.env.DB_USER, - password: process.env.DB_PASSWORD, - database: process.env.DB_NAME, - }, - migrations: { - directory: path.resolve(__dirname, "migrations"), - }, - }, }; diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations/20220331132128_create_logs_table.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations/20220331132128_create_logs_table.ts index 336b358e68..8e3863f806 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations/20220331132128_create_logs_table.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations/20220331132128_create_logs_table.ts @@ -7,7 +7,7 @@ export function up(knex: Knex): Knex.SchemaBuilder { table.string("key").notNullable().primary(); table.string("operation").notNullable(); table.string("timestamp").notNullable(); - table.string("data").notNullable(); + table.text("data").notNullable(); table.bigInteger("sequenceNumber").notNullable(); }); } diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/logging.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/logging.ts index 3b21dae76d..10a7b980c0 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/logging.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/logging.ts @@ -140,10 +140,11 @@ export class SATPLogger { this.log.info(`${fnTag} - Storing log entry with key: ${localLog.key}`); if (this.defaultRepository && !this.localRepository.getCreated()) { - this.log.debug( + this.log.info( `${fnTag} - Default configuration detected. Creating local repository.`, ); await this.localRepository.createKnex(); + this.log.info(`${fnTag} - Local repository created.`); } await this.localRepository.create(localLog); diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway-cli.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway-cli.ts index 5f02d4d2ae..e71c1cf9e4 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway-cli.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway-cli.ts @@ -15,6 +15,8 @@ import { validateSatpMergePolicies } from "./config-validating-functions/validat import { validateSatpKeyPairJSON } from "./config-validating-functions/validateKeyPairJSON"; import { validateSatpBridgesConfig } from "./config-validating-functions/validateSatpBridgesConfig"; import path from "path"; +import { validateSatpEnableCrashRecovery } from "./config-validating-functions/validateSatpEnableCrashRecovery"; +import { validateKnexRepositoryConfig } from "./config-validating-functions/validateKnexRepositoryConfig"; export async function launchGateway(): Promise { const logger = LoggerProvider.getOrCreate({ @@ -113,6 +115,25 @@ export async function launchGateway(): Promise { const bridgesConfig = validateSatpBridgesConfig({ configValue: config.bridgesConfig, }); + + logger.debug("Validating Local Repository Config..."); + const localRepository = validateKnexRepositoryConfig({ + configValue: config.localRepository, + }); + logger.debug("Local Repository Config is valid."); + + logger.debug("Validating Remote Repository Config..."); + const remoteRepository = validateKnexRepositoryConfig({ + configValue: config.remoteRepository, + }); + logger.debug("Remote Repository Config is valid."); + + logger.debug("Validating SATP Enable Crash Recovery..."); + const enableCrashRecovery = validateSatpEnableCrashRecovery({ + configValue: config.enableCrashRecovery, + }); + logger.debug("SATP Enable Crash Recovery is valid."); + logger.debug("SATP Bridges Config is valid."); logger.debug("Creating SATPGatewayConfig..."); @@ -133,6 +154,9 @@ export async function launchGateway(): Promise { privacyPolicies, mergePolicies, bridgesConfig, + enableCrashRecovery, + knexLocalConfig: localRepository, + knexRemoteConfig: remoteRepository, }; logger.debug("SATPGatewayConfig created successfully"); diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway.ts index 401ac1eacf..e29ab61c8b 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/plugin-satp-hermes-gateway.ts @@ -64,7 +64,7 @@ import { import cors from "cors"; import * as OAS from "../json/openapi-blo-bundled.json"; -import { knexLocalInstance } from "../../knex/knexfile"; +import { knexLocalInstance } from "./knex/knexfile"; export class SATPGateway implements IPluginWebService, ICactusPlugin { // todo more checks; example port from config is between 3000 and 9000 @@ -119,21 +119,22 @@ export class SATPGateway implements IPluginWebService, ICactusPlugin { this.logger = LoggerProvider.getOrCreate(logOptions); this.logger.info("Initializing Gateway Coordinator"); - if (this.config.knexLocalConfig) { + if (!!this.config.knexLocalConfig) { this.defaultRepository = false; this.localRepository = new LocalLogRepository( this.config.knexLocalConfig, ); } else { + this.logger.info("Local repository is not defined"); this.localRepository = new LocalLogRepository(knexLocalInstance.default); } - if (this.config.knexRemoteConfig) { + if (!!this.config.knexRemoteConfig) { this.remoteRepository = new RemoteLogRepository( this.config.knexRemoteConfig, ); } else { - this.logger.warn("Remote repository is not defined"); + this.logger.info("Remote repository is not defined"); } if (this.config.keyPair == undefined) { @@ -155,7 +156,7 @@ export class SATPGateway implements IPluginWebService, ICactusPlugin { localGateway: this.config.gid!, counterPartyGateways: this.config.counterPartyGateways, signer: this.signer!, - enableCrashRecovery: this.config.enableCrashManager, + enableCrashRecovery: this.config.enableCrashRecovery, }; const bridgesManagerOptions: ISATPBridgesOptions = { @@ -206,7 +207,7 @@ export class SATPGateway implements IPluginWebService, ICactusPlugin { this.OAS = OAS; - if (this.config.enableCrashManager) { + if (this.config.enableCrashRecovery) { const crashOptions: ICrashRecoveryManagerOptions = { instanceId: this.instanceId, logLevel: this.config.logLevel, @@ -424,8 +425,8 @@ export class SATPGateway implements IPluginWebService, ICactusPlugin { pluginOptions.bridgesConfig = []; } - if (!pluginOptions.enableCrashManager) { - pluginOptions.enableCrashManager = false; + if (!pluginOptions.enableCrashRecovery) { + pluginOptions.enableCrashRecovery = false; } return pluginOptions; @@ -441,9 +442,7 @@ export class SATPGateway implements IPluginWebService, ICactusPlugin { const fnTag = `${this.className}#startup()`; this.logger.trace(`Entering ${fnTag}`); - await Promise.all([this.startupBLOServer()]); - - await Promise.all([this.startupGOLServer()]); + await Promise.all([this.startupBLOServer(), this.startupGOLServer()]); } protected async startupBLOServer(): Promise { diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-local-log-repository.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-local-log-repository.ts index 3314a4594e..1f2edde1b9 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-local-log-repository.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-local-log-repository.ts @@ -2,7 +2,7 @@ import { LocalLog } from "../core/types"; import { ILocalLogRepository } from "./interfaces/repository"; import knex, { Knex } from "knex"; -import knexFile from "../knex/knexfile"; +import { knexLocalInstance } from "../knex/knexfile"; export class KnexLocalLogRepository implements ILocalLogRepository { readonly database: Knex; @@ -10,7 +10,7 @@ export class KnexLocalLogRepository implements ILocalLogRepository { public constructor(config: Knex.Config | undefined) { const envName = process.env.ENVIRONMENT || "development"; - const configFile = knexFile[envName]; + const configFile = knexLocalInstance[envName]; this.database = knex(config || configFile); } diff --git a/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-remote-log-repository.ts b/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-remote-log-repository.ts index 99a5f42f89..e7d9b1acc9 100644 --- a/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-remote-log-repository.ts +++ b/packages/cactus-plugin-satp-hermes/src/main/typescript/repository/knex-remote-log-repository.ts @@ -2,7 +2,7 @@ import { IRemoteLogRepository } from "./interfaces/repository"; import { RemoteLog } from "../core/types"; import knex, { Knex } from "knex"; -import knexFileRemote from "../knex/knexfile-remote"; +import { knexRemoteInstance } from "../knex/knexfile-remote"; export class KnexRemoteLogRepository implements IRemoteLogRepository { readonly database: Knex; @@ -12,7 +12,7 @@ export class KnexRemoteLogRepository implements IRemoteLogRepository { // simulating a remote log storage public constructor(config: Knex.Config | undefined) { const envName = process.env.ENVIRONMENT || "development"; - const configFile = knexFileRemote[envName]; + const configFile = knexRemoteInstance[envName]; this.database = knex(config || configFile); } diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-1.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-1.test.ts index 24c7f13a13..4bdcce0ea3 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-1.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-1.test.ts @@ -238,7 +238,7 @@ beforeAll(async () => { keyPair: gateway1KeyPair, knexLocalConfig: knexClientConnection, knexRemoteConfig: knexSourceRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; knexInstanceServer = knex(knexServerConnection); @@ -254,7 +254,7 @@ beforeAll(async () => { keyPair: gateway2KeyPair, knexLocalConfig: knexServerConnection, knexRemoteConfig: knexTargetRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; gateway1 = (await factory.create(options1)) as SATPGateway; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-2.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-2.test.ts index 087ebc96b4..3e049ff299 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-2.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-2.test.ts @@ -251,7 +251,7 @@ beforeAll(async () => { keyPair: gateway1KeyPair, knexLocalConfig: knexClientConnection, knexRemoteConfig: knexSourceRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; knexInstanceServer = knex(knexServerConnection); @@ -267,7 +267,7 @@ beforeAll(async () => { keyPair: gateway2KeyPair, knexLocalConfig: knexServerConnection, knexRemoteConfig: knexTargetRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; gateway1 = (await factory.create(options1)) as SATPGateway; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-3.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-3.test.ts index bedfac772e..9b056bb3f9 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-3.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/recovery/recovery-stage-3.test.ts @@ -266,7 +266,7 @@ beforeAll(async () => { keyPair: gateway1KeyPair, knexLocalConfig: knexClientConnection, knexRemoteConfig: knexSourceRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; knexInstanceServer = knex(knexServerConnection); @@ -282,7 +282,7 @@ beforeAll(async () => { keyPair: gateway2KeyPair, knexLocalConfig: knexServerConnection, knexRemoteConfig: knexTargetRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; gateway1 = (await factory.create(options1)) as SATPGateway; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-0.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-0.test.ts index 387aa410ca..6ac1b37beb 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-0.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-0.test.ts @@ -321,7 +321,7 @@ describe("Rollback Test stage 0", () => { bridgesConfig: [besuEnv.besuConfig], knexLocalConfig: knexClientConnection, knexRemoteConfig: knexSourceRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; knexInstanceServer = knex(knexServerConnection); @@ -338,7 +338,7 @@ describe("Rollback Test stage 0", () => { bridgesConfig: [fabricEnv.fabricConfig], knexLocalConfig: knexServerConnection, knexRemoteConfig: knexTargetRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; gateway1 = (await factory.create(options1)) as SATPGateway; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-1.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-1.test.ts index 4ade8bc049..98ef34c756 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-1.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-1.test.ts @@ -246,7 +246,7 @@ describe("Rollback Test stage 1", () => { keyPair: gateway1KeyPair, knexLocalConfig: knexClientConnection, knexRemoteConfig: knexSourceRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; knexInstanceServer = knex(knexServerConnection); @@ -262,7 +262,7 @@ describe("Rollback Test stage 1", () => { keyPair: gateway2KeyPair, knexLocalConfig: knexServerConnection, knexRemoteConfig: knexTargetRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; gateway1 = (await factory.create(options1)) as SATPGateway; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-2.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-2.test.ts index fd095e655b..acd546b8ba 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-2.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-2.test.ts @@ -320,7 +320,7 @@ describe("Rollback Test stage 2", () => { bridgesConfig: [besuEnv.besuConfig], knexLocalConfig: knexClientConnection, knexRemoteConfig: knexSourceRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; knexInstanceServer = knex(knexServerConnection); @@ -337,7 +337,7 @@ describe("Rollback Test stage 2", () => { bridgesConfig: [fabricEnv.fabricConfig], knexLocalConfig: knexServerConnection, knexRemoteConfig: knexTargetRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; gateway1 = (await factory.create(options1)) as SATPGateway; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-3.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-3.test.ts index 8ad273fe01..e7cffe51a7 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-3.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/rollback/rollback-stage-3.test.ts @@ -385,7 +385,7 @@ describe("Rollback Test stage 3", () => { bridgesConfig: [besuEnv.besuConfig], knexLocalConfig: knexClientConnection, knexRemoteConfig: knexSourceRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; knexInstanceServer = knex(knexServerConnection); @@ -402,7 +402,7 @@ describe("Rollback Test stage 3", () => { bridgesConfig: [fabricEnv.fabricConfig], knexLocalConfig: knexServerConnection, knexRemoteConfig: knexTargetRemoteConnection, - enableCrashManager: true, + enableCrashRecovery: true, }; gateway1 = (await factory.create(options1)) as SATPGateway; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-dockerization.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-dockerization.test.ts index 775ed633c9..bc79802d5f 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-dockerization.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-dockerization.test.ts @@ -24,6 +24,8 @@ import { FabricTestEnvironment, getTransactRequest, EthereumTestEnvironment, + createPGDatabase, + setupDBTable, } from "../test-utils"; import { DEFAULT_PORT_GATEWAY_API, @@ -35,11 +37,13 @@ import { } from "../../../main/typescript/core/constants"; import { ClaimFormat } from "../../../main/typescript/generated/proto/cacti/satp/v02/common/message_pb"; import { WHALE_ACCOUNT_ADDRESS } from "@hyperledger/cactus-test-geth-ledger"; +import { Container } from "dockerode"; +import { Knex } from "knex"; const logLevel: LogLevelDesc = "DEBUG"; const log = LoggerProvider.getOrCreate({ level: logLevel, - label: "BUNGEE - Hermes", + label: "SATP - Hermes", }); let besuEnv: BesuTestEnvironment; @@ -50,6 +54,11 @@ const contractNameWrapper = "SATPWrapperContract"; const bridge_id = "x509::/OU=org2/OU=client/OU=department1/CN=bridge::/C=UK/ST=Hampshire/L=Hursley/O=org2.example.com/CN=ca.org2.example.com"; +let db_local_config: Knex.Config; +let db_remote_config: Knex.Config; +let db_local: Container; +let db_remote: Container; + afterAll(async () => { await besuEnv.tearDown(); await ethereumEnv.tearDown(); @@ -75,6 +84,27 @@ beforeAll(async () => { fail("Pruning didn't throw OK"); }); + ({ config: db_local_config, container: db_local } = await createPGDatabase( + 5432, + "user123123", + "password", + )); + + console.log("eia pah"); + + ({ config: db_remote_config, container: db_remote } = await createPGDatabase( + 5450, + "user123123", + "password", + )); + + console.log("eia pah2"); + await setupDBTable(db_local_config); + console.log("eia pah3"); + console.log(db_remote_config); + await setupDBTable(db_remote_config); + console.log("eia pah4"); + { const satpContractName = "satp-contract"; fabricEnv = await FabricTestEnvironment.setupTestEnvironment( @@ -143,11 +173,14 @@ describe("SATPGateway sending a token from Besu to Fabric", () => { logLevel, [], //only knows itself [besuConfigJSON, fabricConfigJSON], + false, // Crash recovery disabled + db_local_config, + db_remote_config, ); // gatewayRunner setup: const gatewayRunnerOptions: ISATPGatewayRunnerConstructorOptions = { - containerImageVersion: "2024-10-30T19-54-20-dev-5e06263e0", + containerImageVersion: "latest", containerImageName: "ghcr.io/hyperledger/cacti-satp-hermes-gateway", logLevel, emitContainerLogs: true, @@ -269,6 +302,10 @@ describe("SATPGateway sending a token from Besu to Fabric", () => { await gatewayRunner.stop(); await gatewayRunner.destroy(); + await db_local.stop(); + await db_local.remove(); + await db_remote.stop(); + await db_remote.remove(); }); }); @@ -308,6 +345,9 @@ describe("SATPGateway sending a token from Ethereum to Fabric", () => { logLevel, [], //only knows itself [ethereumConfigJSON, fabricConfigJSON], + false, // Crash recovery disabled + db_local_config, + db_remote_config, ); let initialBalance; @@ -329,7 +369,7 @@ describe("SATPGateway sending a token from Ethereum to Fabric", () => { // gatewayRunner setup: const gatewayRunnerOptions: ISATPGatewayRunnerConstructorOptions = { containerImageVersion: "latest", - containerImageName: "satp-hermes-gateway", + containerImageName: "ghcr.io/hyperledger/cacti-satp-hermes-gateway", logLevel, emitContainerLogs: true, configFile: files.configFile, @@ -440,5 +480,9 @@ describe("SATPGateway sending a token from Ethereum to Fabric", () => { await gatewayRunner.stop(); await gatewayRunner.destroy(); + await db_local.stop(); + await db_local.remove(); + await db_remote.stop(); + await db_remote.remove(); }); }); diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-with-bungee.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-with-bungee.test.ts index fda73575f3..03f5ccc72c 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-with-bungee.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway-with-bungee.test.ts @@ -45,7 +45,7 @@ import { knex } from "knex"; const logLevel: LogLevelDesc = "DEBUG"; const log = LoggerProvider.getOrCreate({ level: logLevel, - label: "BUNGEE - Hermes", + label: "SATP - Hermes", }); let besuEnv: BesuTestEnvironment; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway.test.ts index aa041954dc..7cec260021 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-1-gateway.test.ts @@ -43,7 +43,7 @@ import { Knex, knex } from "knex"; const logLevel: LogLevelDesc = "DEBUG"; const log = LoggerProvider.getOrCreate({ level: logLevel, - label: "BUNGEE - Hermes", + label: "SATP - Hermes", }); let knexInstanceClient: Knex; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-dockerization.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-dockerization.test.ts index c3fbf21c83..bbb5bffcbc 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-dockerization.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-dockerization.test.ts @@ -42,7 +42,7 @@ import { bufArray2HexStr } from "../../../main/typescript/gateway-utils"; const logLevel: LogLevelDesc = "DEBUG"; const log = LoggerProvider.getOrCreate({ level: logLevel, - label: "BUNGEE - Hermes", + label: "SATP - Hermes", }); let fabricEnv: FabricTestEnvironment; @@ -180,6 +180,9 @@ describe("SATPGateway sending a token from Besu to Fabric", () => { }, ], [besuConfigJSON], + false, + undefined, + undefined, "gateway1", { privateKey: Buffer.from(gateway1KeyPair.privateKey).toString("hex"), @@ -213,6 +216,9 @@ describe("SATPGateway sending a token from Besu to Fabric", () => { }, ], [fabricConfigJSON], + false, + undefined, + undefined, "gateway2", { privateKey: Buffer.from(gateway2KeyPair.privateKey).toString("hex"), @@ -222,7 +228,7 @@ describe("SATPGateway sending a token from Besu to Fabric", () => { // gatewayRunner1 setup: const gatewayRunnerOptions1: ISATPGatewayRunnerConstructorOptions = { - containerImageVersion: "2024-10-30T19-54-20-dev-5e06263e0", + containerImageVersion: "latest", containerImageName: "ghcr.io/hyperledger/cacti-satp-hermes-gateway", logLevel, emitContainerLogs: true, @@ -236,7 +242,7 @@ describe("SATPGateway sending a token from Besu to Fabric", () => { // gatewayRunner2 setup: const gatewayRunnerOptions2: ISATPGatewayRunnerConstructorOptions = { - containerImageVersion: "2024-10-30T19-54-20-dev-5e06263e0", + containerImageVersion: "latest", containerImageName: "ghcr.io/hyperledger/cacti-satp-hermes-gateway", logLevel, emitContainerLogs: true, diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-openapi.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-openapi.test.ts index f3085f1bb8..d80c547156 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-openapi.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways-openapi.test.ts @@ -57,7 +57,7 @@ let knexInstanceServer: Knex; const logLevel: LogLevelDesc = "DEBUG"; const log = LoggerProvider.getOrCreate({ level: logLevel, - label: "BUNGEE - Hermes", + label: "SATP - Hermes", }); let fabricEnv: FabricTestEnvironment; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways.test.ts index 24fd8993d4..defbd3a799 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-e2e-transfer-2-gateways.test.ts @@ -51,7 +51,7 @@ import { Knex, knex } from "knex"; const logLevel: LogLevelDesc = "DEBUG"; const log = LoggerProvider.getOrCreate({ level: logLevel, - label: "BUNGEE - Hermes", + label: "SATP - Hermes", }); let knexInstanceClient: Knex; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-end-to-end-transfer-1-gateway-api-server.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-end-to-end-transfer-1-gateway-api-server.test.ts index 66da8720ab..36aa97de8a 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-end-to-end-transfer-1-gateway-api-server.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/integration/satp-end-to-end-transfer-1-gateway-api-server.test.ts @@ -85,7 +85,7 @@ import { const logLevel: LogLevelDesc = "DEBUG"; const log = LoggerProvider.getOrCreate({ level: logLevel, - label: "BUNGEE - Hermes", + label: "SATP - Hermes", }); let fabricServer: Server; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/knex.config.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/knex.config.ts index 57f2f705bd..70b198e588 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/knex.config.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/knex.config.ts @@ -4,12 +4,13 @@ export const knexClientConnection = { client: "sqlite3", connection: { filename: - "./packages/cactus-plugin-satp-hermes/src/knex/.dev.client-" + + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/.dev.client-" + uuidv4() + ".sqlite3", }, migrations: { - directory: "./packages/cactus-plugin-satp-hermes/src/knex/migrations", + directory: + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations", }, useNullAsDefault: true, }; @@ -18,12 +19,13 @@ export const knexServerConnection = { client: "sqlite3", connection: { filename: - "./packages/cactus-plugin-satp-hermes/src/knex/.dev.server-" + + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/.dev.server-" + uuidv4() + ".sqlite3", }, migrations: { - directory: "./packages/cactus-plugin-satp-hermes/src/knex/migrations", + directory: + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations", }, useNullAsDefault: true, }; @@ -32,12 +34,13 @@ export const knexSourceRemoteConnection = { client: "sqlite3", connection: { filename: - "./packages/cactus-plugin-satp-hermes/src/knex/.dev.source-remote-" + + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/.dev.source-remote-" + uuidv4() + ".sqlite3", }, migrations: { - directory: "./packages/cactus-plugin-satp-hermes/src/knex/migrations", + directory: + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations", }, useNullAsDefault: true, }; @@ -46,12 +49,13 @@ export const knexTargetRemoteConnection = { client: "sqlite3", connection: { filename: - "./packages/cactus-plugin-satp-hermes/src/knex/.dev.target-remote-" + + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/.dev.target-remote-" + uuidv4() + ".sqlite3", }, migrations: { - directory: "./packages/cactus-plugin-satp-hermes/src/knex/migrations", + directory: + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations", }, useNullAsDefault: true, }; diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/test-utils.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/test-utils.ts index 42dc60bc62..3431d4fcb1 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/test-utils.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/test-utils.ts @@ -12,6 +12,10 @@ import { GatewayIdentity } from "../../main/typescript/core/types"; import { BesuTestEnvironment } from "./environments/besu-test-environment"; import { EthereumTestEnvironment } from "./environments/ethereum-test-environment"; import { FabricTestEnvironment } from "./environments/fabric-test-environment"; +import knex, { Knex } from "knex"; +import Docker, { Container, ContainerInfo } from "dockerode"; +import { Containers } from "@hyperledger/cactus-test-tooling/src/main/typescript/common/containers"; +import { EventEmitter } from "events"; export { BesuTestEnvironment } from "./environments/besu-test-environment"; export { EthereumTestEnvironment } from "./environments/ethereum-test-environment"; @@ -57,6 +61,9 @@ export function setupGatewayDockerFiles( logLevel: LogLevelDesc, counterPartyGateways: GatewayIdentity[], bridgesConfig: Record[], + enableCrashRecovery: boolean = false, + localRepository?: Knex.Config, + remoteRepository?: Knex.Config, fileContext?: string, gatewayKeyPair?: { privateKey: string; @@ -71,10 +78,13 @@ export function setupGatewayDockerFiles( gid: gatewayIdentity, logLevel, counterPartyGateways, + localRepository, + remoteRepository, environment: "development", enableOpenAPI: true, bridgesConfig, gatewayKeyPair, + enableCrashRecovery: enableCrashRecovery, }; // Create a timestamp for the files if no context provided const context = @@ -129,3 +139,132 @@ export function getTransactRequest( receiverAsset: to.defaultAsset, }; } + +export async function createPGDatabase( + port: number, + postgresUser: string = "postgres", // You can set default values or accept them as parameters + postgresPassword: string = "password", + postgresDB: string = "my_database", +): Promise<{ config: Knex.Config; container: Container }> { + const fnTag = "createPGDatabase()"; + const docker = new Docker(); + + const imageFqn = "postgres:17.2"; + + console.debug(`Pulling container image ${imageFqn} ...`); + await Containers.pullImage(imageFqn, {}, "DEBUG"); + console.debug(`Pulled ${imageFqn} OK. Starting container...`); + + console.debug(`Starting container with image: ${imageFqn}...`); + + // Define your host configuration + const hostConfig: Docker.HostConfig = { + PublishAllPorts: true, + Binds: [], + PortBindings: { + "5432/tcp": [{ HostPort: `${port}` }], + }, + }; + + // Define your health check + const healthCheck = { + test: [ + "CMD-SHELL", + `sh -c 'pg_isready -h localhost -d ${postgresDB} -U ${postgresUser} -p 5432'`, + ], + interval: 1000000, // 1 second (in nanoseconds) + timeout: 60000000, // 3 seconds timeout + retries: 30, // Retry 3 times + startPeriod: 1000000, // 1 second (in nanoseconds) + }; + + // Running the Docker container with health check + const container = new Promise((resolve, reject) => { + const eventEmitter: EventEmitter = docker.run( + imageFqn, + [], + [], + { + ExposedPorts: { + ["5432/tcp"]: {}, + }, + HostConfig: hostConfig, + Healthcheck: healthCheck, + Env: [ + `POSTGRES_USER=${postgresUser}`, // Set the database user + `POSTGRES_PASSWORD=${postgresPassword}`, // Set the database password + `POSTGRES_DB=${postgresDB}`, // Optionally set the database name (can be the same as the user) + ], + }, + {}, + (err: unknown) => { + if (err) { + reject(err); + } + }, + ); + + eventEmitter.once("start", async (container: Container) => { + console.debug(`Started container OK. Waiting for healthcheck...`); + + try { + const startedAt = Date.now(); + let isHealthy = false; + do { + if (Date.now() >= startedAt + 60000) { + throw new Error(`${fnTag} timed out (${60000}ms)`); + } + + const containerInfos = await docker.listContainers({}); + + const containerInfo = containerInfos.find( + (ci) => ci.Id === container.id, + ); + let status; + try { + status = ((await containerInfo) as ContainerInfo).Status; + } catch { + continue; + } + + isHealthy = status.endsWith("(healthy)"); + if (!isHealthy) { + await new Promise((resolve2) => setTimeout(resolve2, 1000)); + } + } while (!isHealthy); + console.debug(`Healthcheck passing OK.`); + resolve(container); + } catch (ex) { + reject(ex); + } + }); + }); + + return { + config: { + client: "pg", // Specify PostgreSQL as the client + connection: { + host: "172.17.0.1", // Get the container IP address or use default + user: postgresUser, // Database user + password: postgresPassword, // Database password + database: postgresDB, // The name of your PostgreSQL database + port: port, // Default PostgreSQL port + ssl: false, // Set to true if you're using SSL for a secure connection + }, + migrations: { + directory: + "./packages/cactus-plugin-satp-hermes/src/main/typescript/knex/migrations", + }, + } as Knex.Config, + container: await container, + }; +} + +export async function setupDBTable(config: Knex.Config): Promise { + const clonedConfig = { ...config }; + + (clonedConfig.connection as Knex.PgConnectionConfig).host = "localhost"; + + const knexInstanceClient = knex(clonedConfig); + await knexInstanceClient.migrate.latest(); +} diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/SATPGatewayRunner-instantiation.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/SATPGatewayRunner-instantiation.test.ts index 2e346abb66..172eed4bc8 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/SATPGatewayRunner-instantiation.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/SATPGatewayRunner-instantiation.test.ts @@ -17,7 +17,7 @@ describe("Instantiate SATP Gateway Runner", () => { let gatewayRunner: SATPGatewayRunner; const gatewayRunnerOptions: ISATPGatewayRunnerConstructorOptions = { - containerImageVersion: "2024-10-30T19-54-20-dev-5e06263e0", + containerImageVersion: "latest", containerImageName: "ghcr.io/hyperledger/cacti-satp-hermes-gateway", serverPort: DEFAULT_PORT_GATEWAY_SERVER, clientPort: DEFAULT_PORT_GATEWAY_CLIENT, diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/cron-job.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/cron-job.test.ts index 68609b41ca..e8870e2cc0 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/cron-job.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/cron-job.test.ts @@ -145,6 +145,7 @@ beforeAll(async () => { logLevel: "DEBUG", bridgeConfig: bridgesManager, orchestrator: gatewayOrchestrator, + defaultRepository: false, localRepository: localRepository, remoteRepository: remoteRepository, signer: signer, @@ -157,7 +158,7 @@ afterAll(async () => { if (crashManager) { crashManager.stopScheduler(); crashManager.localRepository.destroy(); - crashManager.remoteRepository.destroy(); + crashManager.remoteRepository!.destroy(); } if (knexInstanceClient || knexInstanceRemote) { await knexInstanceClient.destroy(); diff --git a/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/scenarios.test.ts b/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/scenarios.test.ts index 2a97978ede..fae669a6b1 100644 --- a/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/scenarios.test.ts +++ b/packages/cactus-plugin-satp-hermes/src/test/typescript/unit/crash-management/scenarios.test.ts @@ -151,6 +151,7 @@ beforeAll(async () => { logLevel: "DEBUG" as LogLevelDesc, bridgeConfig: bridgesManager, orchestrator: gatewayOrchestrator, + defaultRepository: false, localRepository: localRepository, remoteRepository: remoteRepository, signer: signer, @@ -167,7 +168,7 @@ afterAll(async () => { if (crashManager) { crashManager.stopScheduler(); crashManager.localRepository.destroy(); - crashManager.remoteRepository.destroy(); + crashManager.remoteRepository!.destroy(); } if (knexInstanceClient || knexInstanceRemote) { await knexInstanceClient.destroy(); diff --git a/packages/cactus-test-tooling/src/main/typescript/satp-runner/satp-gateway-runner.ts b/packages/cactus-test-tooling/src/main/typescript/satp-runner/satp-gateway-runner.ts index fdfba716ce..6ef58064ef 100644 --- a/packages/cactus-test-tooling/src/main/typescript/satp-runner/satp-gateway-runner.ts +++ b/packages/cactus-test-tooling/src/main/typescript/satp-runner/satp-gateway-runner.ts @@ -22,7 +22,6 @@ export interface ISATPGatewayRunnerConstructorOptions { outputLogFile?: string; errorLogFile?: string; knexDir?: string; - enableCrashManager?: boolean; } export const SATP_GATEWAY_RUNNER_DEFAULT_OPTIONS = Object.freeze({ @@ -31,7 +30,6 @@ export const SATP_GATEWAY_RUNNER_DEFAULT_OPTIONS = Object.freeze({ serverPort: 3010, clientPort: 3011, apiPort: 4010, - enableCrashManager: false, }); export const SATP_GATEWAY_RUNNER_OPTIONS_JOI_SCHEMA: Joi.Schema = @@ -51,7 +49,6 @@ export const SATP_GATEWAY_RUNNER_OPTIONS_JOI_SCHEMA: Joi.Schema = .max(65535) .required(), apiPort: Joi.number().integer().positive().min(1024).max(65535).required(), - enableCrashManager: Joi.boolean().optional(), }); export class SATPGatewayRunner implements ITestLedger { @@ -65,7 +62,6 @@ export class SATPGatewayRunner implements ITestLedger { public readonly outputLogFile?: string; public readonly errorLogFile?: string; public readonly knexDir?: string; - public readonly enableCrashManager: boolean; private readonly log: Logger; private container: Container | undefined; @@ -89,9 +85,7 @@ export class SATPGatewayRunner implements ITestLedger { options.clientPort || SATP_GATEWAY_RUNNER_DEFAULT_OPTIONS.clientPort; this.apiPort = options.apiPort || SATP_GATEWAY_RUNNER_DEFAULT_OPTIONS.apiPort; - this.enableCrashManager = - options.enableCrashManager ?? - SATP_GATEWAY_RUNNER_DEFAULT_OPTIONS.enableCrashManager; + this.configFile = options.configFile; this.outputLogFile = options.outputLogFile; this.errorLogFile = options.errorLogFile; @@ -316,7 +310,6 @@ export class SATPGatewayRunner implements ITestLedger { serverPort: this.serverPort, clientPort: this.clientPort, apiPort: this.apiPort, - enableCrashManager: this.enableCrashManager, }); if (validationResult.error) { diff --git a/yarn.lock b/yarn.lock index 2f961c4f79..18b34ced19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7188,16 +7188,6 @@ __metadata: languageName: node linkType: hard -"@grpc/grpc-js@npm:1.11.3": - version: 1.11.3 - resolution: "@grpc/grpc-js@npm:1.11.3" - dependencies: - "@grpc/proto-loader": "npm:^0.7.13" - "@js-sdsl/ordered-map": "npm:^4.4.2" - checksum: 10/b4662cd357296ff279e6f4ff4039fb5379d1087f9f7758102eae85a0d093cd8ec4054f27a62e27862efe67d8b25ad7b6733dcb0ffb0ecbc2bd9e3dcb9450d978 - languageName: node - linkType: hard - "@grpc/grpc-js@npm:1.12.4, @grpc/grpc-js@npm:^1.10.9": version: 1.12.4 resolution: "@grpc/grpc-js@npm:1.12.4" @@ -7776,21 +7766,6 @@ __metadata: languageName: unknown linkType: soft -"@hyperledger/cactus-api-client@npm:2.0.0": - version: 2.0.0 - resolution: "@hyperledger/cactus-api-client@npm:2.0.0" - dependencies: - "@hyperledger/cactus-common": "npm:2.0.0" - "@hyperledger/cactus-core": "npm:2.0.0" - "@hyperledger/cactus-core-api": "npm:2.0.0" - "@hyperledger/cactus-plugin-consortium-manual": "npm:2.0.0" - jsonwebtoken: "npm:9.0.0" - rxjs: "npm:7.8.1" - socket.io-client-fixed-types: "npm:4.5.4" - checksum: 10/81bf9d13ba923165d12d571f8d13bb2984f8a12ac8822e7fd2457478432adc22b232ab84d09d24fa428558daf99714cbe12804f7a1ff97186b335a908ae1dc95 - languageName: node - linkType: hard - "@hyperledger/cactus-api-client@npm:2.1.0, @hyperledger/cactus-api-client@workspace:packages/cactus-api-client": version: 0.0.0-use.local resolution: "@hyperledger/cactus-api-client@workspace:packages/cactus-api-client" @@ -7948,40 +7923,6 @@ __metadata: languageName: node linkType: hard -"@hyperledger/cactus-common@npm:2.0.0": - version: 2.0.0 - resolution: "@hyperledger/cactus-common@npm:2.0.0" - dependencies: - fast-safe-stringify: "npm:2.1.1" - json-stable-stringify: "npm:1.0.1" - key-encoder: "npm:2.0.3" - loglevel: "npm:1.7.1" - loglevel-plugin-prefix: "npm:0.8.4" - run-time-error-cjs: "npm:1.4.0" - sanitize-html: "npm:2.12.1" - secp256k1: "npm:4.0.3" - sha3: "npm:2.1.4" - checksum: 10/8911016a7918b571eb7e4f1342bcb430f0f74dcdde08785407947588fef8c220589c566fc38dc343d3a30a22361fbd92c89acabcae626c6a67e8ae5de2fcfbde - languageName: node - linkType: hard - -"@hyperledger/cactus-common@npm:2.0.0-rc.7": - version: 2.0.0-rc.7 - resolution: "@hyperledger/cactus-common@npm:2.0.0-rc.7" - dependencies: - fast-safe-stringify: "npm:2.1.1" - json-stable-stringify: "npm:1.0.1" - key-encoder: "npm:2.0.3" - loglevel: "npm:1.7.1" - loglevel-plugin-prefix: "npm:0.8.4" - run-time-error-cjs: "npm:1.4.0" - sanitize-html: "npm:2.12.1" - secp256k1: "npm:4.0.3" - sha3: "npm:2.1.4" - checksum: 10/bafc8cd90feead17503d3d4fc486c181ce1ea7b464aae6a1dfbaf3b2c8dc44ef2e27ac7f27aa2216fbba0f67a66a581019a64ce9eb89b1882a9a14e76bb049e5 - languageName: node - linkType: hard - "@hyperledger/cactus-common@npm:2.1.0, @hyperledger/cactus-common@workspace:packages/cactus-common": version: 0.0.0-use.local resolution: "@hyperledger/cactus-common@workspace:packages/cactus-common" @@ -8004,21 +7945,6 @@ __metadata: languageName: unknown linkType: soft -"@hyperledger/cactus-core-api@npm:2.0.0": - version: 2.0.0 - resolution: "@hyperledger/cactus-core-api@npm:2.0.0" - dependencies: - "@grpc/grpc-js": "npm:1.11.3" - "@hyperledger/cactus-common": "npm:2.0.0" - ajv: "npm:8.17.1" - ajv-draft-04: "npm:1.0.0" - ajv-formats: "npm:3.0.1" - axios: "npm:1.7.7" - google-protobuf: "npm:3.21.4" - checksum: 10/c58b377ec94e5d1475cae1bbe08286ad2795abc89f17225af38db40a40db93b401754d5d82aa50fd57fd0759754de1cf1712866cb1393af2368f2fdb82a78c75 - languageName: node - linkType: hard - "@hyperledger/cactus-core-api@npm:2.1.0, @hyperledger/cactus-core-api@workspace:packages/cactus-core-api": version: 0.0.0-use.local resolution: "@hyperledger/cactus-core-api@workspace:packages/cactus-core-api" @@ -8045,25 +7971,6 @@ __metadata: languageName: unknown linkType: soft -"@hyperledger/cactus-core@npm:2.0.0": - version: 2.0.0 - resolution: "@hyperledger/cactus-core@npm:2.0.0" - dependencies: - "@hyperledger/cactus-common": "npm:2.0.0" - "@hyperledger/cactus-core-api": "npm:2.0.0" - body-parser: "npm:1.20.3" - express: "npm:4.21.0" - express-jwt-authz: "npm:2.4.1" - express-openapi-validator: "npm:5.2.0" - http-errors: "npm:2.0.0" - http-errors-enhanced-cjs: "npm:2.0.1" - run-time-error-cjs: "npm:1.4.0" - safe-stable-stringify: "npm:2.4.3" - typescript-optional: "npm:2.0.1" - checksum: 10/4540a9e8bdbc1603a43d493c90c79e27ceb7d6d048eb8ab60c9ecba291feef0640c3df338266b84846250f3be793fa4003a20ef75f0a94a628d43f11b7cf34ca - languageName: node - linkType: hard - "@hyperledger/cactus-core@npm:2.1.0, @hyperledger/cactus-core@workspace:packages/cactus-core": version: 0.0.0-use.local resolution: "@hyperledger/cactus-core@workspace:packages/cactus-core" @@ -8526,25 +8433,6 @@ __metadata: languageName: unknown linkType: soft -"@hyperledger/cactus-plugin-consortium-manual@npm:2.0.0": - version: 2.0.0 - resolution: "@hyperledger/cactus-plugin-consortium-manual@npm:2.0.0" - dependencies: - "@hyperledger/cactus-common": "npm:2.0.0" - "@hyperledger/cactus-core": "npm:2.0.0" - "@hyperledger/cactus-core-api": "npm:2.0.0" - axios: "npm:1.7.7" - body-parser: "npm:1.20.3" - express: "npm:4.21.0" - jose: "npm:4.15.5" - json-stable-stringify: "npm:1.0.1" - prom-client: "npm:15.1.3" - typescript-optional: "npm:2.0.1" - uuid: "npm:10.0.0" - checksum: 10/1b3ec0a8e3c6f0946c60454be694ff5ac478c3e165137a18c3f52f9ea244bf7b989beb0b6db1574c6aad2b0d011f10f9d53ba486bf8bba3f95c660697b92f65d - languageName: node - linkType: hard - "@hyperledger/cactus-plugin-consortium-manual@npm:2.1.0, @hyperledger/cactus-plugin-consortium-manual@workspace:packages/cactus-plugin-consortium-manual": version: 0.0.0-use.local resolution: "@hyperledger/cactus-plugin-consortium-manual@workspace:packages/cactus-plugin-consortium-manual" @@ -9245,7 +9133,7 @@ __metadata: "@foundry-rs/hardhat-forge": "npm:0.1.17" "@grpc/grpc-js": "npm:1.12.4" "@grpc/proto-loader": "npm:0.7.13" - "@hyperledger/cactus-api-client": "npm:2.0.0" + "@hyperledger/cactus-api-client": "npm:2.1.0" "@hyperledger/cactus-cmd-api-server": "npm:2.1.0" "@hyperledger/cactus-common": "npm:2.1.0" "@hyperledger/cactus-core": "npm:2.1.0" @@ -9256,12 +9144,13 @@ __metadata: "@hyperledger/cactus-plugin-ledger-connector-ethereum": "npm:2.1.0" "@hyperledger/cactus-plugin-ledger-connector-fabric": "npm:2.1.0" "@hyperledger/cactus-plugin-object-store-ipfs": "npm:2.1.0" - "@hyperledger/cactus-test-geth-ledger": "npm:2.0.0-rc.7" + "@hyperledger/cactus-test-geth-ledger": "npm:2.1.0" "@hyperledger/cactus-test-tooling": "npm:2.1.0" "@openzeppelin/contracts": "npm:5.0.2" "@quobix/vacuum": "npm:0.9.16" "@types/body-parser": "npm:1.19.4" "@types/crypto-js": "npm:4.0.1" + "@types/dockerode": "npm:3.2.7" "@types/express": "npm:5.0.0" "@types/fs-extra": "npm:11.0.4" "@types/google-protobuf": "npm:3.15.12" @@ -9280,6 +9169,7 @@ __metadata: class-validator: "npm:0.14.1" cors: "npm:2.8.5" crypto-js: "npm:4.2.0" + dockerode: "npm:3.3.0" dotenv: "npm:16.4.5" ethereum-abi-types-generator: "npm:1.3.4" ethers: "npm:6.13.1" @@ -9296,6 +9186,7 @@ __metadata: kubo-rpc-client: "npm:3.0.1" make-dir-cli: "npm:3.1.0" node-schedule: "npm:2.1.1" + node-ssh: "npm:^13.2.0" npm-run-all: "npm:4.1.5" openzeppelin-solidity: "npm:3.4.2" pg: "npm:8.13.1" @@ -9351,21 +9242,6 @@ __metadata: languageName: unknown linkType: soft -"@hyperledger/cactus-test-geth-ledger@npm:2.0.0-rc.7": - version: 2.0.0-rc.7 - resolution: "@hyperledger/cactus-test-geth-ledger@npm:2.0.0-rc.7" - dependencies: - "@hyperledger/cactus-common": "npm:2.0.0-rc.7" - "@hyperledger/cactus-test-tooling": "npm:2.0.0-rc.7" - dockerode: "npm:3.3.0" - internal-ip: "npm:6.2.0" - run-time-error-cjs: "npm:1.4.0" - web3: "npm:4.0.3" - web3-eth-accounts: "npm:4.0.3" - checksum: 10/9583e0735c08ce0ace967a64f4fbd7636a9643abe3b87e914181b7e68ad416f9e08d838b7de7a2ce46a958f7c434c9c3db967e127fd5894d7dbc26f419a86ae1 - languageName: node - linkType: hard - "@hyperledger/cactus-test-geth-ledger@npm:2.1.0, @hyperledger/cactus-test-geth-ledger@workspace:packages/cactus-test-geth-ledger": version: 0.0.0-use.local resolution: "@hyperledger/cactus-test-geth-ledger@workspace:packages/cactus-test-geth-ledger" @@ -9513,42 +9389,6 @@ __metadata: languageName: unknown linkType: soft -"@hyperledger/cactus-test-tooling@npm:2.0.0-rc.7": - version: 2.0.0-rc.7 - resolution: "@hyperledger/cactus-test-tooling@npm:2.0.0-rc.7" - dependencies: - "@hyperledger/cactus-common": "npm:2.0.0-rc.7" - axios: "npm:1.7.7" - compare-versions: "npm:3.6.0" - dockerode: "npm:3.3.0" - elliptic: "npm:6.5.7" - execa: "npm:5.1.1" - fabric-ca-client: "npm:2.5.0-snapshot.23" - fabric-network: "npm:2.5.0-snapshot.23" - fs-extra: "npm:11.2.0" - internal-ip: "npm:6.2.0" - is-port-reachable: "npm:3.0.0" - joi: "npm:17.13.3" - js-yaml: "npm:4.1.0" - keycloak-admin: "npm:1.14.22" - lodash: "npm:4.17.21" - node-forge: "npm:1.3.0" - node-ssh: "npm:13.1.0" - p-retry: "npm:4.6.1" - run-time-error-cjs: "npm:1.4.0" - socket.io: "npm:4.6.2" - socket.io-client-fixed-types: "npm:4.5.4" - tar-stream: "npm:2.2.0" - temp: "npm:0.9.4" - typescript-optional: "npm:2.0.1" - uuid: "npm:10.0.0" - web3: "npm:1.6.1" - web3-core: "npm:1.6.1" - web3-utils: "npm:1.6.1" - checksum: 10/60cd17f6124ad9f7006013681086bb464d928641cd5e64d80845b61de9458358645b9759e810ed48e049989a104fa2c665fc3d718ecb0076fb1d3672a7f931c8 - languageName: node - linkType: hard - "@hyperledger/cactus-test-tooling@npm:2.1.0, @hyperledger/cactus-test-tooling@workspace:packages/cactus-test-tooling": version: 0.0.0-use.local resolution: "@hyperledger/cactus-test-tooling@workspace:packages/cactus-test-tooling" @@ -9707,8 +9547,6 @@ __metadata: "@redocly/openapi-core": "npm:1.15.0" "@types/adm-zip": "npm:0.5.0" "@types/benchmark": "npm:2.1.5" - "@types/deasync": "npm:^0" - "@types/deasync-promise": "npm:^1" "@types/debug": "npm:4.1.12" "@types/fs-extra": "npm:11.0.4" "@types/jest": "npm:29.5.3" @@ -15398,20 +15236,6 @@ __metadata: languageName: node linkType: hard -"@types/deasync-promise@npm:^1": - version: 1.0.2 - resolution: "@types/deasync-promise@npm:1.0.2" - checksum: 10/976453a85053d9e7918b3b3d6a1e70890a15dd16ecfe53b35dd12f76a8f42513955e936e02784707bf47bfdd3d6903a1da68b4099d39f0f0d1baee58d03232d6 - languageName: node - linkType: hard - -"@types/deasync@npm:^0": - version: 0.1.5 - resolution: "@types/deasync@npm:0.1.5" - checksum: 10/5a8fec89572abc6fbcce7b4f5b5357ba58b2d6d6860b640eb452eb9e87a8d44f787a40450e456b6e2d7fa12cf52bac2ab0d2f9be431dd51bd40584e316ffaa2c - languageName: node - linkType: hard - "@types/debug@npm:4.1.12, @types/debug@npm:^4.1.7": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" @@ -39071,6 +38895,20 @@ __metadata: languageName: node linkType: hard +"node-ssh@npm:^13.2.0": + version: 13.2.0 + resolution: "node-ssh@npm:13.2.0" + dependencies: + is-stream: "npm:^2.0.0" + make-dir: "npm:^3.1.0" + sb-promise-queue: "npm:^2.1.0" + sb-scandir: "npm:^3.1.0" + shell-escape: "npm:^0.2.0" + ssh2: "npm:^1.14.0" + checksum: 10/69e80b6678137169f0f8f5437f9fca3fbf8c92b01de191d833f39704b81fd9ffa3582c3068767009bf63281f7ef071fff1497f5a4c8758245098fdacd275079b + languageName: node + linkType: hard + "node-vault@npm:*": version: 0.10.2 resolution: "node-vault@npm:0.10.2" @@ -47227,7 +47065,7 @@ __metadata: languageName: node linkType: hard -"ssh2@npm:^1.11.0": +"ssh2@npm:^1.11.0, ssh2@npm:^1.14.0": version: 1.16.0 resolution: "ssh2@npm:1.16.0" dependencies: