UNPKG

@tonightpass/nestjs-mailjet

Version:

NestJS module for integrating Mailjet email service with your NestJS applications

1 lines 14.2 kB
{"version":3,"sources":["../src/constants/mailjet.constants.ts","../src/email/mailjet.provider.ts","../src/email/mailjet.service.ts","../src/email/mailjet.module.ts"],"names":["MAILJET_MODULE_OPTIONS","createMailjetProviders","options","provide","useValue","MailjetService","client","clientConfig","apiKey","apiSecret","sandboxMode","config","version","host","output","Client","Error","findContact","id","queryData","IsExcludedFromCampaigns","result","get","toString","request","response","status","body","Count","Data","addContact","contact","post","subscribeContactToList","contactId","listId","action","ContactsLists","Action","ListID","unsubscribeContactFromList","sendEmail","messages","HttpStatus","OK","Messages","length","Status","JSON","stringify","_MailjetService","M","E","MailjetModule","forRoot","module","providers","forRootAsync","createAsyncProviders","imports","useExisting","useFactory","createAsyncOptionsProviders","useClass","inject","__name","optionsFactory","createMailjetOptions","_MailjetModule","HttpModule","exports"],"mappings":"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","file":"index.mjs","sourcesContent":["export const MAILJET_MODULE_OPTIONS = \"MAILJET_MODULE_OPTIONS\";\n","import { Provider } from \"@nestjs/common\";\n\nimport { MailjetModuleOptions } from \"./interfaces\";\nimport { MAILJET_MODULE_OPTIONS } from \"../constants/mailjet.constants\";\n\nexport function createMailjetProviders(\n options: MailjetModuleOptions,\n): Provider[] {\n return [\n {\n provide: MAILJET_MODULE_OPTIONS,\n useValue: options,\n },\n ];\n}\n","import { HttpStatus, Inject, Injectable } from \"@nestjs/common\";\nimport { Client, Contact, LibraryResponse, SendEmailV3_1 } from \"node-mailjet\";\nimport type { ClientParams } from \"node-mailjet/declarations/client/Client\";\n\nimport type { MailjetModuleOptions } from \"./interfaces\";\nimport { MAILJET_MODULE_OPTIONS } from \"../constants/mailjet.constants\";\n\n@Injectable()\nexport class MailjetService {\n private readonly client: Client;\n\n constructor(\n @Inject(MAILJET_MODULE_OPTIONS)\n options: MailjetModuleOptions,\n ) {\n const clientConfig: ClientParams = {\n apiKey: options.apiKey,\n apiSecret: options.apiSecret,\n };\n\n if (options.sandboxMode === true) {\n clientConfig.config = {\n version: \"v3.1\",\n host: \"api.mailjet.com\",\n output: \"json\",\n };\n }\n\n this.client = new Client(clientConfig);\n\n if (!this.client) {\n throw new Error(\"Mailjet client is not initialized\");\n }\n }\n\n async findContact(id: string | number): Promise<Contact.Contact> {\n const queryData: Contact.GetContactQueryParams = {\n IsExcludedFromCampaigns: false,\n };\n\n const result: LibraryResponse<Contact.GetContactResponse> =\n await this.client\n .get(\"contact\", { version: \"v3\" })\n .id(id.toString())\n .request({}, queryData);\n\n if (result.response.status !== 200 || result.body.Count === 0) {\n throw new Error(`Contact with id ${id} not found`);\n }\n\n return result.body.Data[0];\n }\n\n async addContact(contact: Contact.PostContactBody): Promise<Contact.Contact> {\n const result: LibraryResponse<Contact.PostContactResponse> =\n await this.client.post(\"contact\", { version: \"v3\" }).request(contact);\n\n if (result.response.status !== 201 || result.body.Count === 0) {\n throw new Error(\"Contact not created\");\n }\n\n return result.body.Data[0];\n }\n\n async subscribeContactToList(\n contactId: string | number,\n listId: string | number,\n ): Promise<Contact.Contact> {\n const result: LibraryResponse<Contact.PostContactResponse> =\n await this.client\n .post(\"contact\", { version: \"v3\" })\n .id(contactId.toString())\n .action(\"managecontactslists\")\n .request({\n ContactsLists: [\n {\n Action: \"addforce\",\n ListID: listId,\n },\n ],\n });\n\n if (result.response.status !== 201 || result.body.Count === 0) {\n throw new Error(\"Contact not subscribed\");\n }\n\n return result.body.Data[0];\n }\n\n async unsubscribeContactFromList(\n contactId: string | number,\n listId: string | number,\n ): Promise<Contact.Contact> {\n const result: LibraryResponse<Contact.PostContactResponse> =\n await this.client\n .post(\"contact\", { version: \"v3\" })\n .id(contactId.toString())\n .action(\"managecontactslists\")\n .request({\n ContactsLists: [\n {\n Action: \"unsub\",\n ListID: listId,\n },\n ],\n });\n\n if (result.response.status !== 201 || result.body.Count === 0) {\n throw new Error(\"Contact not unsubscribed\");\n }\n\n return result.body.Data[0];\n }\n\n async sendEmail<TVars>(\n messages: SendEmailV3_1.Body<undefined, TVars>,\n ): Promise<SendEmailV3_1.ResponseMessage[]> {\n const result: LibraryResponse<SendEmailV3_1.Response> = await this.client\n .post(\"send\", { version: \"v3.1\" })\n .request(messages);\n\n if (\n result.response.status !== HttpStatus.OK ||\n result.body.Messages.length === 0 ||\n result.body.Messages[0].Status !== \"success\"\n ) {\n throw new Error(\n `Email messages not sent: ${JSON.stringify(result.body.Messages?.[0] || result.body)}`,\n );\n }\n\n return result.body.Messages;\n }\n}\n","import { HttpModule } from \"@nestjs/axios\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\n\nimport { MailjetModuleOptions } from \"./interfaces\";\nimport {\n MailjetModuleAsyncOptions,\n MailjetOptionsFactory,\n} from \"./interfaces/mailjet-module-async-options.interface\";\nimport { createMailjetProviders } from \"./mailjet.provider\";\nimport { MailjetService } from \"./mailjet.service\";\nimport { MAILJET_MODULE_OPTIONS } from \"../constants/mailjet.constants\";\n\n@Module({\n imports: [HttpModule],\n providers: [MailjetService],\n exports: [MailjetService],\n})\nexport class MailjetModule {\n static forRoot(options: MailjetModuleOptions): DynamicModule {\n return {\n module: MailjetModule,\n providers: createMailjetProviders(options),\n };\n }\n\n static forRootAsync(options: MailjetModuleAsyncOptions): DynamicModule {\n const providers = [...this.createAsyncProviders(options)];\n\n return {\n module: MailjetModule,\n imports: options.imports || [],\n providers,\n };\n }\n\n private static createAsyncProviders(\n options: MailjetModuleAsyncOptions,\n ): Provider[] {\n if (options.useExisting || options.useFactory) {\n return [this.createAsyncOptionsProviders(options)];\n }\n\n return [\n this.createAsyncOptionsProviders(options),\n {\n provide: options.useClass,\n useClass: options.useClass,\n },\n ];\n }\n\n private static createAsyncOptionsProviders(\n options: MailjetModuleAsyncOptions,\n ): Provider {\n if (options.useFactory) {\n return {\n provide: MAILJET_MODULE_OPTIONS,\n useFactory: options.useFactory,\n inject: options.inject || [],\n };\n }\n\n return {\n provide: MAILJET_MODULE_OPTIONS,\n useFactory: async (optionsFactory: MailjetOptionsFactory) =>\n await optionsFactory.createMailjetOptions(),\n inject: [options.useExisting || options.useClass],\n };\n }\n}\n"]}