diff --git a/apps/ssi-abstraction/.swcrc b/apps/ssi-abstraction/.swcrc new file mode 100644 index 0000000000000000000000000000000000000000..f0831e454c02bece75b8b8b60ac59891a48fe7f2 --- /dev/null +++ b/apps/ssi-abstraction/.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/ssi-abstraction/jest.config.js b/apps/ssi-abstraction/jest.config.js new file mode 100644 index 0000000000000000000000000000000000000000..1b2ee91fa88cada4d31ad3c2528291214de4aebe --- /dev/null +++ b/apps/ssi-abstraction/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/ssi-abstraction/package.json b/apps/ssi-abstraction/package.json index 87ab54b5f89abf73edadc864dbb50af7a9c70848..638c6d30a9bd92fbe966e91fbc45c765616b51af 100644 --- a/apps/ssi-abstraction/package.json +++ b/apps/ssi-abstraction/package.json @@ -4,20 +4,28 @@ "description": "A core OCM service that provides the SSI interface through REST endpoints and events.", "author": "Vereign", "private": true, + "type": "module", "license": "Apache-2.0", "scripts": { "clean": "rm -r dist", "prebuild": "rimraf dist", "build": "nest build", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "prisma:generate": "prisma generate --schema=./src/prisma/schema.prisma", + "prisma:migrate": "npx prisma migrate deploy --schema=./src/prisma/schema.prisma", + "dbSchema": "npx prisma db push --schema=./src/prisma/schema.prisma", + "prismaStudio": "npx prisma studio", "start": "nest start", - "start:docker": "nest start", - "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "start:dev": "nest start --watch --preserveWatchOutput", + "start:docker": "pnpm prisma:generate && pnpm dbSchema && pnpm start", + "lint": "eslint --fix", + "lint:all": "npm run lint -- .", + "format": "prettier --write", + "format:all": "npm run format -- .", "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 -i --config ./test/jest-e2e.json" + "test:e2e": "jest --config ./test/jest.config.js" }, "dependencies": { "@aries-framework/anoncreds": "0.4.2", @@ -82,35 +90,5 @@ "tsconfig-paths": "^3.10.1", "typedoc": "^0.22.15", "typescript": "^4.3.5" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": "src", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "moduleNameMapper": { - "^@src/(.*)$": "<rootDir>/$1", - "@config/(.*)": "<rootDir>/../config/$1", - "@globalUtils/(.*)": "<rootDir>/globalUtils/$1", - "^@didComm/(.*)$": "<rootDir>/didComm/$1", - "^@DB/(.*)$": "<rootDir>/prisma/$1", - "^@common/(.*)$": "<rootDir>/common/$1", - "^@agent/(.*)$": "<rootDir>/agent/$1", - "^@health/(.*)$": "<rootDir>/health/$1" - }, - "collectCoverageFrom": [ - "**/agent/agentUtils/listener.(t|j)s", - "**/didComm/controller/**/*.(t|j)s", - "**/didComm/utils/**/*.(t|j)s", - "**/globalUtils/logger.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" } } diff --git a/apps/ssi-abstraction/src/agent/agent.controller.ts b/apps/ssi-abstraction/src/agent/agent.controller.ts index 3f28248a7efd2ec3a70fa5357245bb4e5f9b4d13..f5b90bba3839221bc06848055f7754a15ffcc055 100644 --- a/apps/ssi-abstraction/src/agent/agent.controller.ts +++ b/apps/ssi-abstraction/src/agent/agent.controller.ts @@ -1,5 +1,5 @@ import { Controller, Get, HttpStatus } from '@nestjs/common'; -import { AgentService } from './agent.service'; +import { AgentService } from './agent.service.js'; @Controller('agent') export class AgentController { diff --git a/apps/ssi-abstraction/src/agent/agent.module.ts b/apps/ssi-abstraction/src/agent/agent.module.ts index d9c2070d1a396f633d823837a7a3419323b6ec2a..ebdf5c28ac85fa52f9d8fbb28732a87e85a29703 100644 --- a/apps/ssi-abstraction/src/agent/agent.module.ts +++ b/apps/ssi-abstraction/src/agent/agent.module.ts @@ -1,11 +1,11 @@ -import config from '@config/config'; import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ClientsModule, Transport } from '@nestjs/microservices'; -import { NatsClientService } from '@src/client/nats.client'; -import { NATSServices } from '@src/common/constants'; -import { AgentController } from './agent.controller'; -import { AgentService } from './agent.service'; +import config from '../config/config.js'; +import { NatsClientService } from '../client/nats.client.js'; +import { NATSServices } from '../common/constants.js'; +import { AgentController } from './agent.controller.js'; +import { AgentService } from './agent.service.js'; @Module({ imports: [ diff --git a/apps/ssi-abstraction/src/agent/agent.service.ts b/apps/ssi-abstraction/src/agent/agent.service.ts index 187b4d85721fca541d5f2c66baabb5aca0d316b0..4d58a6736fbb526e2850a4f0b15ac83839405be0 100644 --- a/apps/ssi-abstraction/src/agent/agent.service.ts +++ b/apps/ssi-abstraction/src/agent/agent.service.ts @@ -16,8 +16,6 @@ import { import { agentDependencies, HttpInboundTransport } from '@aries-framework/node'; import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; -import { NatsClientService } from '@src/client/nats.client'; -import logger from '@src/globalUtils/logger'; import { AnonCredsRsModule } from '@aries-framework/anoncreds-rs'; import { anoncreds } from '@hyperledger/anoncreds-nodejs'; import { AnonCredsModule } from '@aries-framework/anoncreds'; @@ -31,14 +29,16 @@ import { IndyVdrPoolConfig, IndyVdrSovDidResolver, } from '@aries-framework/indy-vdr'; -import { subscribe } from './utils/listener'; +import { subscribe } from './utils/listener.js'; import { LedgerIds, ledgerNamespaces, LEDGER_GENESIS, -} from './utils/ledgerConfig'; -import { AgentLogger } from './utils/logger'; -import { registerPublicDids } from './ledger/register'; +} from './utils/ledgerConfig.js'; +import { AgentLogger } from './utils/logger.js'; +import { registerPublicDids } from './ledger/register.js'; +import { NatsClientService } from '../client/nats.client.js'; +import logger from '../globalUtils/logger.js'; @Injectable() export class AgentService { diff --git a/apps/ssi-abstraction/src/agent/ledger/register.ts b/apps/ssi-abstraction/src/agent/ledger/register.ts index 50b4cc65d21b239824f44261aaabdb3f74aedfe8..d3957e5830299737deee178336cc8965bae8ef35 100644 --- a/apps/ssi-abstraction/src/agent/ledger/register.ts +++ b/apps/ssi-abstraction/src/agent/ledger/register.ts @@ -1,7 +1,7 @@ -import logger from '@src/globalUtils/logger'; +import logger from '../../globalUtils/logger.js'; import axios from 'axios'; -import { logAxiosError } from '../utils/helperFunctions'; -import { LedgerIds, ledgerNamespaces, NYM_URL } from '../utils/ledgerConfig'; +import { logAxiosError } from '../utils/helperFunctions.js'; +import { LedgerIds, ledgerNamespaces, NYM_URL } from '../utils/ledgerConfig.js'; type RegisterPublicDidOptions = { alias: string; @@ -43,7 +43,7 @@ export const registerPublicDids = async ({ }; // eslint-disable-next-line no-await-in-loop - const res = await axios.post<RegisterPublicDidResponse>( + const res = await new axios.Axios().post<RegisterPublicDidResponse>( ledgerRegisterUrl, body, ); diff --git a/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts b/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts index 82e880bbd1959aee9ce3d28916b88b2e02a9af6c..0f4f2720b9256d0084fcec8dadd5b3b3f2adf2f0 100644 --- a/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts +++ b/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts @@ -1,4 +1,4 @@ -import logger from '@src/globalUtils/logger'; +import logger from '../../globalUtils/logger.js'; export function logAxiosError(err: any) { if (err.response) { diff --git a/apps/ssi-abstraction/src/agent/utils/listener.spec.ts b/apps/ssi-abstraction/src/agent/utils/listener.spec.ts index ea1052213b44272156bc3a33526185220f56b0f4..95d5a43a8f1303ec2c2755d1e32dd6a45a05c1a6 100644 --- a/apps/ssi-abstraction/src/agent/utils/listener.spec.ts +++ b/apps/ssi-abstraction/src/agent/utils/listener.spec.ts @@ -1,4 +1,4 @@ -import { subscribe } from './listener'; +import { subscribe } from './listener.js'; describe('listener', () => { it('should subscribe agent to available events', async () => { diff --git a/apps/ssi-abstraction/src/agent/utils/listener.ts b/apps/ssi-abstraction/src/agent/utils/listener.ts index 1c636de348040bf422937baa979accc93b79af72..17615e1a6839e5422f1b49dc2b9dcdee052ba34c 100644 --- a/apps/ssi-abstraction/src/agent/utils/listener.ts +++ b/apps/ssi-abstraction/src/agent/utils/listener.ts @@ -1,7 +1,7 @@ import { Agent } from '@aries-framework/core'; -import logger from '@src/globalUtils/logger'; -import { NatsClientService } from '@src/client/nats.client'; -import { listenerConfig } from './listenerConfig'; +import logger from '../../globalUtils/logger.js'; +import { NatsClientService } from '../../client/nats.client.js'; +import { listenerConfig } from './listenerConfig.js'; /** * Subscribes to events on nats diff --git a/apps/ssi-abstraction/src/agent/utils/logger.ts b/apps/ssi-abstraction/src/agent/utils/logger.ts index 5339a9cf7a8619af0973bc5b434a670d91ce166d..dff3f0c41f75a5a31b0588734c40e24c603bb840 100644 --- a/apps/ssi-abstraction/src/agent/utils/logger.ts +++ b/apps/ssi-abstraction/src/agent/utils/logger.ts @@ -1,6 +1,5 @@ -/* eslint-disable class-methods-use-this */ import { BaseLogger, LogLevel } from '@aries-framework/core'; -import logger from '@src/globalUtils/logger'; +import logger from '../../globalUtils/logger.js'; export class AgentLogger extends BaseLogger { public test(message: string, data?: Record<string, any> | undefined): void { diff --git a/apps/ssi-abstraction/src/app.module.ts b/apps/ssi-abstraction/src/app.module.ts index 7ad33cb9e6ff32cf34bf9f2be6cc12830416fd70..0eda6d7aa2a922016077b4787231803371e6d2b7 100644 --- a/apps/ssi-abstraction/src/app.module.ts +++ b/apps/ssi-abstraction/src/app.module.ts @@ -2,12 +2,13 @@ import { APP_FILTER } from '@nestjs/core'; import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { TerminusModule } from '@nestjs/terminus'; -import config from '@config/config'; -import validationSchema from '@config/validation'; -import HealthController from '@src/health/health.controller'; -import ExceptionHandler from '@src/globalUtils/exception.handler'; -import { AgentMid } from './middleware/agentMid.middleware'; -import { AgentModule } from './agent/agent.module'; + +import config from './config/config.js'; +import validationSchema from './config/validation.js'; +import HealthController from './health/health.controller.js'; +import ExceptionHandler from './globalUtils/exception.handler.js'; +import { AgentMid } from './middleware/agentMid.middleware.js'; +import { AgentModule } from './agent/agent.module.js'; @Module({ imports: [ diff --git a/apps/ssi-abstraction/src/client/nats.client.ts b/apps/ssi-abstraction/src/client/nats.client.ts index 5a4c62abcbb59fc811fd182f0da43112f0f036b5..1e995b4807452c54d5c36665e8b426bb01ef6ed0 100644 --- a/apps/ssi-abstraction/src/client/nats.client.ts +++ b/apps/ssi-abstraction/src/client/nats.client.ts @@ -1,7 +1,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; -import { NATSServices } from '@common/constants'; -import logger from '@globalUtils/logger'; +import { NATSServices } from '../common/constants.js'; +import logger from '../globalUtils/logger.js'; @Injectable() export class NatsClientService { diff --git a/apps/ssi-abstraction/config/config.ts b/apps/ssi-abstraction/src/config/config.ts similarity index 100% rename from apps/ssi-abstraction/config/config.ts rename to apps/ssi-abstraction/src/config/config.ts diff --git a/apps/ssi-abstraction/config/validation.ts b/apps/ssi-abstraction/src/config/validation.ts similarity index 100% rename from apps/ssi-abstraction/config/validation.ts rename to apps/ssi-abstraction/src/config/validation.ts diff --git a/apps/ssi-abstraction/src/globalUtils/appConfig.ts b/apps/ssi-abstraction/src/globalUtils/appConfig.ts index 7005ea6c17e5b90db1013ace914b82a4a366610b..f3fba5475a3a8a7872b740e9823fe2e9a33161ad 100644 --- a/apps/ssi-abstraction/src/globalUtils/appConfig.ts +++ b/apps/ssi-abstraction/src/globalUtils/appConfig.ts @@ -1,7 +1,7 @@ import { VersioningType, INestApplication } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { Transport, MicroserviceOptions } from '@nestjs/microservices'; -import logger from './logger'; +import logger from './logger.js'; /** * Microservice and versioning configuration of the service diff --git a/apps/ssi-abstraction/src/globalUtils/exception.handler.ts b/apps/ssi-abstraction/src/globalUtils/exception.handler.ts index 1b8ea4c1d64ecb7446dbc181de74284a4680cc19..dec587357ac200b27a171fab7f11d0e75f463ebb 100644 --- a/apps/ssi-abstraction/src/globalUtils/exception.handler.ts +++ b/apps/ssi-abstraction/src/globalUtils/exception.handler.ts @@ -6,7 +6,7 @@ import { HttpStatus, } from '@nestjs/common'; import { HttpAdapterHost } from '@nestjs/core'; -import { ResponseType } from '@common/response'; +import { ResponseType } from '../common/response.js'; @Catch() export class ExceptionHandler implements ExceptionFilter { diff --git a/apps/ssi-abstraction/src/main.ts b/apps/ssi-abstraction/src/main.ts index a140a1769797aca8c228c8d1ba68828ea0536318..98f80968b247c45eb4bcb445dbcfa0dafb2b76e2 100644 --- a/apps/ssi-abstraction/src/main.ts +++ b/apps/ssi-abstraction/src/main.ts @@ -1,9 +1,10 @@ import { NestFactory } from '@nestjs/core'; import { ConfigService } from '@nestjs/config'; -import AppModule from '@src/app.module'; -import logger from './globalUtils/logger'; -import swaggerSetup from './globalUtils/swagger'; -import appConf from './globalUtils/appConfig'; + +import AppModule from './app.module.js'; +import logger from './globalUtils/logger.js'; +import swaggerSetup from './globalUtils/swagger.js'; +import appConf from './globalUtils/appConfig.js'; async function bootstrap() { const app = await NestFactory.create(AppModule); diff --git a/apps/ssi-abstraction/test/jest-e2e.json b/apps/ssi-abstraction/test/jest-e2e.json deleted file mode 100644 index 4a8635e2f768ed6352e0341b685e1bc65d3bb426..0000000000000000000000000000000000000000 --- a/apps/ssi-abstraction/test/jest-e2e.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "moduleFileExtensions": ["js", "json", "ts"], - "rootDir": ".", - "testEnvironment": "node", - "testRegex": ".e2e-spec.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "moduleNameMapper": { - "@src/(.*)": ["<rootDir>/../src/$1"], - "@config/(.*)": ["<rootDir>/../config/$1"], - "@globalUtils/(.*)" :["<rootDir>/../src/globalUtils/$1"], - "@common/(.*)":["<rootDir>/../src/common/$1"], - "@agent/(.*)":["<rootDir>/../src/agent/$1"], - "@didComm/(.*)":["<rootDir>/../src/didComm/$1"], - "@eventHandler/(.*)":["<rootDir>/../src/eventHandler/$1"], - "@health/(.*)":["<rootDir>/../src/health/$1"], - "@DB/(.*)":["<rootDir>/../src/prisma/$1"] - }, - "setupFiles": [ - "./setEnvVars.js" - ] -} \ No newline at end of file diff --git a/apps/ssi-abstraction/test/jest.config.js b/apps/ssi-abstraction/test/jest.config.js new file mode 100644 index 0000000000000000000000000000000000000000..aff146f7bfb93ea0915f112ad94fa165c2cb03cd --- /dev/null +++ b/apps/ssi-abstraction/test/jest.config.js @@ -0,0 +1,8 @@ +/** @type {import('jest').Config} */ +import config from '../jest.config.js'; + +export default { + ...config, + rootDir: '.', + testRegex: '.*\\.e2e-spec\\.ts$', +}; diff --git a/apps/ssi-abstraction/tsconfig.json b/apps/ssi-abstraction/tsconfig.json index 22c429bbfc492b7dacaf3af5f3579538db30bff9..c759d12a5c23cb01761f3e77cda699cd76bcadd8 100644 --- a/apps/ssi-abstraction/tsconfig.json +++ b/apps/ssi-abstraction/tsconfig.json @@ -1,31 +1,15 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "target": "es6", - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "module": "commonjs", + "composite": true, + "removeComments": false, + "declaration": true, + "sourceMap": true, + "incremental": true, "outDir": "./dist", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - "strict": true, - "skipLibCheck": true, "baseUrl": "./", - "strictPropertyInitialization": false, - "sourceMap": true, - "strictNullChecks": true, - "paths": { - "@src/*": ["src/*"], - "@config/*": ["config/*"], - "@globalUtils/*" :["src/globalUtils/*"], - "@common/*":["src/common/*"], - "@agent/*":["src/agent/*"], - "@didComm/*":["src/didComm/*"], - "@health/*":["src/health/*"], - "@DB/*":["src/prisma/*"] - } + "rootDir": "./src" }, - "exclude": [ - "node_modules", - "./dist/**/*" - ] + "include": ["src", "config"], + "exclude": ["node_modules", "./dist/**/*"] }