diff --git a/packages/auth/src/graphql/resolvers/page.test.ts b/packages/auth/src/graphql/resolvers/page.test.ts index 74cb7a93de..2768c96b2b 100644 --- a/packages/auth/src/graphql/resolvers/page.test.ts +++ b/packages/auth/src/graphql/resolvers/page.test.ts @@ -52,19 +52,17 @@ export const getPageTests = ({ const toConnection = (query: ApolloQueryResult): Connection => { if (query.data) { if (parent) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - if (query.data[parent.query]) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return query.data[parent.query][pagedQuery] + const parentData = query.data[parent.query as keyof typeof query.data] + + if (parentData) { + return (parentData as Record>)[pagedQuery] } else { throw new Error(`Parent ${parent.query} was empty`) } } else { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return query.data[pagedQuery] + return query.data[ + pagedQuery as keyof typeof query.data + ] as Connection } } else { throw new Error('Data was empty') diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts index 99cf93e5be..2df0c17153 100644 --- a/packages/auth/src/index.ts +++ b/packages/auth/src/index.ts @@ -230,9 +230,7 @@ export const start = async ( logger.info('completed graceful shutdown.') process.exit(0) } catch (err) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const errInfo = err instanceof Error && error.stack ? err.stack : err + const errInfo = err instanceof Error && err.stack ? err.stack : err logger.error({ err: errInfo }, 'error while shutting down') process.exit(1) } @@ -255,9 +253,7 @@ export const start = async ( logger.info('completed graceful shutdown.') process.exit(0) } catch (err) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const errInfo = err instanceof Error && error.stack ? err.stack : err + const errInfo = err instanceof Error && err.stack ? err.stack : err logger.error({ err: errInfo }, 'error while shutting down') process.exit(1) } diff --git a/packages/backend/src/app.ts b/packages/backend/src/app.ts index 6a4556021f..5a62c3c6fc 100644 --- a/packages/backend/src/app.ts +++ b/packages/backend/src/app.ts @@ -553,8 +553,6 @@ export class App { quoteRoutes.get ) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore router.get( WALLET_ADDRESS_PATH + '/jwks.json', createWalletAddressMiddleware(), @@ -568,8 +566,6 @@ export class App { // Add the wallet address query route last. // Otherwise it will be matched instead of other Open Payments endpoints. - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore router.get( WALLET_ADDRESS_PATH, createWalletAddressMiddleware(), diff --git a/packages/backend/src/graphql/resolvers/page.test.ts b/packages/backend/src/graphql/resolvers/page.test.ts index 570b87a997..a5b92c0a3f 100644 --- a/packages/backend/src/graphql/resolvers/page.test.ts +++ b/packages/backend/src/graphql/resolvers/page.test.ts @@ -52,19 +52,17 @@ export const getPageTests = ({ const toConnection = (query: ApolloQueryResult): Connection => { if (query.data) { if (parent) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - if (query.data[parent.query]) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return query.data[parent.query][pagedQuery] + const parentData = query.data[parent.query as keyof typeof query.data] + + if (parentData) { + return (parentData as Record>)[pagedQuery] } else { throw new Error(`Parent ${parent.query} was empty`) } } else { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return query.data[pagedQuery] + return query.data[ + pagedQuery as keyof typeof query.data + ] as Connection } } else { throw new Error('Data was empty') diff --git a/packages/backend/src/open_payments/auth/middleware.ts b/packages/backend/src/open_payments/auth/middleware.ts index 7bfec72b9f..e9e544fa92 100644 --- a/packages/backend/src/open_payments/auth/middleware.ts +++ b/packages/backend/src/open_payments/auth/middleware.ts @@ -124,9 +124,10 @@ export function createTokenIntrospectionMiddleware({ ) { ctx.grant = { id: tokenInfo.grant, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - limits: access['limits'] ? parseLimits(access['limits']) : undefined + limits: + 'limits' in access && access.limits + ? parseLimits(access.limits) + : undefined } } await next() diff --git a/packages/backend/src/payment-method/ilp/connector/core/utils/create-context.ts b/packages/backend/src/payment-method/ilp/connector/core/utils/create-context.ts index 8b1d4dc5ff..cb8af0779f 100644 --- a/packages/backend/src/payment-method/ilp/connector/core/utils/create-context.ts +++ b/packages/backend/src/payment-method/ilp/connector/core/utils/create-context.ts @@ -6,6 +6,7 @@ import { MockServerResponse } from '.' import { ILPContext } from '..' +import { ServerResponse, IncomingMessage } from 'http' export type Options = { app?: Koa @@ -20,9 +21,10 @@ export function createContext( ): Koa.ParameterizedContext { const app = options.app || new Koa() const req = new MockIncomingMessage(options.req || {}) - const res = new MockServerResponse(req, options.res) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + const res = new MockServerResponse( + req, + options.res + ) as unknown as ServerResponse const context = app.createContext(req, res) Object.keys(options).forEach((key) => { diff --git a/packages/backend/src/payment-method/ilp/connector/core/utils/http-mocks.ts b/packages/backend/src/payment-method/ilp/connector/core/utils/http-mocks.ts index d9793b0120..b9cae35aa9 100644 --- a/packages/backend/src/payment-method/ilp/connector/core/utils/http-mocks.ts +++ b/packages/backend/src/payment-method/ilp/connector/core/utils/http-mocks.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/ban-ts-comment */ import { IncomingMessage, IncomingHttpHeaders, @@ -9,8 +8,10 @@ import { import { Transform } from 'stream' import { Socket } from 'net' +type GenericOptionValues = string | undefined | string[] | IncomingHttpHeaders + export interface MockIncomingMessageOptions { - [key: string]: string | undefined | string[] | IncomingHttpHeaders + [key: string]: GenericOptionValues method?: string url?: string headers?: IncomingHttpHeaders @@ -21,12 +22,10 @@ export class MockIncomingMessage extends Transform { readonly httpVersion = '1.1' readonly httpVersionMajor = 1 readonly httpVersionMinor = 1 - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - id: string | number | Record + id!: string | number | Record aborted = false complete = false - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - connection: Socket + connection!: Socket headers: IncomingHttpHeaders rawHeaders: string[] trailers: { [key: string]: string | undefined } = {} @@ -41,8 +40,7 @@ export class MockIncomingMessage extends Transform { url?: string | undefined statusCode?: number | undefined statusMessage?: string | undefined - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - socket: Socket + socket!: Socket private _failError?: Error @@ -66,8 +64,8 @@ export class MockIncomingMessage extends Transform { const reservedOptions = ['method', 'url', 'headers', 'rawHeaders'] Object.keys(options).forEach((key) => { if (reservedOptions.indexOf(key) === -1) { - // @ts-ignore - this[key] = options[key] + ;(this as unknown as Record)[key] = + options[key] } }) @@ -116,12 +114,10 @@ export class MockServerResponse extends Transform { sendDate = true finished = false headersSent = false - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - connection: Socket + connection!: Socket socket: Socket | null = null - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - setTimeout: (msecs: number, callback?: () => void) => this + setTimeout!: (msecs: number, callback?: () => void) => this setHeader = (name: string, value: number | string | string[]): void => { this._headers[name.toLowerCase()] = value } @@ -146,14 +142,10 @@ export class MockServerResponse extends Transform { delete this._headers[name.toLowerCase()] } - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - addTrailers: (headers: OutgoingHttpHeaders | Array<[string, string]>) => void - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - flushHeaders: () => void - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - assignSocket: (socket: Socket) => void - // @ts-ignore: Property has no initializer and is not definitely assigned in the constructor. - detachSocket: (socket: Socket) => void + addTrailers!: (headers: OutgoingHttpHeaders | Array<[string, string]>) => void + flushHeaders!: () => void + assignSocket!: (socket: Socket) => void + detachSocket!: (socket: Socket) => void writeContinue = (callback?: () => void): void => { if (callback) callback() @@ -169,7 +161,6 @@ export class MockServerResponse extends Transform { reasonPhrase = undefined } this.statusCode = statusCode - // @ts-ignore this.statusMessage = reasonPhrase || STATUS_CODES[statusCode] || 'unknown' if (headers) { for (const [name, header] of Object.entries(headers)) { diff --git a/packages/backend/src/payment-method/ilp/spsp/middleware.test.ts b/packages/backend/src/payment-method/ilp/spsp/middleware.test.ts index 294a7ad614..2fbd8c4a94 100644 --- a/packages/backend/src/payment-method/ilp/spsp/middleware.test.ts +++ b/packages/backend/src/payment-method/ilp/spsp/middleware.test.ts @@ -1,8 +1,4 @@ -import { - spspMiddleware, - SPSPConnectionContext, - SPSPWalletAddressContext -} from './middleware' +import { spspMiddleware, SPSPWalletAddressContext } from './middleware' import { setup } from '../../../open_payments/wallet_address/model.test' import { Config } from '../../../config/app' import { IocContract } from '@adonisjs/fold' @@ -10,8 +6,6 @@ import { initIocContainer } from '../../..' import { AppServices } from '../../../app' import { createTestApp, TestContainer } from '../../../tests/app' import { createAsset } from '../../../tests/asset' -import { createContext } from '../../../tests/context' -import { createIncomingPayment } from '../../../tests/incomingPayment' import { createWalletAddress } from '../../../tests/walletAddress' import { truncateTables } from '../../../tests/tableManager' @@ -78,50 +72,4 @@ describe('SPSP Middleware', (): void => { }) }) }) - - describe('Incoming Payment Connection', (): void => { - let ctx: SPSPConnectionContext - - beforeEach(async (): Promise => { - ctx = createContext( - { - headers: { - Accept: 'application/json' - } - }, - {} - ) - const asset = await createAsset(deps) - const { id: walletAddressId } = await createWalletAddress(deps, { - assetId: asset.id - }) - const incomingPayment = await createIncomingPayment(deps, { - walletAddressId - }) - ctx.incomingPayment = incomingPayment - ctx.container = deps - }) - - test('calls next for non-SPSP request', async (): Promise => { - await expect(spspMiddleware(ctx, next)).resolves.toBeUndefined() - expect(next).toHaveBeenCalled() - }) - - test('calls SPSP route for SPSP query', async (): Promise => { - const spspRoutes = await ctx.container.use('spspRoutes') - const spspSpy = jest - .spyOn(spspRoutes, 'get') - .mockResolvedValueOnce(undefined) - - ctx.headers['accept'] = 'application/spsp4+json' - await expect(spspMiddleware(ctx, next)).resolves.toBeUndefined() - expect(spspSpy).toHaveBeenCalledTimes(1) - expect(next).not.toHaveBeenCalled() - expect(ctx.paymentTag).toEqual(ctx.incomingPayment.id) - expect(ctx.asset).toEqual({ - code: ctx.incomingPayment.asset.code, - scale: ctx.incomingPayment.asset.scale - }) - }) - }) }) diff --git a/packages/backend/src/payment-method/ilp/spsp/middleware.ts b/packages/backend/src/payment-method/ilp/spsp/middleware.ts index 3e1eba8a9c..ebf6c4300f 100644 --- a/packages/backend/src/payment-method/ilp/spsp/middleware.ts +++ b/packages/backend/src/payment-method/ilp/spsp/middleware.ts @@ -1,11 +1,4 @@ -import { AppContext, WalletAddressContext, SPSPContext } from '../../../app' -import { IncomingPayment } from '../../../open_payments/payment/incoming/model' - -export type SPSPConnectionContext = AppContext & - SPSPContext & { - walletAddress?: never - incomingPayment: IncomingPayment - } +import { WalletAddressContext, SPSPContext } from '../../../app' export type SPSPWalletAddressContext = WalletAddressContext & SPSPContext & { @@ -13,7 +6,7 @@ export type SPSPWalletAddressContext = WalletAddressContext & } export const spspMiddleware = async ( - ctx: SPSPConnectionContext | SPSPWalletAddressContext, + ctx: SPSPWalletAddressContext, next: () => Promise ): Promise => { // Fall back to legacy protocols if client doesn't support Open Payments.