|
| 1 | +import { ChainType } from '@flarenetwork/mcc'; |
| 2 | +import { |
| 3 | + INestApplication, |
| 4 | + MiddlewareConsumer, |
| 5 | + Module, |
| 6 | + NestModule, |
| 7 | + ValidationPipe, |
| 8 | +} from '@nestjs/common'; |
| 9 | +import { ConfigModule, ConfigService } from '@nestjs/config'; |
| 10 | +import { NestFactory } from '@nestjs/core'; |
| 11 | +import { TypeOrmModule } from '@nestjs/typeorm'; |
| 12 | +import helmet from 'helmet'; |
| 13 | +import { ApiKeyStrategy } from '../../../src/auth/apikey.strategy'; |
| 14 | +import { AuthModule } from '../../../src/auth/auth.module'; |
| 15 | +import { AuthService } from '../../../src/auth/auth.service'; |
| 16 | +import { |
| 17 | + getDatabaseEntities, |
| 18 | + IConfig, |
| 19 | + VerifierServerConfig, |
| 20 | +} from '../../../src/config/configuration'; |
| 21 | +import { BTCAddressValidityVerifierController } from '../../../src/controllers/address-validity-verifier.controller'; |
| 22 | +import { BTCBalanceDecreasingTransactionVerifierController } from '../../../src/controllers/balance-decreasing-transaction-verifier.controller'; |
| 23 | +import { BTCConfirmedBlockHeightExistsVerifierController } from '../../../src/controllers/confirmed-block-height-exists-verifier.controller'; |
| 24 | +import { BTCHealthController } from '../../../src/controllers/health.controller'; |
| 25 | +import { BTCIndexerController } from '../../../src/controllers/indexer.controller'; |
| 26 | +import { BTCPaymentVerifierController } from '../../../src/controllers/payment-verifier.controller'; |
| 27 | +import { BTCReferencedPaymentNonexistenceVerifierController } from '../../../src/controllers/referenced-payment-nonexistence-verifier.controller'; |
| 28 | +import { LoggerMiddleware } from '../../../src/middleware/LoggerMiddleware'; |
| 29 | +import { BTCAddressValidityVerifierService } from '../../../src/services/address-validity-verifier.service'; |
| 30 | +import { BTCBalanceDecreasingTransactionVerifierService } from '../../../src/services/balance-decreasing-transaction-verifier.service'; |
| 31 | +import { BTCConfirmedBlockHeightExistsVerifierService } from '../../../src/services/confirmed-block-height-exists-verifier.service'; |
| 32 | +import { BtcExternalIndexerEngineService } from '../../../src/services/indexer-services/utxo-indexer.service'; |
| 33 | +import { BTCPaymentVerifierService } from '../../../src/services/payment-verifier.service'; |
| 34 | +import { BTCReferencedPaymentNonexistenceVerifierService } from '../../../src/services/referenced-payment-nonexistence-verifier.service'; |
| 35 | + |
| 36 | +function getConfig() { |
| 37 | + const api_keys = process.env.API_KEYS?.split(',') || ['']; |
| 38 | + const verifier_type = ChainType.BTC; |
| 39 | + const isTestnet = process.env.TESTNET == 'true'; |
| 40 | + |
| 41 | + let database = 'db'; |
| 42 | + const isCoverage = process.env.RUNNING_ALL_TESTS == 'true'; |
| 43 | + if (isCoverage) { |
| 44 | + database = 'dbbtc2'; |
| 45 | + } |
| 46 | + |
| 47 | + const db = { |
| 48 | + database: database, |
| 49 | + host: process.env.DB_HOST || '127.0.0.1', |
| 50 | + port: parseInt(process.env.DB_PORT) || 8080, |
| 51 | + username: process.env.DB_USERNAME || 'username', |
| 52 | + password: process.env.DB_PASSWORD || 'password', |
| 53 | + }; |
| 54 | + |
| 55 | + const entities = getDatabaseEntities(verifier_type); |
| 56 | + |
| 57 | + const verifierConfig: VerifierServerConfig = { |
| 58 | + verifierType: verifier_type, |
| 59 | + numberOfConfirmations: parseInt(process.env.NUMBER_OF_CONFIRMATIONS || '6'), |
| 60 | + indexerServerPageLimit: parseInt( |
| 61 | + process.env.INDEXER_SERVER_PAGE_LIMIT || '100', |
| 62 | + ), |
| 63 | + }; |
| 64 | + |
| 65 | + const config: IConfig = { |
| 66 | + port: parseInt(process.env.PORT || '3120'), |
| 67 | + api_keys, |
| 68 | + verifierConfig, |
| 69 | + db: db, |
| 70 | + typeOrmModuleOptions: { |
| 71 | + ...db, |
| 72 | + type: 'postgres', |
| 73 | + entities: entities, |
| 74 | + synchronize: false, |
| 75 | + migrationsRun: false, |
| 76 | + logging: false, |
| 77 | + }, |
| 78 | + isTestnet, |
| 79 | + }; |
| 80 | + return config; |
| 81 | +} |
| 82 | + |
| 83 | +@Module({ |
| 84 | + imports: [ |
| 85 | + ConfigModule.forRoot({ |
| 86 | + load: [getConfig], |
| 87 | + isGlobal: true, |
| 88 | + }), |
| 89 | + TypeOrmModule.forRootAsync({ |
| 90 | + imports: [ConfigModule], |
| 91 | + useFactory: (config: ConfigService<IConfig>) => |
| 92 | + config.get('typeOrmModuleOptions'), |
| 93 | + inject: [ConfigService], |
| 94 | + }), |
| 95 | + AuthModule, |
| 96 | + ], |
| 97 | + controllers: [ |
| 98 | + BTCHealthController, |
| 99 | + BTCIndexerController, |
| 100 | + BTCAddressValidityVerifierController, |
| 101 | + BTCBalanceDecreasingTransactionVerifierController, |
| 102 | + BTCConfirmedBlockHeightExistsVerifierController, |
| 103 | + BTCPaymentVerifierController, |
| 104 | + BTCReferencedPaymentNonexistenceVerifierController, |
| 105 | + ], |
| 106 | + providers: [ |
| 107 | + ApiKeyStrategy, |
| 108 | + AuthService, |
| 109 | + BtcExternalIndexerEngineService, |
| 110 | + BTCAddressValidityVerifierService, |
| 111 | + BTCBalanceDecreasingTransactionVerifierService, |
| 112 | + BTCConfirmedBlockHeightExistsVerifierService, |
| 113 | + BTCPaymentVerifierService, |
| 114 | + BTCReferencedPaymentNonexistenceVerifierService, |
| 115 | + ], |
| 116 | +}) |
| 117 | +export class BtcVerifierServerModule implements NestModule { |
| 118 | + configure(consumer: MiddlewareConsumer) { |
| 119 | + consumer.apply(LoggerMiddleware).forRoutes('*'); |
| 120 | + } |
| 121 | +} |
| 122 | + |
| 123 | +export let app: INestApplication; |
| 124 | + |
| 125 | +before(async () => { |
| 126 | + app = await NestFactory.create(BtcVerifierServerModule); |
| 127 | + |
| 128 | + app.use(helmet()); |
| 129 | + app.useGlobalPipes(new ValidationPipe({ transform: true })); |
| 130 | + app.enableCors(); |
| 131 | + |
| 132 | + await app.listen(3124, '0.0.0.0'); |
| 133 | +}); |
| 134 | + |
| 135 | +after(async () => { |
| 136 | + await app.close(); |
| 137 | +}); |
0 commit comments