mirror of
https://github.com/graphql-hive/console
synced 2026-05-24 09:38:26 +00:00
289 lines
8.1 KiB
TypeScript
289 lines
8.1 KiB
TypeScript
import { createApplication, Scope } from 'graphql-modules';
|
|
import { AwsClient } from '@hive/cdn-script/aws';
|
|
import { activityModule } from './modules/activity';
|
|
import { adminModule } from './modules/admin';
|
|
import { alertsModule } from './modules/alerts';
|
|
import { WEBHOOKS_CONFIG, WebhooksConfig } from './modules/alerts/providers/tokens';
|
|
import { authModule } from './modules/auth';
|
|
import { billingModule } from './modules/billing';
|
|
import { BILLING_CONFIG, BillingConfig } from './modules/billing/providers/tokens';
|
|
import { cdnModule } from './modules/cdn';
|
|
import { CDN_CONFIG, CDNConfig } from './modules/cdn/providers/tokens';
|
|
import { collectionModule } from './modules/collection';
|
|
import { feedbackModule } from './modules/feedback';
|
|
import { FEEDBACK_SLACK_CHANNEL, FEEDBACK_SLACK_TOKEN } from './modules/feedback/providers/tokens';
|
|
import { integrationsModule } from './modules/integrations';
|
|
import {
|
|
GITHUB_APP_CONFIG,
|
|
GitHubApplicationConfig,
|
|
} from './modules/integrations/providers/github-integration-manager';
|
|
import { labModule } from './modules/lab';
|
|
import { oidcIntegrationsModule } from './modules/oidc-integrations';
|
|
import { OIDC_INTEGRATIONS_ENABLED } from './modules/oidc-integrations/providers/tokens';
|
|
import { operationsModule } from './modules/operations';
|
|
import { CLICKHOUSE_CONFIG, ClickHouseConfig } from './modules/operations/providers/tokens';
|
|
import { organizationModule } from './modules/organization';
|
|
import { schemaPolicyModule } from './modules/policy';
|
|
import {
|
|
SCHEMA_POLICY_SERVICE_CONFIG,
|
|
SchemaPolicyServiceConfig,
|
|
} from './modules/policy/providers/tokens';
|
|
import { projectModule } from './modules/project';
|
|
import { rateLimitModule } from './modules/rate-limit';
|
|
import {
|
|
RATE_LIMIT_SERVICE_CONFIG,
|
|
RateLimitServiceConfig,
|
|
} from './modules/rate-limit/providers/tokens';
|
|
import { schemaModule } from './modules/schema';
|
|
import { ArtifactStorageWriter } from './modules/schema/providers/artifact-storage-writer';
|
|
import { provideSchemaModuleConfig, SchemaModuleConfig } from './modules/schema/providers/config';
|
|
import {
|
|
SCHEMA_SERVICE_CONFIG,
|
|
SchemaServiceConfig,
|
|
} from './modules/schema/providers/orchestrators/tokens';
|
|
import { sharedModule } from './modules/shared';
|
|
import { CryptoProvider, encryptionSecretProvider } from './modules/shared/providers/crypto';
|
|
import { DistributedCache } from './modules/shared/providers/distributed-cache';
|
|
import { Emails, EMAILS_ENDPOINT } from './modules/shared/providers/emails';
|
|
import { HttpClient } from './modules/shared/providers/http-client';
|
|
import { IdTranslator } from './modules/shared/providers/id-translator';
|
|
import { Logger } from './modules/shared/providers/logger';
|
|
import { Mutex } from './modules/shared/providers/mutex';
|
|
import { PG_POOL_CONFIG } from './modules/shared/providers/pg-pool';
|
|
import { REDIS_CONFIG, RedisConfig, RedisProvider } from './modules/shared/providers/redis';
|
|
import { S3_CONFIG, type S3Config } from './modules/shared/providers/s3-config';
|
|
import { Storage } from './modules/shared/providers/storage';
|
|
import { WEB_APP_URL } from './modules/shared/providers/tokens';
|
|
import { supportModule } from './modules/support';
|
|
import { provideSupportConfig, SupportConfig } from './modules/support/providers/config';
|
|
import { targetModule } from './modules/target';
|
|
import { tokenModule } from './modules/token';
|
|
import { TOKENS_CONFIG, TokensConfig } from './modules/token/providers/tokens';
|
|
import { usageEstimationModule } from './modules/usage-estimation';
|
|
import {
|
|
USAGE_ESTIMATION_SERVICE_CONFIG,
|
|
UsageEstimationServiceConfig,
|
|
} from './modules/usage-estimation/providers/tokens';
|
|
|
|
const modules = [
|
|
sharedModule,
|
|
authModule,
|
|
organizationModule,
|
|
projectModule,
|
|
targetModule,
|
|
schemaModule,
|
|
activityModule,
|
|
operationsModule,
|
|
tokenModule,
|
|
labModule,
|
|
integrationsModule,
|
|
alertsModule,
|
|
feedbackModule,
|
|
cdnModule,
|
|
adminModule,
|
|
usageEstimationModule,
|
|
rateLimitModule,
|
|
billingModule,
|
|
oidcIntegrationsModule,
|
|
schemaPolicyModule,
|
|
collectionModule,
|
|
];
|
|
|
|
export function createRegistry({
|
|
app,
|
|
tokens,
|
|
webhooks,
|
|
schemaService,
|
|
usageEstimationService,
|
|
rateLimitService,
|
|
schemaPolicyService,
|
|
logger,
|
|
storage,
|
|
clickHouse,
|
|
redis,
|
|
githubApp,
|
|
cdn,
|
|
s3,
|
|
encryptionSecret,
|
|
feedback,
|
|
billing,
|
|
schemaConfig,
|
|
supportConfig,
|
|
emailsEndpoint,
|
|
organizationOIDC,
|
|
}: {
|
|
logger: Logger;
|
|
storage: Storage;
|
|
clickHouse: ClickHouseConfig;
|
|
redis: RedisConfig;
|
|
tokens: TokensConfig;
|
|
webhooks: WebhooksConfig;
|
|
schemaService: SchemaServiceConfig;
|
|
usageEstimationService: UsageEstimationServiceConfig;
|
|
rateLimitService: RateLimitServiceConfig;
|
|
schemaPolicyService: SchemaPolicyServiceConfig;
|
|
githubApp: GitHubApplicationConfig | null;
|
|
cdn: CDNConfig | null;
|
|
s3: {
|
|
bucketName: string;
|
|
endpoint: string;
|
|
accessKeyId: string;
|
|
secretAccessKeyId: string;
|
|
sessionToken?: string;
|
|
};
|
|
encryptionSecret: string;
|
|
feedback: {
|
|
token: string;
|
|
channel: string;
|
|
};
|
|
app: {
|
|
baseUrl: string;
|
|
} | null;
|
|
billing: BillingConfig;
|
|
schemaConfig: SchemaModuleConfig;
|
|
supportConfig: SupportConfig | null;
|
|
emailsEndpoint?: string;
|
|
organizationOIDC: boolean;
|
|
}) {
|
|
const s3Config: S3Config = {
|
|
client: new AwsClient({
|
|
accessKeyId: s3.accessKeyId,
|
|
secretAccessKey: s3.secretAccessKeyId,
|
|
sessionToken: s3.sessionToken,
|
|
service: 's3',
|
|
}),
|
|
bucket: s3.bucketName,
|
|
endpoint: s3.endpoint,
|
|
};
|
|
|
|
const artifactStorageWriter = new ArtifactStorageWriter(s3Config, logger);
|
|
|
|
const providers = [
|
|
HttpClient,
|
|
IdTranslator,
|
|
RedisProvider,
|
|
Mutex,
|
|
DistributedCache,
|
|
CryptoProvider,
|
|
Emails,
|
|
{
|
|
provide: ArtifactStorageWriter,
|
|
useValue: artifactStorageWriter,
|
|
},
|
|
{
|
|
provide: Logger,
|
|
useValue: logger,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: Storage,
|
|
useValue: storage,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: CLICKHOUSE_CONFIG,
|
|
useValue: clickHouse,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: TOKENS_CONFIG,
|
|
useValue: tokens,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: BILLING_CONFIG,
|
|
useValue: billing,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: WEBHOOKS_CONFIG,
|
|
useValue: webhooks,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: SCHEMA_SERVICE_CONFIG,
|
|
useValue: schemaService,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: USAGE_ESTIMATION_SERVICE_CONFIG,
|
|
useValue: usageEstimationService,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: RATE_LIMIT_SERVICE_CONFIG,
|
|
useValue: rateLimitService,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: SCHEMA_POLICY_SERVICE_CONFIG,
|
|
useValue: schemaPolicyService,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: REDIS_CONFIG,
|
|
useValue: redis,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: GITHUB_APP_CONFIG,
|
|
useValue: githubApp,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: CDN_CONFIG,
|
|
useValue: cdn,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: S3_CONFIG,
|
|
useValue: s3Config,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: FEEDBACK_SLACK_CHANNEL,
|
|
useValue: feedback.channel,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: FEEDBACK_SLACK_TOKEN,
|
|
useValue: feedback.token,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: OIDC_INTEGRATIONS_ENABLED,
|
|
useValue: organizationOIDC,
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: WEB_APP_URL,
|
|
useValue: app?.baseUrl.replace(/\/$/, '') ?? 'http://localhost:3000',
|
|
scope: Scope.Singleton,
|
|
},
|
|
{
|
|
provide: PG_POOL_CONFIG,
|
|
scope: Scope.Singleton,
|
|
useValue: storage.pool,
|
|
},
|
|
encryptionSecretProvider(encryptionSecret),
|
|
provideSchemaModuleConfig(schemaConfig),
|
|
];
|
|
|
|
if (emailsEndpoint) {
|
|
providers.push({
|
|
provide: EMAILS_ENDPOINT,
|
|
useValue: emailsEndpoint,
|
|
scope: Scope.Singleton,
|
|
});
|
|
modules.push(supportModule);
|
|
}
|
|
|
|
if (supportConfig) {
|
|
providers.push(provideSupportConfig(supportConfig));
|
|
}
|
|
|
|
return createApplication({
|
|
modules,
|
|
providers,
|
|
});
|
|
}
|