From a54c62f8656b0b453e3d6a7c9b563853fe43d42c Mon Sep 17 00:00:00 2001
From: Berend Sliedrecht <sliedrecht@berend.io>
Date: Mon, 20 Nov 2023 13:49:37 +0100
Subject: [PATCH] fixed linting for ssi-abstraction

Signed-off-by: Berend Sliedrecht <sliedrecht@berend.io>
---
 apps/ssi-abstraction/.eslintrc.cjs            | 46 +++++++++++++++++++
 apps/ssi-abstraction/.eslintrc.js             | 25 ----------
 apps/ssi-abstraction/package.json             |  4 +-
 .../src/agent/agent.controller.ts             |  1 -
 .../src/agent/agent.service.ts                |  2 -
 .../src/agent/ledger/register.ts              |  5 --
 .../src/agent/utils/helperFunctions.ts        |  3 +-
 .../src/agent/utils/listener.spec.ts          |  2 -
 .../ssi-abstraction/src/agent/utils/logger.ts | 35 +++++++++++---
 apps/ssi-abstraction/src/app.module.ts        |  1 -
 .../ssi-abstraction/src/client/nats.client.ts |  2 +-
 apps/ssi-abstraction/src/common/response.ts   |  4 +-
 apps/ssi-abstraction/src/config/config.ts     |  4 --
 .../src/globalUtils/exception.handler.ts      | 11 +----
 .../ssi-abstraction/src/globalUtils/logger.ts | 17 +------
 .../src/health/health.controller.ts           |  1 -
 .../src/middleware/agentMid.middleware.ts     |  1 -
 apps/ssi-abstraction/test/didComm.e2e-spec.ts |  2 +-
 apps/ssi-abstraction/tsconfig.json            |  2 +-
 package.json                                  |  3 +-
 20 files changed, 88 insertions(+), 83 deletions(-)
 create mode 100644 apps/ssi-abstraction/.eslintrc.cjs
 delete mode 100644 apps/ssi-abstraction/.eslintrc.js

diff --git a/apps/ssi-abstraction/.eslintrc.cjs b/apps/ssi-abstraction/.eslintrc.cjs
new file mode 100644
index 0000000..b77971f
--- /dev/null
+++ b/apps/ssi-abstraction/.eslintrc.cjs
@@ -0,0 +1,46 @@
+module.exports = {
+  root: true,
+  parser: '@typescript-eslint/parser',
+  parserOptions: {
+    sourceType: 'module',
+    ecmaVersion: 2021,
+  },
+  env: {
+    node: true,
+  },
+  plugins: ['prettier', '@typescript-eslint/eslint-plugin', 'jest'],
+  extends: [
+    'prettier',
+    'plugin:@typescript-eslint/recommended',
+    'plugin:jest/recommended',
+  ],
+  ignorePatterns: ['.eslintrc.cjs', 'dist'],
+  overrides: [],
+  settings: {
+    jest: {
+      version: '29',
+    },
+  },
+  rules: {
+    'no-unused-vars': 0,
+    '@typescript-eslint/no-unused-vars': [1, { argsIgnorePattern: '^_' }],
+  },
+  overrides: [
+    {
+      files: [
+        '*.spec.ts',
+        '*.e2e-spec.ts',
+        '__mocks__/*.ts',
+        '__mocks__/**/*.ts',
+      ],
+      rules: {
+        '@typescript-eslint/no-explicit-any': 0,
+        '@typescript-eslint/no-empty-function': 0,
+        '@typescript-eslint/ban-ts-comment': 0,
+        '@typescript-eslint/no-unused-vars': 0,
+        'jest/no-mocks-import': 0,
+        'jest/expect-expect': 0,
+      },
+    },
+  ],
+};
diff --git a/apps/ssi-abstraction/.eslintrc.js b/apps/ssi-abstraction/.eslintrc.js
deleted file mode 100644
index ba9f72b..0000000
--- a/apps/ssi-abstraction/.eslintrc.js
+++ /dev/null
@@ -1,25 +0,0 @@
-module.exports = {
-  parser: '@typescript-eslint/parser',
-  parserOptions: {
-    project: 'tsconfig.json',
-    sourceType: 'module',
-  },
-  plugins: ['@typescript-eslint/eslint-plugin'],
-  extends: [
-    'plugin:@typescript-eslint/recommended',
-    'airbnb-base',
-    'airbnb-typescript/base'
-  ],
-  root: true,
-  env: {
-    node: true,
-    jest: true,
-  },
-  ignorePatterns: ['.eslintrc.js'],
-  rules: {
-    '@typescript-eslint/interface-name-prefix': 'off',
-    '@typescript-eslint/explicit-function-return-type': 'off',
-    '@typescript-eslint/explicit-module-boundary-types': 'off',
-    '@typescript-eslint/no-explicit-any': 'off',
-  },
-};
diff --git a/apps/ssi-abstraction/package.json b/apps/ssi-abstraction/package.json
index 638c6d3..f73fbc7 100644
--- a/apps/ssi-abstraction/package.json
+++ b/apps/ssi-abstraction/package.json
@@ -17,8 +17,8 @@
     "start": "nest start",
     "start:dev": "nest start --watch --preserveWatchOutput",
     "start:docker": "pnpm prisma:generate && pnpm dbSchema && pnpm start",
-    "lint": "eslint --fix",
-    "lint:all": "npm run lint -- .",
+    "lint": "eslint .",
+    "lint:fix": "pnpm lint --fix",
     "format": "prettier --write",
     "format:all": "npm run format -- .",
     "test": "jest",
diff --git a/apps/ssi-abstraction/src/agent/agent.controller.ts b/apps/ssi-abstraction/src/agent/agent.controller.ts
index f5b90bb..af3ff3b 100644
--- a/apps/ssi-abstraction/src/agent/agent.controller.ts
+++ b/apps/ssi-abstraction/src/agent/agent.controller.ts
@@ -5,7 +5,6 @@ import { AgentService } from './agent.service.js';
 export class AgentController {
   public constructor(private agent: AgentService) {}
 
-  // eslint-disable-next-line class-methods-use-this
   @Get('info')
   async getWalletInfo() {
     return {
diff --git a/apps/ssi-abstraction/src/agent/agent.service.ts b/apps/ssi-abstraction/src/agent/agent.service.ts
index 4d58a67..33755ea 100644
--- a/apps/ssi-abstraction/src/agent/agent.service.ts
+++ b/apps/ssi-abstraction/src/agent/agent.service.ts
@@ -168,9 +168,7 @@ export class AgentService {
       seed: publicDidSeed,
     });
 
-    // eslint-disable-next-line no-restricted-syntax
     for (const publicDidResponse of registeredPublicDidResponses) {
-      // eslint-disable-next-line no-await-in-loop
       await this.agent.dids.import({
         overwrite: true,
         did: publicDidResponse.did,
diff --git a/apps/ssi-abstraction/src/agent/ledger/register.ts b/apps/ssi-abstraction/src/agent/ledger/register.ts
index d3957e5..0197185 100644
--- a/apps/ssi-abstraction/src/agent/ledger/register.ts
+++ b/apps/ssi-abstraction/src/agent/ledger/register.ts
@@ -27,12 +27,8 @@ export const registerPublicDids = async ({
   seed,
 }: RegisterPublicDidOptions): Promise<Array<RegisterPublicDidResponse>> => {
   const responses: Array<RegisterPublicDidResponse> = [];
-  // eslint-disable-next-line no-restricted-syntax
   for (const ledgerId of ledgerIds) {
     try {
-      // TODO: why does this fail?
-      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
-      // @ts-ignore
       const ledgerRegisterUrl = NYM_URL[ledgerId];
       const ledgerNamespace = ledgerNamespaces[ledgerId];
 
@@ -42,7 +38,6 @@ export const registerPublicDids = async ({
         seed,
       };
 
-      // eslint-disable-next-line no-await-in-loop
       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 0f4f272..a8e80ba 100644
--- a/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts
+++ b/apps/ssi-abstraction/src/agent/utils/helperFunctions.ts
@@ -1,6 +1,7 @@
+import { AxiosError } from 'axios';
 import logger from '../../globalUtils/logger.js';
 
-export function logAxiosError(err: any) {
+export function logAxiosError(err: AxiosError) {
   if (err.response) {
     logger.error('Request made and server responded: ');
     logger.error(`Data: ${err.response.data}`);
diff --git a/apps/ssi-abstraction/src/agent/utils/listener.spec.ts b/apps/ssi-abstraction/src/agent/utils/listener.spec.ts
index 95d5a43..1792bf3 100644
--- a/apps/ssi-abstraction/src/agent/utils/listener.spec.ts
+++ b/apps/ssi-abstraction/src/agent/utils/listener.spec.ts
@@ -4,7 +4,6 @@ describe('listener', () => {
   it('should subscribe agent to available events', async () => {
     const agent = {
       events: {
-        // eslint-disable-next-line @typescript-eslint/no-unused-vars
         on: (eventName: string, cb: () => void) => {},
       },
     };
@@ -21,7 +20,6 @@ describe('listener', () => {
       .mockImplementation((eventName: string, cb: () => void) => {
         lastCb = cb;
       });
-    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
     // @ts-ignore
     subscribe(agent, natsClient);
     expect(spy).toHaveBeenCalled();
diff --git a/apps/ssi-abstraction/src/agent/utils/logger.ts b/apps/ssi-abstraction/src/agent/utils/logger.ts
index dff3f0c..dacc601 100644
--- a/apps/ssi-abstraction/src/agent/utils/logger.ts
+++ b/apps/ssi-abstraction/src/agent/utils/logger.ts
@@ -2,37 +2,58 @@ import { BaseLogger, LogLevel } from '@aries-framework/core';
 import logger from '../../globalUtils/logger.js';
 
 export class AgentLogger extends BaseLogger {
-  public test(message: string, data?: Record<string, any> | undefined): void {
+  public test(
+    message: string,
+    data?: Record<string, unknown> | undefined,
+  ): void {
     if (!this.isEnabled(LogLevel.test)) return;
     logger.verbose(message, data);
   }
 
-  public trace(message: string, data?: Record<string, any> | undefined): void {
+  public trace(
+    message: string,
+    data?: Record<string, unknown> | undefined,
+  ): void {
     if (!this.isEnabled(LogLevel.trace)) return;
     logger.info(message, data);
   }
 
-  public debug(message: string, data?: Record<string, any> | undefined): void {
+  public debug(
+    message: string,
+    data?: Record<string, unknown> | undefined,
+  ): void {
     if (!this.isEnabled(LogLevel.debug)) return;
     logger.info(message, data);
   }
 
-  public info(message: string, data?: Record<string, any> | undefined): void {
+  public info(
+    message: string,
+    data?: Record<string, unknown> | undefined,
+  ): void {
     if (!this.isEnabled(LogLevel.info)) return;
     logger.info(message, data);
   }
 
-  public warn(message: string, data?: Record<string, any> | undefined): void {
+  public warn(
+    message: string,
+    data?: Record<string, unknown> | undefined,
+  ): void {
     if (!this.isEnabled(LogLevel.warn)) return;
     logger.warn(message, data);
   }
 
-  public error(message: string, data?: Record<string, any> | undefined): void {
+  public error(
+    message: string,
+    data?: Record<string, unknown> | undefined,
+  ): void {
     if (!this.isEnabled(LogLevel.error)) return;
     logger.error(message, data);
   }
 
-  public fatal(message: string, data?: Record<string, any> | undefined): void {
+  public fatal(
+    message: string,
+    data?: Record<string, unknown> | undefined,
+  ): void {
     if (!this.isEnabled(LogLevel.fatal)) return;
     logger.error(message, data);
   }
diff --git a/apps/ssi-abstraction/src/app.module.ts b/apps/ssi-abstraction/src/app.module.ts
index 0eda6d7..8c3928c 100644
--- a/apps/ssi-abstraction/src/app.module.ts
+++ b/apps/ssi-abstraction/src/app.module.ts
@@ -29,7 +29,6 @@ import { AgentModule } from './agent/agent.module.js';
   ],
 })
 export class AppModule implements NestModule {
-  // eslint-disable-next-line class-methods-use-this
   configure(consumer: MiddlewareConsumer) {
     consumer.apply(AgentMid).forRoutes('agent', '*/agent');
   }
diff --git a/apps/ssi-abstraction/src/client/nats.client.ts b/apps/ssi-abstraction/src/client/nats.client.ts
index 1e995b4..fffd1c8 100644
--- a/apps/ssi-abstraction/src/client/nats.client.ts
+++ b/apps/ssi-abstraction/src/client/nats.client.ts
@@ -15,7 +15,7 @@ export class NatsClientService {
    * @param eventName - the event name
    * @param data - the data to be passed as payload of the event
    */
-  publish(eventName: string, data: any) {
+  publish<D = unknown>(eventName: string, data: D) {
     logger.info(
       `Publish nats event: ${NATSServices.SERVICE_NAME}/${eventName}`,
     );
diff --git a/apps/ssi-abstraction/src/common/response.ts b/apps/ssi-abstraction/src/common/response.ts
index 0bbcc92..6fe63e5 100644
--- a/apps/ssi-abstraction/src/common/response.ts
+++ b/apps/ssi-abstraction/src/common/response.ts
@@ -1,6 +1,6 @@
 export interface ResponseType {
   statusCode: number;
   message: string;
-  data?: any;
-  error?: any;
+  data?: unknown;
+  error?: unknown;
 }
diff --git a/apps/ssi-abstraction/src/config/config.ts b/apps/ssi-abstraction/src/config/config.ts
index 8b7c010..c827fbe 100644
--- a/apps/ssi-abstraction/src/config/config.ts
+++ b/apps/ssi-abstraction/src/config/config.ts
@@ -22,8 +22,6 @@ interface Config {
     autoAcceptConnection: boolean;
     autoAcceptCredential: AutoAcceptCredential;
     idUnionKey: string;
-    basicUser: string;
-    basicPass: string;
   };
 }
 
@@ -49,8 +47,6 @@ const config = (): Config => ({
     autoAcceptCredential: process.env
       .AGENT_AUTO_ACCEPT_CREDENTIAL as AutoAcceptCredential,
     idUnionKey: process.env.AGENT_ID_UNION_KEY || '',
-    basicUser: process.env.BASIC_USER!,
-    basicPass: process.env.BASIC_PASS!,
   },
 });
 
diff --git a/apps/ssi-abstraction/src/globalUtils/exception.handler.ts b/apps/ssi-abstraction/src/globalUtils/exception.handler.ts
index dec5873..08fa2a6 100644
--- a/apps/ssi-abstraction/src/globalUtils/exception.handler.ts
+++ b/apps/ssi-abstraction/src/globalUtils/exception.handler.ts
@@ -18,7 +18,7 @@ export class ExceptionHandler implements ExceptionFilter {
    * @param exception - error
    * @param host - the execution context for exceptions
    */
-  catch(exception: any, host: ArgumentsHost): void {
+  catch(exception: HttpException, host: ArgumentsHost): void {
     // In certain situations `httpAdapter` might not be available in the
     // constructor method, thus we should resolve it here.
     const { httpAdapter } = this.httpAdapterHost;
@@ -27,17 +27,10 @@ export class ExceptionHandler implements ExceptionFilter {
     const response = ctx.getResponse();
 
     let statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
-    let message =
-      exception.message.error || exception.message || 'Something went wrong!';
+    const message = exception.message || 'Something went wrong!';
 
     if (exception instanceof HttpException) {
-      const errorResponse = exception.getResponse();
-
       statusCode = exception.getStatus();
-      message =
-        typeof errorResponse === 'object' && 'error' in errorResponse
-          ? errorResponse.error
-          : errorResponse || message;
     }
 
     const responseBody: ResponseType = {
diff --git a/apps/ssi-abstraction/src/globalUtils/logger.ts b/apps/ssi-abstraction/src/globalUtils/logger.ts
index cc73b21..d5a8bbe 100644
--- a/apps/ssi-abstraction/src/globalUtils/logger.ts
+++ b/apps/ssi-abstraction/src/globalUtils/logger.ts
@@ -1,27 +1,12 @@
 import winston, { Logger } from 'winston';
 import ecsFormat from '@elastic/ecs-winston-format';
 
-// import { ElasticsearchTransport } from 'winston-elasticsearch';
-// const esTransportOpts = {
-//   clientOpts: { node: process.env.ECSURL },
-// };
-//
-// const esTransport = new ElasticsearchTransport(esTransportOpts);
-//
-// esTransport.on('error', (error: any) => {
-//   console.error('Error in logger caught', error);
-// });
-
 const logger: Logger = winston.createLogger({
   format: ecsFormat({ convertReqRes: true }),
-  transports: [
-    new winston.transports.Console(),
-    // esTransport,
-  ],
+  transports: [new winston.transports.Console()],
 });
 
 logger.on('error', (error: Error) => {
-  // eslint-disable-next-line no-console
   console.error('Error in logger caught', error);
 });
 
diff --git a/apps/ssi-abstraction/src/health/health.controller.ts b/apps/ssi-abstraction/src/health/health.controller.ts
index d957968..94fb4e9 100644
--- a/apps/ssi-abstraction/src/health/health.controller.ts
+++ b/apps/ssi-abstraction/src/health/health.controller.ts
@@ -7,7 +7,6 @@ export class HealthController {
    *
    * @returns - OK (200) if app is running
    */
-  // eslint-disable-next-line class-methods-use-this
   @Get()
   getHealth() {
     return {
diff --git a/apps/ssi-abstraction/src/middleware/agentMid.middleware.ts b/apps/ssi-abstraction/src/middleware/agentMid.middleware.ts
index d4b37ea..a8d1a66 100644
--- a/apps/ssi-abstraction/src/middleware/agentMid.middleware.ts
+++ b/apps/ssi-abstraction/src/middleware/agentMid.middleware.ts
@@ -7,7 +7,6 @@ import { Request, NextFunction, Response } from 'express';
  */
 @Injectable()
 export class AgentMid implements NestMiddleware {
-  // eslint-disable-next-line class-methods-use-this
   use(req: Request, res: Response, next: NextFunction) {
     const [, prop] = req.url.split('/');
     if (prop === 'info') {
diff --git a/apps/ssi-abstraction/test/didComm.e2e-spec.ts b/apps/ssi-abstraction/test/didComm.e2e-spec.ts
index 94bd4ba..2e35063 100644
--- a/apps/ssi-abstraction/test/didComm.e2e-spec.ts
+++ b/apps/ssi-abstraction/test/didComm.e2e-spec.ts
@@ -1,7 +1,7 @@
 import { Test, TestingModule } from '@nestjs/testing';
 import { INestApplication } from '@nestjs/common';
 import request from 'supertest';
-import AppModule from '@src/app.module';
+import AppModule from '../src/app.module';
 
 describe('DidCommController (e2e)', () => {
   let app: INestApplication;
diff --git a/apps/ssi-abstraction/tsconfig.json b/apps/ssi-abstraction/tsconfig.json
index c759d12..dd7aef8 100644
--- a/apps/ssi-abstraction/tsconfig.json
+++ b/apps/ssi-abstraction/tsconfig.json
@@ -11,5 +11,5 @@
     "rootDir": "./src"
   },
   "include": ["src", "config"],
-  "exclude": ["node_modules", "./dist/**/*"]
+  "exclude": ["node_modules", "dist"]
 }
diff --git a/package.json b/package.json
index 5e3bc07..dedb9f0 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,7 @@
     "connection:build": "pnpm -F connection-manager build",
     "principal:build": "pnpm -F principal-manager build",
     "proof:build": "pnpm -F proof-manager build",
-    "ssi:build": "pnpm -F ssi-abstraction build"
+    "ssi:build": "pnpm -F ssi-abstraction build",
+    "lint": "pnpm -r lint"
   }
 }
-- 
GitLab