From ac288a6906af0ac6df34e1bedcbab98be339c2c2 Mon Sep 17 00:00:00 2001 From: Nathan Lie Date: Wed, 18 Oct 2023 09:11:38 -0700 Subject: [PATCH] feat(backend): remove connections route (#1940) (#2051) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ömer Talha Özdemir --- packages/backend/src/app.ts | 22 +--- packages/backend/src/index.ts | 8 -- .../open_payments/connection/routes.test.ts | 121 ------------------ .../src/open_payments/connection/routes.ts | 35 ----- 4 files changed, 1 insertion(+), 185 deletions(-) delete mode 100644 packages/backend/src/open_payments/connection/routes.test.ts delete mode 100644 packages/backend/src/open_payments/connection/routes.ts diff --git a/packages/backend/src/app.ts b/packages/backend/src/app.ts index 7c395d8022..f0e032825b 100644 --- a/packages/backend/src/app.ts +++ b/packages/backend/src/app.ts @@ -23,7 +23,6 @@ import { HttpTokenService } from './payment-method/ilp/peer-http-token/service' import { AssetService, AssetOptions } from './asset/service' import { AccountingService } from './accounting/service' import { PeerService } from './payment-method/ilp/peer/service' -import { connectionMiddleware } from './open_payments/connection/middleware' import { createWalletAddressMiddleware } from './open_payments/wallet_address/middleware' import { WalletAddress } from './open_payments/wallet_address/model' import { WalletAddressService } from './open_payments/wallet_address/service' @@ -34,10 +33,7 @@ import { RequestAction } from './open_payments/auth/middleware' import { RatesService } from './rates/service' -import { - spspMiddleware, - SPSPConnectionContext -} from './payment-method/ilp/spsp/middleware' +import { spspMiddleware } from './payment-method/ilp/spsp/middleware' import { SPSPRoutes } from './payment-method/ilp/spsp/routes' import { IncomingPaymentRoutes, @@ -360,24 +356,8 @@ export class App { 'outgoingPaymentRoutes' ) const quoteRoutes = await this.container.use('quoteRoutes') - const connectionRoutes = await this.container.use('connectionRoutes') const { resourceServerSpec } = await this.container.use('openApi') - // GET /connections/{id} - router.get( - WALLET_ADDRESS_PATH + '/connections/:id', - connectionMiddleware, - spspMiddleware, - createValidatorMiddleware>( - resourceServerSpec, - { - path: '/connections/{id}', - method: HttpMethod.GET - } - ), - connectionRoutes.get - ) - // POST /incoming-payments // Create incoming payment router.post>( diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 395e4a464c..7e71eb1b51 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -38,7 +38,6 @@ import { createConnectorService } from './payment-method/ilp/connector' import { createOpenAPI } from '@interledger/openapi' import { createAuthenticatedClient as createOpenPaymentsClient } from '@interledger/open-payments' import { createConnectionService } from './open_payments/connection/service' -import { createConnectionRoutes } from './open_payments/connection/routes' import { createWalletAddressKeyService } from './open_payments/wallet_address/key/service' import { createReceiverService } from './open_payments/receiver/service' import { createRemoteIncomingPaymentService } from './open_payments/payment/incoming_remote/service' @@ -292,13 +291,6 @@ export function initIocContainer( streamServer: await deps.use('streamServer') }) }) - container.singleton('connectionRoutes', async (deps) => { - return createConnectionRoutes({ - logger: await deps.use('logger'), - incomingPaymentService: await deps.use('incomingPaymentService'), - connectionService: await deps.use('connectionService') - }) - }) container.singleton('receiverService', async (deps) => { const config = await deps.use('config') return await createReceiverService({ diff --git a/packages/backend/src/open_payments/connection/routes.test.ts b/packages/backend/src/open_payments/connection/routes.test.ts deleted file mode 100644 index 297f76cdfc..0000000000 --- a/packages/backend/src/open_payments/connection/routes.test.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { IocContract } from '@adonisjs/fold' -import { Knex } from 'knex' -import jestOpenAPI from 'jest-openapi' - -import { AppServices } from '../../app' -import { Config, IAppConfig } from '../../config/app' -import { createTestApp, TestContainer } from '../../tests/app' -import { truncateTables } from '../../tests/tableManager' -import { initIocContainer } from '../../' -import { ConnectionContext } from './middleware' -import { ConnectionRoutes } from './routes' -import { createAsset } from '../../tests/asset' -import { createContext } from '../../tests/context' -import { WalletAddress } from '../wallet_address/model' -import { - IncomingPayment, - IncomingPaymentState -} from '../payment/incoming/model' -import { createIncomingPayment } from '../../tests/incomingPayment' -import { createWalletAddress } from '../../tests/walletAddress' -import base64url from 'base64url' - -describe('Connection Routes', (): void => { - let deps: IocContract - let appContainer: TestContainer - let knex: Knex - let config: IAppConfig - let connectionRoutes: ConnectionRoutes - - beforeAll(async (): Promise => { - config = Config - config.authServerGrantUrl = 'https://auth.wallet.example/authorize' - deps = await initIocContainer(config) - appContainer = await createTestApp(deps) - knex = appContainer.knex - const { resourceServerSpec } = await deps.use('openApi') - jestOpenAPI(resourceServerSpec) - }) - - let walletAddress: WalletAddress - let incomingPayment: IncomingPayment - beforeEach(async (): Promise => { - connectionRoutes = await deps.use('connectionRoutes') - config = await deps.use('config') - - const asset = await createAsset(deps) - walletAddress = await createWalletAddress(deps, { assetId: asset.id }) - incomingPayment = await createIncomingPayment(deps, { - walletAddressId: walletAddress.id, - expiresAt: new Date(Date.now() + 30_000), - incomingAmount: { - value: BigInt('123'), - assetScale: asset.scale, - assetCode: asset.code - }, - metadata: { - description: 'hello world', - externalRef: '#123' - } - }) - }) - - afterEach(async (): Promise => { - await truncateTables(knex) - }) - - afterAll(async (): Promise => { - await appContainer.shutdown() - }) - - describe('get', (): void => { - test.each` - state - ${IncomingPaymentState.Completed} - ${IncomingPaymentState.Expired} - `( - `returns 404 for $state incoming payment`, - async ({ state }): Promise => { - await incomingPayment.$query(knex).patch({ - state, - expiresAt: - state === IncomingPaymentState.Expired ? new Date() : undefined - }) - const ctx = createContext({ - headers: { Accept: 'application/json' }, - url: `/connections/${incomingPayment.connectionId}` - }) - ctx.incomingPayment = incomingPayment - await expect(connectionRoutes.get(ctx)).rejects.toHaveProperty( - 'status', - 404 - ) - } - ) - - test('returns 200 with connection', async (): Promise => { - const ctx = createContext({ - headers: { Accept: 'application/json' }, - url: `/connections/${incomingPayment.connectionId}` - }) - ctx.incomingPayment = incomingPayment - await expect(connectionRoutes.get(ctx)).resolves.toBeUndefined() - expect(ctx.response).toSatisfyApiSpec() - - const sharedSecret = (ctx.response.body as Record)[ - 'sharedSecret' - ] - - expect(ctx.body).toEqual({ - id: `${config.openPaymentsUrl}/connections/${incomingPayment.connectionId}`, - ilpAddress: expect.stringMatching(/^test\.rafiki\.[a-zA-Z0-9_-]{95}$/), - sharedSecret, - assetCode: incomingPayment.asset.code, - assetScale: incomingPayment.asset.scale - }) - const sharedSecretBuffer = Buffer.from(sharedSecret as string, 'base64') - expect(sharedSecretBuffer).toHaveLength(32) - expect(sharedSecret).toEqual(base64url(sharedSecretBuffer)) - }) - }) -}) diff --git a/packages/backend/src/open_payments/connection/routes.ts b/packages/backend/src/open_payments/connection/routes.ts deleted file mode 100644 index 2f4570e07c..0000000000 --- a/packages/backend/src/open_payments/connection/routes.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Logger } from 'pino' -import { IncomingPaymentService } from '../payment/incoming/service' -import { ConnectionContext } from './middleware' -import { ConnectionService } from './service' - -interface ServiceDependencies { - logger: Logger - incomingPaymentService: IncomingPaymentService - connectionService: ConnectionService -} - -export interface ConnectionRoutes { - get(ctx: ConnectionContext): Promise -} - -export function createConnectionRoutes( - deps_: ServiceDependencies -): ConnectionRoutes { - const logger = deps_.logger.child({ - service: 'ConnectionRoutes' - }) - const deps = { ...deps_, logger } - return { - get: (ctx: ConnectionContext) => getConnection(deps, ctx) - } -} - -async function getConnection( - deps: ServiceDependencies, - ctx: ConnectionContext -): Promise { - const connection = deps.connectionService.get(ctx.incomingPayment) - if (!connection) return ctx.throw(404) - ctx.body = connection.toOpenPaymentsType() -}