stashing code

This commit is contained in:
user
2025-10-20 17:07:41 +03:00
commit f5b99afc8f
890 changed files with 54823 additions and 0 deletions

89
packages/email/index.ts Normal file
View File

@@ -0,0 +1,89 @@
import {
EmailProviders,
type EmailProviderTypes,
type EmailServiceProvider,
type EmailPayload,
} from "./src/data";
import { ERROR_CODES, type Result } from "@pkg/result";
import { getError } from "@pkg/logger";
import { ResendEmailSvcProvider } from "./src/resend.provider";
export class EmailService {
private provider: EmailServiceProvider | null = null;
initialize(apiKey: string): Result<boolean> {
try {
this.provider = this.createProvider(EmailProviders.Resend, { apiKey });
return this.provider.initialize();
} catch (e) {
return {
error: getError(
{
code: ERROR_CODES.INTERNAL_SERVER_ERROR,
message: "Failed to initialize email provider",
userHint: "Please check email configuration",
detail: "Error creating email provider",
},
e,
),
};
}
}
private createProvider(
type: EmailProviderTypes,
config: { apiKey: string },
): EmailServiceProvider {
switch (type) {
case EmailProviders.Resend:
return new ResendEmailSvcProvider(config.apiKey);
default:
throw new Error(`Unsupported email provider: ${type}`);
}
}
async sendEmail(
payload: EmailPayload,
config: { apiKey: string },
): Promise<Result<boolean>> {
if (!this.provider) {
const initResult = this.initialize(config.apiKey);
if (initResult.error) return initResult;
}
return await this.provider!.sendEmail(payload);
}
async sendEmailWithReactTemplate(
payload: {
to: string;
subject: string;
from: string;
cc?: string[];
bcc?: string[];
attachments?: any[];
template: string;
templateData: any;
},
config: { apiKey: string },
): Promise<Result<boolean>> {
if (!this.provider) {
const initResult = this.initialize(config.apiKey);
if (initResult.error) return initResult;
}
// This assumes you're using Resend as the provider
if (this.provider instanceof ResendEmailSvcProvider) {
return await this.provider.sendEmailWithReact(payload);
} else {
return {
error: getError({
code: ERROR_CODES.INTERNAL_SERVER_ERROR,
message:
"React templates are only supported with the Resend provider",
userHint: "Please configure Resend as your email provider",
detail: "Current email provider doesn't support React templates",
}),
};
}
}
}