@wepublish/api
Version:
API core for we.publish.
130 lines (129 loc) • 6.52 kB
TypeScript
import { Executor } from '@graphql-tools/utils';
import { Author, Comment, CommentRatingSystemAnswer, Event, Image, MailLog, Payment, PaymentMethod, Peer, PrismaClient, User, UserRole } from '@prisma/client';
import { AuthSession, TokenSession, UserSession } from "../../authentication-api/src";
import { MediaAdapter } from "../../image-api/src";
import { BaseMailProvider, MailContext, MailContextOptions } from "../../mail-api/src";
import { InvoiceWithItems, PaymentProvider } from "../../payment-api/src";
import { GenerateJWTProps } from "../../utils-api/src";
import DataLoader from 'dataloader';
import { GraphQLSchema } from 'graphql';
import { IncomingMessage } from 'http';
import { Client } from 'openid-client';
import { ChallengeProvider } from './challenges/challengeProvider';
import { ArticleWithRevisions, PublicArticle } from './db/article';
import { MemberPlanWithPaymentMethods } from './db/memberPlan';
import { NavigationWithLinks } from './db/navigation';
import { PageWithRevisions, PublicPage } from './db/page';
import { SubscriptionWithRelations } from './db/subscription';
import { FullPoll } from './graphql/poll/poll.public-queries';
import { Hooks } from './hooks';
import { MemberContext } from './memberContext';
import { URLAdapter } from './urlAdapter';
import { BlockStylesDataloaderService } from "../../block-content-api/src";
export interface DataLoaderContext {
readonly navigationByID: DataLoader<string, NavigationWithLinks | null>;
readonly navigationByKey: DataLoader<string, NavigationWithLinks | null>;
readonly authorsByID: DataLoader<string, Author | null>;
readonly authorsBySlug: DataLoader<string, Author | null>;
readonly images: DataLoader<string, Image | null>;
readonly articles: DataLoader<string, ArticleWithRevisions | null>;
readonly publicArticles: DataLoader<string, PublicArticle | null>;
readonly pages: DataLoader<string, PageWithRevisions | null>;
readonly publicPagesByID: DataLoader<string, PublicPage | null>;
readonly publicPagesBySlug: DataLoader<string, PublicPage | null>;
readonly events: DataLoader<string, Event | null>;
readonly userRolesByID: DataLoader<string, UserRole | null>;
readonly mailLogsByID: DataLoader<string, MailLog | null>;
readonly peer: DataLoader<string, Peer | null>;
readonly peerBySlug: DataLoader<string, Peer | null>;
readonly peerSchema: DataLoader<string, GraphQLSchema | null>;
readonly peerAdminSchema: DataLoader<string, GraphQLSchema | null>;
readonly memberPlansByID: DataLoader<string, MemberPlanWithPaymentMethods | null>;
readonly memberPlansBySlug: DataLoader<string, MemberPlanWithPaymentMethods | null>;
readonly activeMemberPlansByID: DataLoader<string, MemberPlanWithPaymentMethods | null>;
readonly activeMemberPlansBySlug: DataLoader<string, MemberPlanWithPaymentMethods | null>;
readonly paymentMethodsByID: DataLoader<string, PaymentMethod | null>;
readonly activePaymentMethodsByID: DataLoader<string, PaymentMethod | null>;
readonly activePaymentMethodsBySlug: DataLoader<string, PaymentMethod | null>;
readonly invoicesByID: DataLoader<string, InvoiceWithItems | null>;
readonly paymentsByID: DataLoader<string, Payment | null>;
readonly pollById: DataLoader<string, FullPoll | null>;
readonly eventById: DataLoader<string, Event | null>;
readonly commentsById: DataLoader<string, Comment | null>;
readonly commentRatingSystemAnswers: DataLoader<1, CommentRatingSystemAnswer[]>;
readonly subscriptionsById: DataLoader<string, SubscriptionWithRelations | null>;
readonly usersById: DataLoader<string, User | null>;
readonly blockStyleById: BlockStylesDataloaderService;
}
export interface OAuth2Clients {
name: string;
provider: Oauth2Provider;
client: Client;
}
export interface Context {
readonly hostURL: string;
readonly websiteURL: string;
readonly sessionTTL: number;
readonly hashCostFactor: number;
readonly session: AuthSession | null;
readonly loaders: DataLoaderContext;
readonly mailContext: MailContext;
readonly memberContext: MemberContext;
readonly prisma: PrismaClient;
readonly mediaAdapter: MediaAdapter;
readonly urlAdapter: URLAdapter;
readonly oauth2Providers: Oauth2Provider[];
readonly paymentProviders: PaymentProvider[];
readonly hooks?: Hooks;
readonly challenge: ChallengeProvider;
getOauth2Clients(): Promise<OAuth2Clients[]>;
authenticate(): AuthSession;
authenticateToken(): TokenSession;
authenticateUser(): UserSession;
optionalAuthenticateUser(): UserSession | null;
generateJWT(props: Pick<GenerateJWTProps, 'id' | 'audience' | 'expiresInMinutes'>): string;
verifyJWT(token: string): string;
createPaymentWithProvider(props: CreatePaymentWithProvider): Promise<Payment>;
}
export interface Oauth2Provider {
readonly name: string;
readonly discoverUrl: string;
readonly clientId: string;
readonly clientKey: string;
readonly scopes: string[];
readonly redirectUri: string[];
}
export interface ContextOptions {
readonly hostURL: string;
readonly websiteURL: string;
readonly sessionTTL?: number;
readonly hashCostFactor?: number;
readonly prisma: PrismaClient;
readonly mediaAdapter: MediaAdapter;
readonly urlAdapter: URLAdapter;
readonly mailProvider: BaseMailProvider;
readonly mailContextOptions: MailContextOptions;
readonly oauth2Providers: Oauth2Provider[];
readonly paymentProviders: PaymentProvider[];
readonly hooks?: Hooks;
readonly challenge: ChallengeProvider;
}
export interface SendMailFromProviderProps {
recipient: string;
replyToAddress: string;
subject: string;
message?: string;
template?: string;
templateData?: Record<string, any>;
}
export interface CreatePaymentWithProvider {
paymentMethodID: string;
invoice: InvoiceWithItems;
saveCustomer: boolean;
successURL?: string;
failureURL?: string;
user?: User;
}
export declare function contextFromRequest(req: IncomingMessage | null, { hostURL, websiteURL, prisma, mediaAdapter, urlAdapter, oauth2Providers, hooks, mailProvider, mailContextOptions, paymentProviders, challenge, sessionTTL, hashCostFactor }: ContextOptions): Promise<Context>;
export declare function tokenFromRequest(req: IncomingMessage | null): string | null;
export declare function createFetcher(hostURL: string, token: string, peerTimeOut: number): Executor;