| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- import { Omit } from '@vendure/common/lib/omit';
- import { RequestContext, Type, VendureEvent } from '@vendure/core';
- import { Connection } from 'typeorm';
- import { EmailEventHandler } from './event-handler';
- /**
- * @description
- * A VendureEvent which also includes a `ctx` property containing the current
- * {@link RequestContext}, which is used to determine the channel and language
- * to use when generating the email.
- *
- * @docsCategory EmailPlugin
- * @docsPage Email Plugin Types
- */
- export type EventWithContext = VendureEvent & { ctx: RequestContext };
- /**
- * @description
- * A VendureEvent with a {@link RequestContext} and a `data` property which contains the
- * value resolved from the {@link EmailEventHandler}`.loadData()` callback.
- *
- * @docsCategory EmailPlugin
- * @docsPage Email Plugin Types
- */
- export type EventWithAsyncData<Event extends EventWithContext, R> = Event & { data: R };
- /**
- * @description
- * Configuration for the EmailPlugin.
- *
- * @docsCategory EmailPlugin
- * @docsPage EmailPluginOptions
- * */
- export interface EmailPluginOptions {
- /**
- * @description
- * The path to the location of the email templates. In a default Vendure installation,
- * the templates are installed to `<project root>/vendure/email/templates`.
- */
- templatePath: string;
- /**
- * @description
- * Configures how the emails are sent.
- */
- transport: EmailTransportOptions;
- /**
- * @description
- * An array of {@link EmailEventHandler}s which define which Vendure events will trigger
- * emails, and how those emails are generated.
- */
- handlers: EmailEventHandler[];
- /**
- * @description
- * An object containing variables which are made available to all templates. For example,
- * the storefront URL could be defined here and then used in the "email address verification"
- * email.
- */
- globalTemplateVars?: { [key: string]: any };
- }
- /**
- * @description
- * Configuration for running the EmailPlugin in development mode.
- *
- * @docsCategory EmailPlugin
- * @docsPage EmailPluginOptions
- */
- export interface EmailPluginDevModeOptions extends Omit<EmailPluginOptions, 'transport'> {
- devMode: true;
- /**
- * @description
- * The path to which html email files will be saved rather than being sent.
- */
- outputPath: string;
- /**
- * @description
- * If set, a "mailbox" server will be started which will serve the contents of the
- * `outputPath` similar to a web-based email client, available at the route `/mailbox`,
- * e.g. http://localhost:3000/mailbox.
- */
- mailboxPort?: number;
- }
- /**
- * @description
- * The credentials used for sending email via SMTP
- *
- * @docsCategory EmailPlugin
- * @docsPage Email Plugin Types
- */
- export interface SMTPCredentials {
- /** @description The username */
- user: string;
- /** @description The password */
- pass: string;
- }
- /**
- * @description
- * A union of all the possible transport options for sending emails.
- *
- * @docsCategory EmailPlugin
- * @docsPage Transport Options
- */
- export type EmailTransportOptions =
- | SMTPTransportOptions
- | SendmailTransportOptions
- | FileTransportOptions
- | NoopTransportOptions
- | TestingTransportOptions;
- /**
- * @description
- * A subset of the SMTP transport options of [Nodemailer](https://nodemailer.com/smtp/)
- *
- * @docsCategory EmailPlugin
- * @docsPage Transport Options
- */
- export interface SMTPTransportOptions {
- type: 'smtp';
- /**
- * @description
- * the hostname or IP address to connect to (defaults to ‘localhost’)
- */
- host: string;
- /**
- * @description
- * The port to connect to (defaults to 25 or 465)
- */
- port: number;
- /**
- * @description
- * Defines authentication data
- */
- auth: SMTPCredentials;
- /**
- * @description
- * Defines if the connection should use SSL (if true) or not (if false)
- */
- secure?: boolean;
- /**
- * @description
- * Turns off STARTTLS support if true
- */
- ignoreTLS?: boolean;
- /**
- * @description
- * Forces the client to use STARTTLS. Returns an error if upgrading the connection is not possible or fails.
- */
- requireTLS?: boolean;
- /**
- * @description
- * Optional hostname of the client, used for identifying to the server
- */
- name?: string;
- /**
- * @description
- * The local interface to bind to for network connections
- */
- localAddress?: string;
- /**
- * @description
- * Defines preferred authentication method, e.g. ‘PLAIN’
- */
- authMethod?: string;
- }
- /**
- * @description
- * Uses the local Sendmail program to send the email.
- *
- * @docsCategory EmailPlugin
- * @docsPage Transport Options
- */
- export interface SendmailTransportOptions {
- type: 'sendmail';
- /** path to the sendmail command (defaults to ‘sendmail’) */
- path?: string;
- /** either ‘windows’ or ‘unix’ (default). Forces all newlines in the output to either use Windows syntax <CR><LF> or Unix syntax <LF> */
- newline?: string;
- }
- /**
- * @description
- * Outputs the email as an HTML file for development purposes.
- *
- * @docsCategory EmailPlugin
- * @docsPage Transport Options
- */
- export interface FileTransportOptions {
- type: 'file';
- /** The directory in which the emails will be saved */
- outputPath: string;
- /** When set to true, a raw text file will be output rather than an HTML file */
- raw?: boolean;
- }
- /**
- * @description
- * Does nothing with the generated email. Mainly intended for use in testing where we don't care about the email transport.
- *
- * @docsCategory EmailPlugin
- * @docsPage Transport Options
- */
- export interface NoopTransportOptions {
- type: 'none';
- }
- /**
- * @description
- * The final, generated email details to be sent.
- *
- * @docsCategory EmailPlugin
- * @docsPage Email Plugin Types
- */
- export interface EmailDetails {
- from: string;
- recipient: string;
- subject: string;
- body: string;
- }
- /**
- * @description
- * Forwards the raw GeneratedEmailContext object to a provided callback, for use in testing.
- *
- * @docsCategory EmailPlugin
- * @docsPage Transport Options
- */
- export interface TestingTransportOptions {
- type: 'testing';
- /**
- * @description
- * Callback to be invoked when an email would be sent.
- */
- onSend: (details: EmailDetails) => void;
- }
- /**
- * @description
- * An EmailGenerator generates the subject and body details of an email.
- */
- export interface EmailGenerator<T extends string = any, E extends VendureEvent = any> {
- /**
- * @description
- * Any neccesary setup can be performed here.
- */
- onInit?(options: EmailPluginOptions): void | Promise<void>;
- /**
- * @description
- * Given a subject and body from an email template, this method generates the final
- * interpolated email text.
- */
- generate(
- from: string,
- subject: string,
- body: string,
- templateVars: { [key: string]: any },
- ): Omit<EmailDetails, 'recipient'>;
- }
- /**
- * @description
- * A function used to load async data for use by an {@link EmailEventHandler}.
- *
- * @docsCategory EmailPlugin
- */
- export type LoadDataFn<Event extends EventWithContext, R> = (context: {
- event: Event;
- connection: Connection;
- inject: <T>(type: Type<T>) => T;
- }) => Promise<R>;
|