UNPKG

@confluentinc/ksqldb-graphql

Version:
96 lines (86 loc) 2.29 kB
import { ClientHttp2Session } from 'http2'; import { RequestOptions } from 'http'; import { GraphQLFieldResolver, GraphQLObjectType, GraphQLScalarType, GraphQLResolveInfo, GraphQLFieldConfigMap, } from 'graphql'; export interface KSqlDBEntities { [key: string]: { type: GraphQLObjectType | GraphQLScalarType; }; } export type Request = (url: string, body: any, args: any) => void; type KsqDBContext = { ksqlDB: { options: RequestOptions; session: ClientHttp2Session } }; export interface Config { options: RequestOptions; } type KsqldbType = 'BIGINT' | 'STRING' | 'INTEGER' | 'ARRAY' | 'VARCHAR' | 'STRUCT'; export interface MemberSchema { type: Exclude<'ARRAY' | 'STRUCT', KsqldbType>; // TODO - can you have arrays in member schemas? } export interface Field { name: string; schema: { type: KsqldbType; fields: Array<Field> | null; memberSchema: MemberSchema | null; }; } type KsqlDBQuery = { queryString: string; sinks: Array<string>; sinkKafkaTopics: Array<string>; id: string; state: 'RUNNING'; } | null; export interface KsqlDBResponse { name: string; readQueries: Array<KsqlDBQuery>; writeQueries: Array<KsqlDBQuery>; fields: Array<Field>; type: 'STREAM' | 'TABLE'; key: string; timestamp: string; statistics: string; errorStats: string; extended: boolean; format: 'JSON' | 'AVRO'; // TODO verify this value topic: string; partitions: number; replication: number; } export interface Resolver { [key: string]: GraphQLFieldResolver<void, KsqDBContext>; } export interface SubscriptionResolver { [name: string]: { subscribe: ( obj: void, args: { [key: string]: string }, context: KsqDBContext, info: GraphQLResolveInfo ) => Promise<void>; }; } export type KsqlDBGraphResolver = GraphQLFieldResolver< void, KsqDBContext, { [argName: string]: string } >; export type ResolverFields = { queryFields: GraphQLFieldConfigMap<any, any, any>; subscriptionFields: GraphQLFieldConfigMap<any, any, any>; mutationFields: GraphQLFieldConfigMap<any, any, any>; }; export type KsqlDBRest = { statusCode: number, data: Array<{ '@type': 'source_descriptions', statementText: string, sourceDescriptions: Array<KsqlDBResponse>, warnings: [] }> }